음악 프로젝트에서 약간의 미적 문제가 발생하여 한동안 버그가 발생했습니다.
나는 타입을 가지고 있으며 a 와 a를 data Key = C | D | ...
구성 할 수 있습니다 . 주요 및 사소한 규모를 예 구분합니다.Scale
Key
Mode
Mode
나는 정의 할 수 있습니다 Mode
에서 함수 등의 형태 Key
로를 Scale
. 이 경우 모드는 소문자 이름을 가지며 (괜찮음) 다음과 같이 Scale을 얻을 수 있습니다
aScale = major C
그러나 음악가들은 이렇게 말하지 않습니다. 그들은이 척도를 주요 C 척도가 아닌 C 주요 척도로 지칭합니다 .
내가 원하는 것
이상적으로 쓰고 싶습니다
aScale = C major
이것이 가능합니까?
내가 시도한 것
from Key
을 구성하는 함수를 만들 수 있으므로 쓸 수 있습니다.Scale
Mode
aScale = c Major
그러나 키를 스케일 생성에 국한시킬 수는 없습니다. 다른 것들도 필요합니다 (예 : 화음 구성 ). 또한 Key
의 인스턴스 여야합니다 Show
.
추가 함수 (또는 값 생성자)를 사용할 때 Mode
이후 를 넣을 수 있습니다 Key
.
aScale = scale C major
와 scale :: Key -> Mode -> Scale
그러나 여분의 단어 스케일 은 시끄럽고 그 이름과 반대로 보이지만 scale
실제로 스케일과 관련이 없습니다. 지능형 부분에 major
, scale
정말입니다 flip ($)
.
A는 사용 newtype Mode = Major | Minor ...
을 제외하고 정말 많이 변경되지 않습니다 scale
요구하는 것은 더 지능이 될 수 있습니다 :
aScale = scale C Major
major C
.