mezzo-0.3.0.0: Typesafe music composition

Copyright(c) Dima Szamozvancev
LicenseMIT
Maintainerds709@cam.ac.uk
Stabilityexperimental
Portabilityportable
Safe HaskellSafe
LanguageHaskell2010

Mezzo.Model.Harmony.Functional

Contents

Description

Types and type functions modelling principles of functional harmony.

Synopsis

Types and operations

data Quality Source #

The quality of a scale degree chord.

Constructors

MajQ 
MinQ 
DomQ 
DimQ 

data DegreeC d q k i o where Source #

A scale degree chord in given key, on the given scale, with the given quality and octave.

Constructors

DegChord :: DegreeC d q k i o 

Instances

((~) (ChordType 4) ch1 (DegToChord II DomQ k Inv0 o d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord V DomQ k Inv2 (NatToOct ((-) (OctToNat o) 1)) d2), IntListRep (ChordType 4) ch2) => Primitive (Dominant k 2) (DomSecD k o d1 d2) Source # 

Associated Types

type Rep (DomSecD k o d1 d2) (a :: DomSecD k o d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (DomSecD k o d1 d2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord VII DimQ k Inv1 (NatToOct ((-) (OctToNat o) 1)) d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord I q k Inv0 o d2), IntListRep (ChordType 4) ch2) => Primitive (Cadence k 2) (AuthCadVii k o q d1 d2) Source # 

Associated Types

type Rep (AuthCadVii k o q d1 d2) (a :: AuthCadVii k o q d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (AuthCadVii k o q d1 d2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord V DomQ k Inv2 (NatToOct ((-) (OctToNat o) 1)) d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord I q k Inv0 o d2), IntListRep (ChordType 4) ch2) => Primitive (Cadence k 2) (AuthCad7 k o q d1 d2) Source # 

Associated Types

type Rep (AuthCad7 k o q d1 d2) (a :: AuthCad7 k o q d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (AuthCad7 k o q d1 d2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord V MajQ k Inv1 (NatToOct ((-) (OctToNat o) 1)) d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord I q k Inv0 o d2), IntListRep (ChordType 4) ch2) => Primitive (Cadence k 2) (AuthCad k o q d1 d2) Source # 

Associated Types

type Rep (AuthCad k o q d1 d2) (a :: AuthCad k o q d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (AuthCad k o q d1 d2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord III MinQ k i1 o d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord IV MajQ k i2 (NatToOct ((-) (OctToNat o) 1)) d2), IntListRep (ChordType 4) ch2) => Primitive (Subdominant k 2) (SubIIImIVM k i1 o i2 d1 d2) Source # 

Associated Types

type Rep (SubIIImIVM k i1 o i2 d1 d2) (a :: SubIIImIVM k i1 o i2 d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (SubIIImIVM k i1 o i2 d1 d2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord I q k Inv2 o d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord V DomQ k Inv3 (NatToOct ((-) (OctToNat o) 1)) d2), IntListRep (ChordType 4) ch2, (~) (ChordType 4) ch3 (DegToChord I q k Inv1 o d3), IntListRep (ChordType 4) ch3) => Primitive (Cadence k 3) (AuthCad64 k q o d1 d2 d3) Source # 

Associated Types

type Rep (AuthCad64 k q o d1 d2 d3) (a :: AuthCad64 k q o d1 d2 d3) :: * Source #

Methods

prim :: sing a -> Rep (AuthCad64 k q o d1 d2 d3) a Source #

pretty :: sing a -> String Source #

type Rep (Dominant k 2) (DomSecD k o d1 d2) Source # 
type Rep (Dominant k 2) (DomSecD k o d1 d2) = [[Int]]
type Rep (Cadence k 2) (AuthCadVii k o q d1 d2) Source # 
type Rep (Cadence k 2) (AuthCadVii k o q d1 d2) = [[Int]]
type Rep (Cadence k 2) (AuthCad7 k o q d1 d2) Source # 
type Rep (Cadence k 2) (AuthCad7 k o q d1 d2) = [[Int]]
type Rep (Cadence k 2) (AuthCad k o q d1 d2) Source # 
type Rep (Cadence k 2) (AuthCad k o q d1 d2) = [[Int]]
type Rep (Subdominant k 2) (SubIIImIVM k i1 o i2 d1 d2) Source # 
type Rep (Subdominant k 2) (SubIIImIVM k i1 o i2 d1 d2) = [[Int]]
type Rep (Cadence k 3) (AuthCad64 k q o d1 d2 d3) Source # 
type Rep (Cadence k 3) (AuthCad64 k q o d1 d2 d3) = [[Int]]

