module Mezzo.Compose.Basic where
import GHC.TypeLits
import Data.Kind
import Control.Monad
import Mezzo.Model
import Mezzo.Compose.Types
import Mezzo.Compose.Builder
import Mezzo.Compose.Templates
pitchClassLits
accidentalLits
octaveLits
mk32ndLits
join <$> traverse mkDurLits [''Whole, ''Half, ''Quarter, ''Eighth, ''Sixteenth]
pitch :: Primitive (Pitch pc acc oct) => PC pc -> Acc acc -> Oct oct -> Pit (Pitch pc acc oct)
pitch pc acc oct = Pit
silence :: Pit Silence
silence = Pit
mkPitchLits
mkPitchSpecs
r :: RestS
r dur = dur Pit
sharp :: RootM r (Sharpen r)
sharp = constConv Root
flat :: RootM r (Flatten r)
flat = constConv Root
rootP :: IntRep p => Pit p -> Root (PitchRoot p)
rootP p = Root
rootS :: Primitive (DegreeRoot k d) => KeyS k -> Deg d -> Root (DegreeRoot k d)
rootS k d = Root
noteP :: (Primitive d, IntRep p, ValidNote s (PitchRoot p) d) => Pit p -> Dur d -> Music s (FromRoot (PitchRoot p) d)
noteP p = Note (rootP p)
noteS :: (Primitive d, IntRep (DegreeRoot k sd), ValidNote (Sig :: Signature t k r) (DegreeRoot k sd) d)
=> KeyS k -> Deg sd -> Dur d -> Music (Sig :: Signature t k r) (FromRoot (DegreeRoot k sd) d)
noteS k sd = Note (rootS k sd)
rest :: (Primitive d, ValidRest s d) => Dur d -> Music s (FromSilence d)
rest = Rest