module Mezzo.Model.Harmony.Motion
(
PerfConsonantInterval
, ImperfConsonantInterval
, DissonantInterval
, DirectMotion
, ContraryMotion
, ObliqueMotion
) where
import GHC.TypeLits
import Mezzo.Model.Types
import Mezzo.Model.Prim
import Mezzo.Model.Errors
class PerfConsonantInterval (i :: IntervalType)
instance PerfConsonantInterval (Interval Perf Unison)
instance PerfConsonantInterval (Interval Perf Fifth)
instance PerfConsonantInterval (Interval Perf Octave)
class ImperfConsonantInterval (i :: IntervalType)
instance ImperfConsonantInterval (Interval Maj Third)
instance ImperfConsonantInterval (Interval Min Third)
instance ImperfConsonantInterval (Interval Maj Sixth)
instance ImperfConsonantInterval (Interval Min Sixth)
class DissonantInterval (i :: IntervalType)
instance DissonantInterval (Interval Perf Fourth)
instance DissonantInterval (Interval Aug is)
instance DissonantInterval (Interval Dim is)
instance DissonantInterval (Interval ic Second)
instance DissonantInterval (Interval ic Seventh)
class DirectMotion (e :: DyadPair) (i1 :: IntervalType) (i2 :: IntervalType)
instance MotionError "Parallel unisons are forbidden: " e
=> DirectMotion e (Interval Perf Unison) (Interval Perf Unison)
instance MotionError "Direct motion into a perfect unison is forbidden: " e
=> DirectMotion e i1 (Interval Perf Unison)
instance MotionError "Parallel fifths are forbidden: " e
=> DirectMotion e (Interval Perf Fifth) (Interval Perf Fifth)
instance MotionError "Direct motion into a perfect fifth is forbidden: " e
=> DirectMotion e i1 (Interval Perf Fifth)
instance MotionError "Parallel octaves are forbidden: " e
=> DirectMotion e (Interval Perf Octave) (Interval Perf Octave)
instance MotionError "Direct motion into a perfect octave is forbidden: " e
=> DirectMotion e i1 (Interval Perf Octave)
instance DirectMotion e i1 i2
class ContraryMotion (i1 :: IntervalType) (i2 :: IntervalType)
instance ContraryMotion i1 i2
class ObliqueMotion (i1 :: IntervalType) (i2 :: IntervalType)
instance ObliqueMotion i1 i2