type TimeSignature = Nat Source #

The number of beats in a bar.

data TimeSig t Source #

Singleton for TimeSignature.

Constructors

TimeSig 

type family KeyToQual (k :: KeyType) where ... Source #

Convert the key mode to the corresponding chord quality (i.e., major mode into a major chord).

Equations

KeyToQual (Key _ _ MajorMode) = MajQ 
KeyToQual (Key _ _ MinorMode) = MinQ 

type family KeyToOtherQual (k :: KeyType) where ... Source #

Convert the key mode to the opposite chord quality (i.e., major mode into a minor chord).

class IsMajor k s Source #

Enforce that the key is in major mode.

Instances

TypeError Constraint ((:<>:) ((:<>:) (Text "Can't have a ") (Text s)) (Text " in minor mode.")) => IsMajor (Key pc acc MinorMode) s Source # 
IsMajor (Key pc acc MajorMode) s Source # 

class IsMinor k s Source #

Enforce that the key is in minor mode.

Instances

TypeError Constraint ((:<>:) ((:<>:) (Text "Can't have a ") (Text s)) (Text " in minor mode.")) => IsMinor (Key pc acc MajorMode) s Source # 
IsMinor (Key pc acc MinorMode) s Source # 

Functional harmony

Types and constructors

data ProgType k l where Source #

A functionally described piece of music, built from multiple phrases.

Constructors

CadPhrase :: Cadence k l -> ProgType k l

A cadential phrase, ending the progression.

(:=) :: Phrase k l -> ProgType k (n - l) -> ProgType k n infix 5

Add a new phrase to the beginning of the progression.

Instances

IntLListRep (Cadence k l) c => Primitive (ProgType k l) (CadPhrase k l c) Source # 

Associated Types

type Rep (CadPhrase k l c) (a :: CadPhrase k l c) :: * Source #

Methods

prim :: sing a -> Rep (CadPhrase k l c) a Source #

pretty :: sing a -> String Source #

(IntLListRep (Phrase k l) ph, IntLListRep (ProgType k ((-) n l)) pr) => Primitive (ProgType k n) ((:=) k n l ph pr) Source # 

Associated Types

type Rep ((:=) k n l ph pr) (a :: (:=) k n l ph pr) :: * Source #

Methods

prim :: sing a -> Rep ((k := n) l ph pr) a Source #

pretty :: sing a -> String Source #

type Rep (ProgType k l) (CadPhrase k l c) Source # 
type Rep (ProgType k l) (CadPhrase k l c) = [[Int]]
type Rep (ProgType k n) ((:=) k n l ph pr) Source # 
type Rep (ProgType k n) ((:=) k n l ph pr) = [[Int]]

data Phrase k l where Source #

A phrase matching a specific functional progression.

Constructors

PhraseIVI :: Tonic k (l2 - l1) -> Dominant k l1 -> Tonic k (l - l2) -> Phrase k l

A tonic-dominant-tonic phrase.

PhraseVI :: Dominant k l1 -> Tonic k (l - l1) -> Phrase k l

A dominant-tonic phrase.

PhraseI :: Tonic k l -> Phrase k l

A tonic phrase.

Instances

IntLListRep (Tonic k l) t => Primitive (Phrase k l) (PhraseI k l t) Source # 

Associated Types

type Rep (PhraseI k l t) (a :: PhraseI k l t) :: * Source #

Methods

prim :: sing a -> Rep (PhraseI k l t) a Source #

pretty :: sing a -> String Source #

(IntLListRep (Dominant k l1) d, IntLListRep (Tonic k ((-) l l1)) t) => Primitive (Phrase k l) (PhraseVI k l l1 d t) Source # 

Associated Types

