Copyright | (c) Dima Szamozvancev |
---|---|
License | MIT |
Maintainer | ds709@cam.ac.uk |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe |
Language | Haskell2010 |
Types and type functions modelling principles of functional harmony.
- data Quality
- data Degree d q k i where
- data Piece k l where
- data Phrase k l where
- data Cadence k l where
- AuthCad :: Degree V MajQ k Inv1 -> Degree I q k Inv0 -> Cadence k 2
- AuthCad7 :: Degree V DomQ k Inv2 -> Degree I q k Inv0 -> Cadence k 2
- AuthCadVii :: Degree VII DimQ k Inv0 -> Degree I q k Inv0 -> Cadence k 2
- AuthCad64 :: Degree I MajQ k Inv2 -> Degree V DomQ k Inv3 -> Degree I MajQ k Inv1 -> Cadence k 3
- HalfCad :: Degree d q k i -> Degree V MajQ k Inv0 -> Cadence k 2
- DeceptCad :: Degree V DomQ k Inv0 -> Degree VI q k Inv2 -> Cadence k 2
- data Tonic k l where
- data Dominant k l where
- data Subdominant k l where
- SubIIm :: Degree II MinQ k i -> Subdominant k 1
- SubIVM :: Degree IV MajQ k i -> Subdominant k 1
- SubIIImIVM :: Degree III MinQ k i1 -> Degree IV MajQ k i2 -> Subdominant k 2
- SubIVm :: Degree IV MinQ k i -> Subdominant k 1
- type family PieceToChords (l :: Nat) (p :: Piece k l) :: Vector (ChordType 4) l where ...
Documentation
data Degree d q k i where Source #
A scale degree chord in given key, on the given scale, with the given quality.
A functionally described piece of music, built from multiple phrases.
data Cadence k l where Source #
A cadence in a specific key with a specific length.
AuthCad :: Degree V MajQ k Inv1 -> Degree I q k Inv0 -> Cadence k 2 | Authentic cadence with major fifth chord. |
AuthCad7 :: Degree V DomQ k Inv2 -> Degree I q k Inv0 -> Cadence k 2 | Authentic cadence with dominant seventh fifth chord. |
AuthCadVii :: Degree VII DimQ k Inv0 -> Degree I q k Inv0 -> Cadence k 2 | Authentic cadence with diminished seventh chord. |
AuthCad64 :: Degree I MajQ k Inv2 -> Degree V DomQ k Inv3 -> Degree I MajQ k Inv1 -> Cadence k 3 | Authentic cadence with a cadential 6-4 chord |
HalfCad :: Degree d q k i -> Degree V MajQ k Inv0 -> Cadence k 2 | Half cadence ending with a major fifth chord. |
DeceptCad :: Degree V DomQ k Inv0 -> Degree VI q k Inv2 -> Cadence k 2 | Deceptive cadence from a dominant fifth to a sixth. |
A tonic chord.
data Dominant k l where Source #
A dominant chord progression.
DomVM :: Degree V MajQ k i -> Dominant k 1 | Major fifth dominant. |
DomV7 :: Degree V DomQ k i -> Dominant k 1 | Seventh chord fifth degree dominant. |
DomVii0 :: Degree VII DimQ k i -> Dominant k 1 | Diminished seventh degree dominant. |
DomSD :: Subdominant k l1 -> Dominant k (l - l1) -> Dominant k l | Subdominant followed by dominant. |
DomSecD :: Degree II DomQ k Inv0 -> Degree V DomQ k Inv2 -> Dominant k 2 | Secondary dominant followed by dominant. |
data Subdominant k l where Source #
A subdominant chord progression.
SubIIm :: Degree II MinQ k i -> Subdominant k 1 | Minor second subdominant. |
SubIVM :: Degree IV MajQ k i -> Subdominant k 1 | Major fourth subdominant. |
SubIIImIVM :: Degree III MinQ k i1 -> Degree IV MajQ k i2 -> Subdominant k 2 | Minor third followed by major fourth subdominant |
SubIVm :: Degree IV MinQ k i -> Subdominant k 1 | Minor fourth dominant. |
type family PieceToChords (l :: Nat) (p :: Piece k l) :: Vector (ChordType 4) l where ... Source #
Convert a piece to chords.
PieceToChords l (Cad (c :: Cadence k l)) = CadToChords c | |
PieceToChords l ((p :: Phrase k l1) := ps) = PhraseToChords l1 p ++. PieceToChords (l - l1) ps |