type Rep (PhraseVI k l l1 d t) (a :: PhraseVI k l l1 d t) :: * Source #

Methods

prim :: sing a -> Rep (PhraseVI k l l1 d t) a Source #

pretty :: sing a -> String Source #

(IntLListRep (Tonic k ((-) l2 l1)) t1, IntLListRep (Dominant k l1) d, IntLListRep (Tonic k ((-) l l2)) t2) => Primitive (Phrase k l) (PhraseIVI k l l2 l1 t1 d t2) Source # 

Associated Types

type Rep (PhraseIVI k l l2 l1 t1 d t2) (a :: PhraseIVI k l l2 l1 t1 d t2) :: * Source #

Methods

prim :: sing a -> Rep (PhraseIVI k l l2 l1 t1 d t2) a Source #

pretty :: sing a -> String Source #

type Rep (Phrase k l) (PhraseI k l t) Source # 
type Rep (Phrase k l) (PhraseI k l t) = [[Int]]
type Rep (Phrase k l) (PhraseVI k l l1 d t) Source # 
type Rep (Phrase k l) (PhraseVI k l l1 d t) = [[Int]]
type Rep (Phrase k l) (PhraseIVI k l l2 l1 t1 d t2) Source # 
type Rep (Phrase k l) (PhraseIVI k l l2 l1 t1 d t2) = [[Int]]

data Cadence k l where Source #

A cadence in a specific key with a specific length.

Constructors

AuthCad :: DegreeC V MajQ k Inv1 (OctPred o) -> DegreeC I q k Inv0 o -> Cadence k 2

Authentic cadence with major fifth chord.

AuthCad7 :: DegreeC V DomQ k Inv2 (OctPred o) -> DegreeC I q k Inv0 o -> Cadence k 2

Authentic cadence with dominant seventh fifth chord.

AuthCadVii :: DegreeC VII DimQ k Inv1 (OctPred o) -> DegreeC I q k Inv0 o -> Cadence k 2

Authentic cadence with diminished seventh chord.

AuthCad64 :: DegreeC I q k Inv2 o -> DegreeC V DomQ k Inv3 (OctPred o) -> DegreeC I q k Inv1 o -> Cadence k 3

Authentic cadence with a cadential 6-4 chord

DeceptCad :: DegreeC V DomQ k Inv2 o -> DegreeC VI q k Inv1 o -> Cadence k 2

Deceptive cadence from a dominant fifth to a sixth.

FullCad :: Subdominant k l1 -> Cadence k (l - l1) -> Cadence k l

Full cadence from subdominant to dominant to tonic.

Instances

(IntLListRep (Subdominant k sdur) sd, IntLListRep (Cadence k ((-) l sdur)) c) => Primitive (Cadence k l) (FullCad k l sdur sd c) Source # 

Associated Types

type Rep (FullCad k l sdur sd c) (a :: FullCad k l sdur sd c) :: * Source #

Methods

prim :: sing a -> Rep (FullCad k l sdur sd c) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord V DomQ k Inv2 o d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord VI q k Inv1 o d2), IntListRep (ChordType 4) ch2) => Primitive (Cadence k 2) (DeceptCad k o q d1 d2) Source # 

Associated Types

type Rep (DeceptCad k o q d1 d2) (a :: DeceptCad k o q d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (DeceptCad k o q d1 d2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord VII DimQ k Inv1 (NatToOct ((-) (OctToNat o) 1)) d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord I q k Inv0 o d2), IntListRep (ChordType 4) ch2) => Primitive (Cadence k 2) (AuthCadVii k o q d1 d2) Source # 

Associated Types

type Rep (AuthCadVii k o q d1 d2) (a :: AuthCadVii k o q d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (AuthCadVii k o q d1 d2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord V DomQ k Inv2 (NatToOct ((-) (OctToNat o) 1)) d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord I q k Inv0 o d2), IntListRep (ChordType 4) ch2) => Primitive (Cadence k 2) (AuthCad7 k o q d1 d2) Source # 

Associated Types

type Rep (AuthCad7 k o q d1 d2) (a :: AuthCad7 k o q d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (AuthCad7 k o q d1 d2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord V MajQ k Inv1 (NatToOct ((-) (OctToNat o) 1)) d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord I q k Inv0 o d2), IntListRep (ChordType 4) ch2) => Primitive (Cadence k 2) (AuthCad k o q d1 d2) Source # 

Associated Types

type Rep (AuthCad k o q d1 d2) (a :: AuthCad k o q d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (AuthCad k o q d1 d2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord I q k Inv2 o d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord V DomQ k Inv3 (NatToOct ((-) (OctToNat o) 1)) d2), IntListRep (ChordType 4) ch2, (~) (ChordType 4) ch3 (DegToChord I q k Inv1 o d3), IntListRep (ChordType 4) ch3) => Primitive (Cadence k 3) (AuthCad64 k q o d1 d2 d3) Source # 

Associated Types

type Rep (AuthCad64 k q o d1 d2 d3) (a :: AuthCad64 k q o d1 d2 d3) :: * Source #

Methods

prim :: sing a -> Rep (AuthCad64 k q o d1 d2 d3) a Source #

pretty :: sing a -> String Source #

type Rep (Cadence k l) (FullCad k l sdur sd c) Source # 
type Rep (Cadence k l) (FullCad k l sdur sd c) = [[Int]]
type Rep (Cadence k 2) (DeceptCad k o q d1 d2) Source # 
type Rep (Cadence k 2) (DeceptCad k o q d1 d2) = [[Int]]
type Rep (Cadence k 2) (AuthCadVii k o q d1 d2) Source # 
type Rep (Cadence k 2) (AuthCadVii k o q d1 d2) = [[Int]]
type Rep (Cadence k 2) (AuthCad7 k o q d1 d2) Source # 
type Rep (Cadence k 2) (AuthCad7 k o q d1 d2) = [[Int]]
type Rep (Cadence k 2) (AuthCad k o q d1 d2) Source # 
type Rep (Cadence k 2) (AuthCad k o q d1 d2) = [[Int]]
type Rep (Cadence k 3) (AuthCad64 k q o d1 d2 d3) Source # 
type Rep (Cadence k 3) (AuthCad64 k q o d1 d2 d3) = [[Int]]

data Tonic k l where Source #

A tonic chord.

Constructors

TonT :: DegreeC I (KeyToQual k) k Inv0 o -> Tonic k 1

A major tonic chord.

TonTT :: Tonic k l1 -> Tonic k (l - l1) -> Tonic k l

Doubled tonics.

Instances

((~) (ChordType 4) ch (DegToChord I (KeyToQual k) k Inv0 o d), IntListRep (ChordType 4) ch) => Primitive (Tonic k 1) (TonT k o d) Source # 

Associated Types

type Rep (TonT k o d) (a :: TonT k o d) :: * Source #

Methods

prim :: sing a -> Rep (TonT k o d) a Source #

pretty :: sing a -> String Source #

(IntLListRep (Tonic k dur1) t1, IntLListRep (Tonic k ((-) l dur1)) t2) => Primitive (Tonic k l) (TonTT k l dur1 t1 t2) Source # 

Associated Types

type Rep (TonTT k l dur1 t1 t2) (a :: TonTT k l dur1 t1 t2) :: * Source #

Methods

prim :: sing a -> Rep (TonTT k l dur1 t1 t2) a Source #

pretty :: sing a -> String Source #

type Rep (Tonic k 1) (TonT k o d) Source # 
type Rep (Tonic k 1) (TonT k o d) = [[Int]]
type Rep (Tonic k l) (TonTT k l dur1 t1 t2) Source # 
type Rep (Tonic k l) (TonTT k l dur1 t1 t2) = [[Int]]

data Dominant k l where Source #

A dominant chord progression.

Constructors

DomVM :: DegreeC V MajQ k Inv2 o -> Dominant k 1

Major fifth dominant.

DomV7 :: DegreeC V DomQ k Inv2 o -> Dominant k 1

Seventh chord fifth degree dominant.

DomVii0 :: DegreeC VII DimQ k i o -> Dominant k 1

Diminished seventh degree dominant.

DomSecD :: DegreeC II DomQ k Inv0 o -> DegreeC V DomQ k Inv2 (OctPred o) -> Dominant k 2

Secondary dominant followed by dominant.

DomSD :: Subdominant k l1 -> Dominant k (l - l1) -> Dominant k l

Subdominant followed by dominant.

DomDD :: Dominant k l1 -> Dominant k (l - l1) -> Dominant k l

Doubled dominants.

Instances

((~) (ChordType 4) ch (DegToChord V DomQ k Inv2 o d), IntListRep (ChordType 4) ch) => Primitive (Dominant k 1) (DomV7 k o d) Source # 

Associated Types

type Rep (DomV7 k o d) (a :: DomV7 k o d) :: * Source #

Methods

prim :: sing a -> Rep (DomV7 k o d) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch (DegToChord V MajQ k Inv2 o d), IntListRep (ChordType 4) ch) => Primitive (Dominant k 1) (DomVM k o d) Source # 

Associated Types

type Rep (DomVM k o d) (a :: DomVM k o d) :: * Source #

Methods

prim :: sing a -> Rep (DomVM k o d) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord II DomQ k Inv0 o d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord V DomQ k Inv2 (NatToOct ((-) (OctToNat o) 1)) d2), IntListRep (ChordType 4) ch2) => Primitive (Dominant k 2) (DomSecD k o d1 d2) Source # 

Associated Types

type Rep (DomSecD k o d1 d2) (a :: DomSecD k o d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (DomSecD k o d1 d2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch (DegToChord VII DimQ k i o d), IntListRep (ChordType 4) ch) => Primitive (Dominant k 1) (DomVii0 k i o d) Source # 

Associated Types

type Rep (DomVii0 k i o d) (a :: DomVii0 k i o d) :: * Source #

Methods

prim :: sing a -> Rep (DomVii0 k i o d) a Source #

pretty :: sing a -> String Source #

(IntLListRep (Dominant k dur1) d1, IntLListRep (Dominant k ((-) l dur1)) d2) => Primitive (Dominant k l) (DomDD k l dur1 d1 d2) Source # 

Associated Types

type Rep (DomDD k l dur1 d1 d2) (a :: DomDD k l dur1 d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (DomDD k l dur1 d1 d2) a Source #

pretty :: sing a -> String Source #

(IntLListRep (Subdominant k sdur) sd, IntLListRep (Dominant k ((-) l sdur)) d) => Primitive (Dominant k l) (DomSD k l sdur sd d) Source # 

Associated Types

type Rep (DomSD k l sdur sd d) (a :: DomSD k l sdur sd d) :: * Source #

Methods

prim :: sing a -> Rep (DomSD k l sdur sd d) a Source #

pretty :: sing a -> String Source #

type Rep (Dominant k 1) (DomV7 k o d) Source # 
type Rep (Dominant k 1) (DomV7 k o d) = [[Int]]
type Rep (Dominant k 1) (DomVM k o d) Source # 
type Rep (Dominant k 1) (DomVM k o d) = [[Int]]
type Rep (Dominant k 2) (DomSecD k o d1 d2) Source # 
type Rep (Dominant k 2) (DomSecD k o d1 d2) = [[Int]]
type Rep (Dominant k 1) (DomVii0 k i o d) Source # 
type Rep (Dominant k 1) (DomVii0 k i o d) = [[Int]]
type Rep (Dominant k l) (DomDD k l dur1 d1 d2) Source # 
type Rep (Dominant k l) (DomDD k l dur1 d1 d2) = [[Int]]
type Rep (Dominant k l) (DomSD k l sdur sd d) Source # 
type Rep (Dominant k l) (DomSD k l sdur sd d) = [[Int]]

data Subdominant k l where Source #

A subdominant chord progression.

Constructors

SubIV :: DegreeC IV (KeyToQual k) k i o -> Subdominant k 1

Major fourth subdominant.

SubIIm :: DegreeC II MinQ k i o -> Subdominant k 1

Minor second subdominant.

SubIIImIVM :: DegreeC III MinQ k i1 o -> DegreeC IV MajQ k i2 (OctPred o) -> Subdominant k 2

Minor third followed by major fourth subdominant.

SubSS :: Subdominant k l1 -> Subdominant k (l - l1) -> Subdominant k l

Doubled subdominants.

Instances

((~) (ChordType 4) ch (DegToChord IV (KeyToQual k) k i o d), IntListRep (ChordType 4) ch) => Primitive (Subdominant k 1) (SubIV k i o d) Source # 

Associated Types

type Rep (SubIV k i o d) (a :: SubIV k i o d) :: * Source #

Methods

prim :: sing a -> Rep (SubIV k i o d) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch (DegToChord II MinQ k i o d), IntListRep (ChordType 4) ch) => Primitive (Subdominant k 1) (SubIIm k i o d) Source # 

Associated Types

type Rep (SubIIm k i o d) (a :: SubIIm k i o d) :: * Source #

Methods

prim :: sing a -> Rep (SubIIm k i o d) a Source #

pretty :: sing a -> String Source #

(IntLListRep (Subdominant k dur1) s1, IntLListRep (Subdominant k ((-) l dur1)) s2) => Primitive (Subdominant k l) (SubSS k l dur1 s1 s2) Source # 

Associated Types

type Rep (SubSS k l dur1 s1 s2) (a :: SubSS k l dur1 s1 s2) :: * Source #

Methods

prim :: sing a -> Rep (SubSS k l dur1 s1 s2) a Source #

pretty :: sing a -> String Source #

((~) (ChordType 4) ch1 (DegToChord III MinQ k i1 o d1), IntListRep (ChordType 4) ch1, (~) (ChordType 4) ch2 (DegToChord IV MajQ k i2 (NatToOct ((-) (OctToNat o) 1)) d2), IntListRep (ChordType 4) ch2) => Primitive (Subdominant k 2) (SubIIImIVM k i1 o i2 d1 d2) Source # 

Associated Types

type Rep (SubIIImIVM k i1 o i2 d1 d2) (a :: SubIIImIVM k i1 o i2 d1 d2) :: * Source #

Methods

prim :: sing a -> Rep (SubIIImIVM k i1 o i2 d1 d2) a Source #

pretty :: sing a -> String Source #

type Rep (Subdominant k 1) (SubIV k i o d) Source # 
type Rep (Subdominant k 1) (SubIV k i o d) = [[Int]]
type Rep (Subdominant k 1) (SubIIm k i o d) Source # 
type Rep (Subdominant k 1) (SubIIm k i o d) = [[Int]]
type Rep (Subdominant k l) (SubSS k l dur1 s1 s2) Source # 
type Rep (Subdominant k l) (SubSS k l dur1 s1 s2) = [[Int]]
type Rep (Subdominant k 2) (SubIIImIVM k i1 o i2 d1 d2) Source # 
type Rep (Subdominant k 2) (SubIIImIVM k i1 o i2 d1 d2) = [[Int]]

type family ChordsToPartiture (v :: Vector (ChordType n) l) (t :: TimeSignature) :: Partiture n ((l * t) * 8) where ... Source #

Convert a vector of chords ("chord progression") into a Partiture.

type family ProgTypeToChords (l :: Nat) (p :: ProgType k l) :: Vector (ChordType 4) l where ... Source #

Convert a piece to chords.

Equations

ProgTypeToChords l (CadPhrase (c :: Cadence k l)) = CadToChords l c 
ProgTypeToChords l ((p :: Phrase k l1) := ps) = PhraseToChords l1 p ++. ProgTypeToChords (l - l1) ps 

type family FromProg (p :: ProgType k l) (t :: TimeSignature) :: Partiture 4 ((l * t) * 8) where ... Source #

Convert a progression with a time signature into a Partiture.

Equations

FromProg (p :: ProgType k l) t = ChordsToPartiture (ProgTypeToChords l p) t 

Singletons

data Prog p Source #

The singleton type for Tonic.

Constructors

Prog 

data Ton t Source #

The singleton type for Tonic.

Constructors

Ton 

data Dom d Source #

The singleton type for Tonic.

Constructors

Dom 

data Sub s Source #

The singleton type for Tonic.

Constructors

Sub 

data Cad c Source #

The singleton type for Tonic.

Constructors

Cad 

data Phr p Source #

The singleton type for Tonic.

Constructors

Phr