module Music.Score.Instances (
) where
import Control.Monad
import Data.Semigroup
import Data.Ratio
import Data.Maybe
import Data.Foldable
import Data.Typeable
import qualified Data.List as List
import Data.VectorSpace
import Data.AffineSpace
import Music.Time
import Music.Pitch.Literal
import Music.Dynamics.Literal
import Music.Score.Rhythm
import Music.Score.Track
import Music.Score.Voice
import Music.Score.Score
import Music.Score.Combinators
import Music.Score.Zip
import Music.Score.Pitch
import Music.Score.Ties
import Music.Score.Part
import Music.Score.Chord
import Music.Score.Articulation
import Music.Score.Dynamics
import Music.Score.Ornaments
instance (IsPitch a, Enum n) => IsPitch (PartT n a) where
fromPitch l = PartT (toEnum 0, fromPitch l)
instance (IsDynamics a, Enum n) => IsDynamics (PartT n a) where
fromDynamics l = PartT (toEnum 0, fromDynamics l)
instance IsPitch a => IsPitch (TieT a) where
fromPitch l = TieT (False, fromPitch l, False)
instance IsDynamics a => IsDynamics (TieT a) where
fromDynamics l = TieT (False, fromDynamics l, False)
instance IsPitch a => IsPitch (DynamicT a) where
fromPitch l = DynamicT (False,False,Nothing,fromPitch l,False,False)
instance IsDynamics a => IsDynamics (DynamicT a) where
fromDynamics l = DynamicT (False,False,Nothing,fromDynamics l,False,False)
instance IsPitch a => IsPitch (ArticulationT a) where
fromPitch l = ArticulationT (False,False,0,0,fromPitch l,False)
instance IsDynamics a => IsDynamics (ArticulationT a) where
fromDynamics l = ArticulationT (False,False,0,0,fromDynamics l,False)
instance IsPitch a => IsPitch (TremoloT a) where
fromPitch l = TremoloT (0, fromPitch l)
instance IsDynamics a => IsDynamics (TremoloT a) where
fromDynamics l = TremoloT (0, fromDynamics l)
instance IsPitch a => IsPitch (TextT a) where
fromPitch l = TextT (mempty, fromPitch l)
instance IsDynamics a => IsDynamics (TextT a) where
fromDynamics l = TextT (mempty, fromDynamics l)
instance IsPitch a => IsPitch (HarmonicT a) where
fromPitch l = HarmonicT (0, fromPitch l)
instance IsDynamics a => IsDynamics (HarmonicT a) where
fromDynamics l = HarmonicT (0, fromDynamics l)
instance IsPitch a => IsPitch (SlideT a) where
fromPitch l = SlideT (False,False,fromPitch l,False,False)
instance IsDynamics a => IsDynamics (SlideT a) where
fromDynamics l = SlideT (False,False,fromDynamics l,False,False)
instance HasArticulation a => HasArticulation (Maybe a) where
setEndSlur n (Just x) = Just (setEndSlur n x)
setEndSlur n Nothing = Nothing
setContSlur n (Just x) = Just (setContSlur n x)
setContSlur n Nothing = Nothing
setBeginSlur n (Just x) = Just (setBeginSlur n x)
setBeginSlur n Nothing = Nothing
setAccLevel n (Just x) = Just (setAccLevel n x)
setAccLevel n Nothing = Nothing
setStaccLevel n (Just x) = Just (setStaccLevel n x)
setStaccLevel n Nothing = Nothing
instance HasPart a => HasPart (Maybe a) where
type Part (Maybe a) = Maybe (Part a)
getPart Nothing = Nothing
getPart (Just a) = Just (getPart a)
modifyPart f (Nothing) = Nothing
modifyPart f (Just a) = Just (modifyPart (fromJust . f . Just) a)
instance HasPitch a => HasPitch (Maybe a) where
type Pitch (Maybe a) = Maybe (Pitch a)
getPitch Nothing = Nothing
getPitch (Just a) = Just (getPitch a)
modifyPitch f (Nothing) = Nothing
modifyPitch f (Just a) = Just (modifyPitch (fromJust . f . Just) a)
instance HasPart (PartT n a) where
type Part (PartT n a) = n
getPart (PartT (v,_)) = v
modifyPart f (PartT (v,x)) = PartT (f v, x)
instance HasChord a => HasChord (PartT n a) where
type ChordNote (PartT n a) = PartT n (ChordNote a)
getChord (PartT (v,x)) = fmap (\x -> PartT (v,x)) (getChord x)
instance HasPitch a => HasPitch (PartT n a) where
type Pitch (PartT n a) = Pitch a
getPitch (PartT (v,a)) = getPitch a
modifyPitch f (PartT (v,x)) = PartT (v, modifyPitch f x)
instance Tiable a => Tiable (PartT n a) where
beginTie = fmap beginTie
endTie = fmap endTie
toTied (PartT (v,a)) = (PartT (v,b), PartT (v,c)) where (b,c) = toTied a
instance HasDynamic a => HasDynamic (PartT n a) where
setBeginCresc n (PartT (v,x)) = PartT (v, setBeginCresc n x)
setEndCresc n (PartT (v,x)) = PartT (v, setEndCresc n x)
setBeginDim n (PartT (v,x)) = PartT (v, setBeginDim n x)
setEndDim n (PartT (v,x)) = PartT (v, setEndDim n x)
setLevel n (PartT (v,x)) = PartT (v, setLevel n x)
instance HasArticulation a => HasArticulation (PartT n a) where
setEndSlur n (PartT (v,x)) = PartT (v, setEndSlur n x)
setContSlur n (PartT (v,x)) = PartT (v, setContSlur n x)
setBeginSlur n (PartT (v,x)) = PartT (v, setBeginSlur n x)
setAccLevel n (PartT (v,x)) = PartT (v, setAccLevel n x)
setStaccLevel n (PartT (v,x)) = PartT (v, setStaccLevel n x)
instance HasTremolo a => HasTremolo (PartT n a) where
setTrem n (PartT (v,x)) = PartT (v, setTrem n x)
instance HasHarmonic a => HasHarmonic (PartT n a) where
setHarmonic n (PartT (v,x)) = PartT (v, setHarmonic n x)
instance HasSlide a => HasSlide (PartT n a) where
setBeginGliss n (PartT (v,x)) = PartT (v, setBeginGliss n x)
setBeginSlide n (PartT (v,x)) = PartT (v, setBeginSlide n x)
setEndGliss n (PartT (v,x)) = PartT (v, setEndGliss n x)
setEndSlide n (PartT (v,x)) = PartT (v, setEndSlide n x)
instance HasText a => HasText (PartT n a) where
addText s (PartT (v,x)) = PartT (v, addText s x)
instance Tiable a => Tiable (ChordT a) where
beginTie = fmap beginTie
endTie = fmap endTie
toTied (ChordT as) = (ChordT bs, ChordT cs) where (bs,cs) = (unzip . fmap toTied) as
instance HasChord (ChordT a) where
type ChordNote (ChordT a) = a
getChord (ChordT as) = as
instance HasPitch a => HasPitch (ChordT a) where
type Pitch (ChordT a) = Pitch a
getPitch (ChordT as) = getPitch as
modifyPitch f (ChordT as) = ChordT (modifyPitch f as)
instance HasDynamic a => HasDynamic (ChordT a) where
setBeginCresc n (ChordT as) = ChordT (fmap (setBeginCresc n) as)
setEndCresc n (ChordT as) = ChordT (fmap (setEndCresc n) as)
setBeginDim n (ChordT as) = ChordT (fmap (setBeginDim n) as)
setEndDim n (ChordT as) = ChordT (fmap (setEndDim n) as)
setLevel n (ChordT as) = ChordT (fmap (setLevel n) as)
instance HasArticulation a => HasArticulation (ChordT a) where
setEndSlur n (ChordT as) = ChordT (fmap (setEndSlur n) as)
setContSlur n (ChordT as) = ChordT (fmap (setContSlur n) as)
setBeginSlur n (ChordT as) = ChordT (fmap (setBeginSlur n) as)
setAccLevel n (ChordT as) = ChordT (fmap (setAccLevel n) as)
setStaccLevel n (ChordT as) = ChordT (fmap (setStaccLevel n) as)
instance HasTremolo a => HasTremolo (ChordT a) where
setTrem n (ChordT as) = ChordT (fmap (setTrem n) as)
instance HasHarmonic a => HasHarmonic (ChordT a) where
setHarmonic n (ChordT as) = ChordT (fmap (setHarmonic n) as)
instance HasSlide a => HasSlide (ChordT a) where
setBeginGliss n (ChordT as) = ChordT (fmap (setBeginGliss n) as)
setBeginSlide n (ChordT as) = ChordT (fmap (setBeginSlide n) as)
setEndGliss n (ChordT as) = ChordT (fmap (setEndGliss n) as)
setEndSlide n (ChordT as) = ChordT (fmap (setEndSlide n) as)
instance HasText a => HasText (ChordT a) where
addText s (ChordT as) = ChordT (mapFirstL (addText s) as)
instance HasPart a => HasPart (TieT a) where
type Part (TieT a) = Part a
getPart (TieT (_,x,_)) = getPart x
modifyPart f (TieT (b,x,e)) = TieT (b,modifyPart f x,e)
instance HasChord a => HasChord (TieT a) where
type ChordNote (TieT a ) = TieT (ChordNote a)
getChord (TieT (b,x,e)) = fmap (\x -> TieT (b,x,e)) (getChord x)
instance HasPitch a => HasPitch (TieT a) where
type Pitch (TieT a) = Pitch a
getPitch (TieT (_,x,_)) = getPitch x
modifyPitch f (TieT (b,x,e)) = TieT (b,modifyPitch f x,e)
instance HasDynamic a => HasDynamic (TieT a) where
setBeginCresc n (TieT (b,x,e)) = TieT (b,setBeginCresc n x,e)
setEndCresc n (TieT (b,x,e)) = TieT (b,setEndCresc n x,e)
setBeginDim n (TieT (b,x,e)) = TieT (b,setBeginDim n x,e)
setEndDim n (TieT (b,x,e)) = TieT (b,setEndDim n x,e)
setLevel n (TieT (b,x,e)) = TieT (b,setLevel n x,e)
instance HasArticulation a => HasArticulation (TieT a) where
setEndSlur n (TieT (b,x,e)) = TieT (b,setEndSlur n x,e)
setContSlur n (TieT (b,x,e)) = TieT (b,setContSlur n x,e)
setBeginSlur n (TieT (b,x,e)) = TieT (b,setBeginSlur n x,e)
setAccLevel n (TieT (b,x,e)) = TieT (b,setAccLevel n x,e)
setStaccLevel n (TieT (b,x,e)) = TieT (b,setStaccLevel n x,e)
instance HasTremolo a => HasTremolo (TieT a) where
setTrem n (TieT (b,x,e)) = TieT (b,setTrem n x,e)
instance HasHarmonic a => HasHarmonic (TieT a) where
setHarmonic n (TieT (b,x,e)) = TieT (b,setHarmonic n x,e)
instance HasSlide a => HasSlide (TieT a) where
setBeginGliss n (TieT (b,x,e)) = TieT (b,setBeginGliss n x,e)
setBeginSlide n (TieT (b,x,e)) = TieT (b,setBeginSlide n x,e)
setEndGliss n (TieT (b,x,e)) = TieT (b,setEndGliss n x,e)
setEndSlide n (TieT (b,x,e)) = TieT (b,setEndSlide n x,e)
instance HasText a => HasText (TieT a) where
addText s (TieT (b,x,e)) = TieT (b, addText s x, e)
instance Tiable a => Tiable (DynamicT a) where
beginTie = fmap beginTie
endTie = fmap endTie
toTied (DynamicT (ec,ed,l,a,bc,bd)) = (DynamicT (ec,ed,l,b,bc,bd),
DynamicT (False,False,Nothing,c,False,False)) where (b,c) = toTied a
instance HasPart a => HasPart (DynamicT a) where
type Part (DynamicT a) = Part a
getPart (DynamicT (ec,ed,l,a,bc,bd)) = getPart a
modifyPart f (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,modifyPart f a,bc,bd)
instance HasChord a => HasChord (DynamicT a) where
type ChordNote (DynamicT a) = DynamicT (ChordNote a)
getChord (DynamicT (ec,ed,l,a,bc,bd)) = fmap (\x -> DynamicT (ec,ed,l,x,bc,bd)) (getChord a)
instance HasPitch a => HasPitch (DynamicT a) where
type Pitch (DynamicT a) = Pitch a
getPitch (DynamicT (ec,ed,l,a,bc,bd)) = getPitch a
modifyPitch f (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,modifyPitch f a,bc,bd)
instance HasDynamic (DynamicT a) where
setBeginCresc bc (DynamicT (ec,ed,l,a,_ ,bd)) = DynamicT (ec,ed,l,a,bc,bd)
setEndCresc ec (DynamicT (_ ,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,a,bc,bd)
setBeginDim bd (DynamicT (ec,ed,l,a,bc,_ )) = DynamicT (ec,ed,l,a,bc,bd)
setEndDim ed (DynamicT (ec,_ ,l,a,bc,bd)) = DynamicT (ec,ed,l,a,bc,bd)
setLevel l (DynamicT (ec,ed,_,a,bc,bd)) = DynamicT (ec,ed,Just l,a,bc,bd)
instance HasArticulation a => HasArticulation (DynamicT a) where
setEndSlur n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setEndSlur n a,bc,bd)
setContSlur n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setContSlur n a,bc,bd)
setBeginSlur n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setBeginSlur n a,bc,bd)
setAccLevel n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setAccLevel n a,bc,bd)
setStaccLevel n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setStaccLevel n a,bc,bd)
instance HasTremolo a => HasTremolo (DynamicT a) where
setTrem n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setTrem n a,bc,bd)
instance HasHarmonic a => HasHarmonic (DynamicT a) where
setHarmonic n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setHarmonic n a,bc,bd)
instance HasSlide a => HasSlide (DynamicT a) where
setBeginGliss n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setBeginGliss n a,bc,bd)
setBeginSlide n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setBeginSlide n a,bc,bd)
setEndGliss n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setEndGliss n a,bc,bd)
setEndSlide n (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,setEndSlide n a,bc,bd)
instance HasText a => HasText (DynamicT a) where
addText s (DynamicT (ec,ed,l,a,bc,bd)) = DynamicT (ec,ed,l,addText s a,bc,bd)
instance Tiable a => Tiable (ArticulationT a) where
beginTie = fmap beginTie
endTie = fmap endTie
toTied (ArticulationT (es,us,al,sl,a,bs)) = (ArticulationT (False,us,al,sl,b,bs),
ArticulationT (es, us,0,0,c,False)) where (b,c) = toTied a
instance HasPart a => HasPart (ArticulationT a) where
type Part (ArticulationT a) = Part a
getPart (ArticulationT (es,us,al,sl,a,bs)) = getPart a
modifyPart f (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,modifyPart f a,bs)
instance HasChord a => HasChord (ArticulationT a) where
type ChordNote (ArticulationT a) = ArticulationT (ChordNote a)
getChord (ArticulationT (es,us,al,sl,a,bs)) = fmap (\x -> ArticulationT (es,us,al,sl,x,bs)) (getChord a)
instance HasPitch a => HasPitch (ArticulationT a) where
type Pitch (ArticulationT a) = Pitch a
getPitch (ArticulationT (es,us,al,sl,a,bs)) = getPitch a
modifyPitch f (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,modifyPitch f a,bs)
instance HasDynamic a => HasDynamic (ArticulationT a) where
setBeginCresc n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setBeginCresc n a,bs)
setEndCresc n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setEndCresc n a,bs)
setBeginDim n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setBeginDim n a,bs)
setEndDim n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setEndDim n a,bs)
setLevel n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setLevel n a,bs)
instance HasArticulation (ArticulationT a) where
setEndSlur es (ArticulationT (_ ,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,a,bs)
setContSlur us (ArticulationT (es,_ ,al,sl,a,bs)) = ArticulationT (es,us,al,sl,a,bs)
setBeginSlur bs (ArticulationT (es,us,al,sl,a,_ )) = ArticulationT (es,us,al,sl,a,bs)
setAccLevel al (ArticulationT (es,us,_ ,sl,a,bs)) = ArticulationT (es,us,al,sl,a,bs)
setStaccLevel sl (ArticulationT (es,us,al,_ ,a,bs)) = ArticulationT (es,us,al,sl,a,bs)
instance HasTremolo a => HasTremolo (ArticulationT a) where
setTrem n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setTrem n a,bs)
instance HasHarmonic a => HasHarmonic (ArticulationT a) where
setHarmonic n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setHarmonic n a,bs)
instance HasSlide a => HasSlide (ArticulationT a) where
setBeginGliss n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setBeginGliss n a,bs)
setBeginSlide n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setBeginSlide n a,bs)
setEndGliss n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setEndGliss n a,bs)
setEndSlide n (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,setEndSlide n a,bs)
instance HasText a => HasText (ArticulationT a) where
addText s (ArticulationT (es,us,al,sl,a,bs)) = ArticulationT (es,us,al,sl,addText s a,bs)
instance Tiable a => Tiable (TremoloT a) where
beginTie = fmap beginTie
endTie = fmap endTie
toTied (TremoloT (n,a)) = (TremoloT (n,b), TremoloT (n,c)) where (b,c) = toTied a
instance HasPart a => HasPart (TremoloT a) where
type Part (TremoloT a) = Part a
getPart (TremoloT (_,a)) = getPart a
modifyPart f (TremoloT (n,x)) = TremoloT (n, modifyPart f x)
instance HasChord a => HasChord (TremoloT a) where
type ChordNote (TremoloT a) = TremoloT (ChordNote a)
getChord (TremoloT (n,x)) = fmap (\x -> TremoloT (n,x)) (getChord x)
instance HasPitch a => HasPitch (TremoloT a) where
type Pitch (TremoloT a) = Pitch a
getPitch (TremoloT (_,a)) = getPitch a
modifyPitch f (TremoloT (n,x)) = TremoloT (n, modifyPitch f x)
instance HasDynamic a => HasDynamic (TremoloT a) where
setBeginCresc n (TremoloT (v,x)) = TremoloT (v, setBeginCresc n x)
setEndCresc n (TremoloT (v,x)) = TremoloT (v, setEndCresc n x)
setBeginDim n (TremoloT (v,x)) = TremoloT (v, setBeginDim n x)
setEndDim n (TremoloT (v,x)) = TremoloT (v, setEndDim n x)
setLevel n (TremoloT (v,x)) = TremoloT (v, setLevel n x)
instance HasArticulation a => HasArticulation (TremoloT a) where
setEndSlur n (TremoloT (v,x)) = TremoloT (v, setEndSlur n x)
setContSlur n (TremoloT (v,x)) = TremoloT (v, setContSlur n x)
setBeginSlur n (TremoloT (v,x)) = TremoloT (v, setBeginSlur n x)
setAccLevel n (TremoloT (v,x)) = TremoloT (v, setAccLevel n x)
setStaccLevel n (TremoloT (v,x)) = TremoloT (v, setStaccLevel n x)
instance HasTremolo (TremoloT a) where
setTrem n (TremoloT (_,x)) = TremoloT (n,x)
instance HasHarmonic a => HasHarmonic (TremoloT a) where
setHarmonic n (TremoloT (v,x)) = TremoloT (v, setHarmonic n x)
instance HasSlide a => HasSlide (TremoloT a) where
setBeginGliss n (TremoloT (v,x)) = TremoloT (v, setBeginGliss n x)
setBeginSlide n (TremoloT (v,x)) = TremoloT (v, setBeginSlide n x)
setEndGliss n (TremoloT (v,x)) = TremoloT (v, setEndGliss n x)
setEndSlide n (TremoloT (v,x)) = TremoloT (v, setEndSlide n x)
instance HasText a => HasText (TremoloT a) where
addText s (TremoloT (n,x)) = TremoloT (n,addText s x)
instance Tiable a => Tiable (TextT a) where
beginTie = fmap beginTie
endTie = fmap endTie
toTied (TextT (n,a)) = (TextT (n,b), TextT (mempty,c)) where (b,c) = toTied a
instance HasPart a => HasPart (TextT a) where
type Part (TextT a) = Part a
getPart (TextT (_,a)) = getPart a
modifyPart f (TextT (n,x)) = TextT (n, modifyPart f x)
instance HasChord a => HasChord (TextT a) where
type ChordNote (TextT a) = TextT (ChordNote a)
getChord (TextT (n,x)) = fmap (\x -> TextT (n,x)) (getChord x)
instance HasPitch a => HasPitch (TextT a) where
type Pitch (TextT a) = Pitch a
getPitch (TextT (_,a)) = getPitch a
modifyPitch f (TextT (n,x)) = TextT (n, modifyPitch f x)
instance HasDynamic a => HasDynamic (TextT a) where
setBeginCresc n (TextT (v,x)) = TextT (v, setBeginCresc n x)
setEndCresc n (TextT (v,x)) = TextT (v, setEndCresc n x)
setBeginDim n (TextT (v,x)) = TextT (v, setBeginDim n x)
setEndDim n (TextT (v,x)) = TextT (v, setEndDim n x)
setLevel n (TextT (v,x)) = TextT (v, setLevel n x)
instance HasArticulation a => HasArticulation (TextT a) where
setEndSlur n (TextT (v,x)) = TextT (v, setEndSlur n x)
setContSlur n (TextT (v,x)) = TextT (v, setContSlur n x)
setBeginSlur n (TextT (v,x)) = TextT (v, setBeginSlur n x)
setAccLevel n (TextT (v,x)) = TextT (v, setAccLevel n x)
setStaccLevel n (TextT (v,x)) = TextT (v, setStaccLevel n x)
instance HasTremolo a => HasTremolo (TextT a) where
setTrem n (TextT (s,x)) = TextT (s,setTrem n x)
instance HasHarmonic a => HasHarmonic (TextT a) where
setHarmonic n (TextT (v,x)) = TextT (v, setHarmonic n x)
instance HasSlide a => HasSlide (TextT a) where
setBeginGliss n (TextT (v,x)) = TextT (v, setBeginGliss n x)
setBeginSlide n (TextT (v,x)) = TextT (v, setBeginSlide n x)
setEndGliss n (TextT (v,x)) = TextT (v, setEndGliss n x)
setEndSlide n (TextT (v,x)) = TextT (v, setEndSlide n x)
instance HasText (TextT a) where
addText s (TextT (t,x)) = TextT (t ++ [s],x)
instance Tiable a => Tiable (HarmonicT a) where
beginTie = fmap beginTie
endTie = fmap endTie
toTied (HarmonicT (n,a)) = (HarmonicT (n,b), HarmonicT (n,c)) where (b,c) = toTied a
instance HasPart a => HasPart (HarmonicT a) where
type Part (HarmonicT a) = Part a
getPart (HarmonicT (_,a)) = getPart a
modifyPart f (HarmonicT (n,x)) = HarmonicT (n, modifyPart f x)
instance HasChord a => HasChord (HarmonicT a) where
type ChordNote (HarmonicT a) = HarmonicT (ChordNote a)
getChord (HarmonicT (n,x)) = fmap (\x -> HarmonicT (n,x)) (getChord x)
instance HasPitch a => HasPitch (HarmonicT a) where
type Pitch (HarmonicT a) = Pitch a
getPitch (HarmonicT (_,a)) = getPitch a
modifyPitch f (HarmonicT (n,x)) = HarmonicT (n, modifyPitch f x)
instance HasDynamic a => HasDynamic (HarmonicT a) where
setBeginCresc n (HarmonicT (v,x)) = HarmonicT (v, setBeginCresc n x)
setEndCresc n (HarmonicT (v,x)) = HarmonicT (v, setEndCresc n x)
setBeginDim n (HarmonicT (v,x)) = HarmonicT (v, setBeginDim n x)
setEndDim n (HarmonicT (v,x)) = HarmonicT (v, setEndDim n x)
setLevel n (HarmonicT (v,x)) = HarmonicT (v, setLevel n x)
instance HasArticulation a => HasArticulation (HarmonicT a) where
setEndSlur n (HarmonicT (v,x)) = HarmonicT (v, setEndSlur n x)
setContSlur n (HarmonicT (v,x)) = HarmonicT (v, setContSlur n x)
setBeginSlur n (HarmonicT (v,x)) = HarmonicT (v, setBeginSlur n x)
setAccLevel n (HarmonicT (v,x)) = HarmonicT (v, setAccLevel n x)
setStaccLevel n (HarmonicT (v,x)) = HarmonicT (v, setStaccLevel n x)
instance HasTremolo a => HasTremolo (HarmonicT a) where
setTrem n (HarmonicT (s,x)) = HarmonicT (s,setTrem n x)
instance HasHarmonic (HarmonicT a) where
setHarmonic n (HarmonicT (_,x)) = HarmonicT (n,x)
instance HasSlide a => HasSlide (HarmonicT a) where
setBeginGliss n (HarmonicT (s,x)) = HarmonicT (s,setBeginGliss n x)
setBeginSlide n (HarmonicT (s,x)) = HarmonicT (s,setBeginSlide n x)
setEndGliss n (HarmonicT (s,x)) = HarmonicT (s,setEndGliss n x)
setEndSlide n (HarmonicT (s,x)) = HarmonicT (s,setEndSlide n x)
instance HasText a => HasText (HarmonicT a) where
addText s (HarmonicT (n,x)) = HarmonicT (n,addText s x)
instance Tiable a => Tiable (SlideT a) where
beginTie = fmap beginTie
endTie = fmap endTie
toTied (SlideT (eg,es,a,bg,bs)) = (SlideT (eg, es, b,False,False),
SlideT (False,False,c,bg, bs)) where (b,c) = toTied a
instance HasPart a => HasPart (SlideT a) where
type Part (SlideT a) = Part a
getPart (SlideT (eg,es,a,bg,bs)) = getPart a
modifyPart f (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,modifyPart f a,bg,bs)
instance HasChord a => HasChord (SlideT a) where
type ChordNote (SlideT a) = SlideT (ChordNote a)
getChord (SlideT (eg,es,a,bg,bs)) = fmap (\x -> SlideT (eg,es,x,bg,bs)) (getChord a)
instance HasPitch a => HasPitch (SlideT a) where
type Pitch (SlideT a) = Pitch a
getPitch (SlideT (eg,es,a,bg,bs)) = getPitch a
modifyPitch f (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,modifyPitch f a,bg,bs)
instance HasDynamic a => HasDynamic (SlideT a) where
setBeginCresc n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setBeginCresc n a,bg,bs)
setEndCresc n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setEndCresc n a,bg,bs)
setBeginDim n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setBeginDim n a,bg,bs)
setEndDim n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setEndDim n a,bg,bs)
setLevel n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setLevel n a,bg,bs)
instance HasArticulation a => HasArticulation (SlideT a) where
setEndSlur n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setEndSlur n a,bg,bs)
setContSlur n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setContSlur n a,bg,bs)
setBeginSlur n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setBeginSlur n a,bg,bs)
setAccLevel n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setAccLevel n a,bg,bs)
setStaccLevel n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setStaccLevel n a,bg,bs)
instance HasTremolo a => HasTremolo (SlideT a) where
setTrem n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setTrem n a,bg,bs)
instance HasHarmonic a => HasHarmonic (SlideT a) where
setHarmonic n (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,setHarmonic n a,bg,bs)
instance HasSlide (SlideT a) where
setBeginGliss bg (SlideT (eg,es,a,_,bs)) = SlideT (eg,es,a,bg,bs)
setBeginSlide bs (SlideT (eg,es,a,bg,_)) = SlideT (eg,es,a,bg,bs)
setEndGliss eg (SlideT (_,es,a,bg,bs)) = SlideT (eg,es,a,bg,bs)
setEndSlide es (SlideT (eg,_,a,bg,bs)) = SlideT (eg,es,a,bg,bs)
instance HasText a => HasText (SlideT a) where
addText s (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,addText s a,bg,bs)
instance (Enum v, Eq v, Num a) => Num (PartT v a) where
PartT (v,a) + PartT (_,b) = PartT (v,a+b)
PartT (v,a) * PartT (_,b) = PartT (v,a*b)
PartT (v,a) PartT (_,b) = PartT (v,ab)
abs (PartT (v,a)) = PartT (v,abs a)
signum (PartT (v,a)) = PartT (v,signum a)
fromInteger a = PartT (toEnum 0,fromInteger a)
instance (Enum v, Enum a) => Enum (PartT v a) where
toEnum a = PartT (toEnum 0, toEnum a)
fromEnum (PartT (v,a)) = fromEnum a
instance (Enum v, Bounded a) => Bounded (PartT v a) where
minBound = PartT (toEnum 0, minBound)
maxBound = PartT (toEnum 0, maxBound)
instance (Enum v, Ord v, Num a, Ord a, Real a) => Real (PartT v a) where
toRational (PartT (v,a)) = toRational a
instance (Enum v, Ord v, Real a, Enum a, Integral a) => Integral (PartT v a) where
PartT (v,a) `quotRem` PartT (_,b) = (PartT (v,q), PartT (v,r)) where (q,r) = a `quotRem` b
toInteger (PartT (v,a)) = toInteger a
instance Num a => Num (TieT a) where
TieT (et,a,bt) + TieT (_,b,_) = TieT (et,a+b,bt)
TieT (et,a,bt) * TieT (_,b,_) = TieT (et,a*b,bt)
TieT (et,a,bt) TieT (_,b,_) = TieT (et,ab,bt)
abs (TieT (et,a,bt)) = TieT (et,abs a,bt)
signum (TieT (et,a,bt)) = TieT (et,signum a,bt)
fromInteger a = TieT (False,fromInteger a,False)
instance Enum a => Enum (TieT a) where
toEnum a = TieT (False,toEnum a,False)
fromEnum (TieT (_,a,_)) = fromEnum a
instance Bounded a => Bounded (TieT a) where
minBound = TieT (False,minBound,False)
maxBound = TieT (False,maxBound,False)
instance (Num a, Ord a, Real a) => Real (TieT a) where
toRational (TieT (_,a,_)) = toRational a
instance (Real a, Enum a, Integral a) => Integral (TieT a) where
TieT (et,a,bt) `quotRem` TieT (_,b,_) = (TieT (et,q,bt), TieT (et,r,bt)) where (q,r) = a `quotRem` b
toInteger (TieT (_,a,_)) = toInteger a
instance Num a => Num (DynamicT a) where
DynamicT (p,q,r,a,s,t) + DynamicT (_,_,_,b,_,_) = DynamicT (p,q,r,a+b,s,t)
DynamicT (p,q,r,a,s,t) * DynamicT (_,_,_,b,_,_) = DynamicT (p,q,r,a*b,s,t)
DynamicT (p,q,r,a,s,t) DynamicT (_,_,_,b,_,_) = DynamicT (p,q,r,ab,s,t)
abs (DynamicT (p,q,r,a,s,t)) = DynamicT (p,q,r,abs a,s,t)
signum (DynamicT (p,q,r,a,s,t)) = DynamicT (p,q,r,signum a,s,t)
fromInteger a = DynamicT (False,False,Nothing,fromInteger a,False,False)
instance Enum a => Enum (DynamicT a) where
toEnum a = DynamicT (False,False,Nothing,toEnum a,False,False)
fromEnum (DynamicT (_,_,_,a,_,_)) = fromEnum a
instance Bounded a => Bounded (DynamicT a) where
minBound = DynamicT (False,False,Nothing,minBound,False,False)
maxBound = DynamicT (False,False,Nothing,maxBound,False,False)
instance (Num a, Ord a, Real a) => Real (DynamicT a) where
toRational (DynamicT (_,_,_,a,_,_)) = toRational a
instance (Real a, Enum a, Integral a) => Integral (DynamicT a) where
DynamicT (p,q,r,a,s,t) `quotRem` DynamicT (_,_,_,b,_,_) = (DynamicT (p,q,r,q',s,t), DynamicT (p,q,r,r',s,t)) where (q',r') = a `quotRem` b
toInteger (DynamicT (_,_,_,a,_,_)) = toInteger a
instance Num a => Num (ArticulationT a) where
ArticulationT (p,q,r,s,a,t) + ArticulationT (_,_,_,_,b,_) = ArticulationT (p,q,r,s,a+b,t)
ArticulationT (p,q,r,s,a,t) * ArticulationT (_,_,_,_,b,_) = ArticulationT (p,q,r,s,a*b,t)
ArticulationT (p,q,r,s,a,t) ArticulationT (_,_,_,_,b,_) = ArticulationT (p,q,r,s,ab,t)
abs (ArticulationT (p,q,r,s,a,t)) = ArticulationT (p,q,r,s,abs a,t)
signum (ArticulationT (p,q,r,s,a,t)) = ArticulationT (p,q,r,s,signum a,t)
fromInteger a = ArticulationT (False,False,0,0,fromInteger a,False)
instance Enum a => Enum (ArticulationT a) where
toEnum a = ArticulationT (False,False,0,0,toEnum a,False)
fromEnum (ArticulationT (_,_,_,_,a,_)) = fromEnum a
instance Bounded a => Bounded (ArticulationT a) where
minBound = ArticulationT (False,False,0,0,minBound,False)
maxBound = ArticulationT (False,False,0,0,maxBound,False)
instance (Num a, Ord a, Real a) => Real (ArticulationT a) where
toRational (ArticulationT (_,_,_,_,a,_)) = toRational a
instance (Real a, Enum a, Integral a) => Integral (ArticulationT a) where
ArticulationT (p,q,r,s,a,t) `quotRem` ArticulationT (_,_,_,_,b,_) = (ArticulationT (p,q,r,s,q',t), ArticulationT (p,q,r,s,r',t)) where (q',r') = a `quotRem` b
toInteger (ArticulationT (_,_,_,_,a,_)) = toInteger a
instance Num a => Num (TremoloT a) where
TremoloT (v,a) + TremoloT (_,b) = TremoloT (v,a+b)
TremoloT (v,a) * TremoloT (_,b) = TremoloT (v,a*b)
TremoloT (v,a) TremoloT (_,b) = TremoloT (v,ab)
abs (TremoloT (v,a)) = TremoloT (v,abs a)
signum (TremoloT (v,a)) = TremoloT (v,signum a)
fromInteger a = TremoloT (toEnum 0,fromInteger a)
instance Enum a => Enum (TremoloT a) where
toEnum a = TremoloT (0, toEnum a)
fromEnum (TremoloT (v,a)) = fromEnum a
instance Bounded a => Bounded (TremoloT a) where
minBound = TremoloT (0, minBound)
maxBound = TremoloT (0, maxBound)
instance (Num a, Real a) => Real (TremoloT a) where
toRational (TremoloT (_,a)) = toRational a
instance (Real a, Enum a, Integral a) => Integral (TremoloT a) where
TremoloT (v,a) `quotRem` TremoloT (_,b) = (TremoloT (v,q), TremoloT (v,r)) where (q,r) = a `quotRem` b
toInteger (TremoloT (_,a)) = toInteger a
instance Num a => Num (TextT a) where
TextT (v,a) + TextT (_,b) = TextT (v,a+b)
TextT (v,a) * TextT (_,b) = TextT (v,a*b)
TextT (v,a) TextT (_,b) = TextT (v,ab)
abs (TextT (v,a)) = TextT (v,abs a)
signum (TextT (v,a)) = TextT (v,signum a)
fromInteger a = TextT (mempty,fromInteger a)
instance Enum a => Enum (TextT a) where
toEnum a = TextT (mempty, toEnum a)
fromEnum (TextT (v,a)) = fromEnum a
instance Bounded a => Bounded (TextT a) where
minBound = TextT (mempty, minBound)
maxBound = TextT (mempty, maxBound)
instance (Num a, Ord a, Real a) => Real (TextT a) where
toRational (TextT (v,a)) = toRational a
instance (Real a, Enum a, Integral a) => Integral (TextT a) where
TextT (v,a) `quotRem` TextT (_,b) = (TextT (v,q), TextT (v,r)) where (q,r) = a `quotRem` b
toInteger (TextT (v,a)) = toInteger a
instance Num a => Num (HarmonicT a) where
HarmonicT (v,a) + HarmonicT (_,b) = HarmonicT (v,a+b)
HarmonicT (v,a) * HarmonicT (_,b) = HarmonicT (v,a*b)
HarmonicT (v,a) HarmonicT (_,b) = HarmonicT (v,ab)
abs (HarmonicT (v,a)) = HarmonicT (v,abs a)
signum (HarmonicT (v,a)) = HarmonicT (v,signum a)
fromInteger a = HarmonicT (toEnum 0,fromInteger a)
instance Enum a => Enum (HarmonicT a) where
toEnum a = HarmonicT (0, toEnum a)
fromEnum (HarmonicT (v,a)) = fromEnum a
instance Bounded a => Bounded (HarmonicT a) where
minBound = HarmonicT (0, minBound)
maxBound = HarmonicT (0, maxBound)
instance (Num a, Ord a, Real a) => Real (HarmonicT a) where
toRational (HarmonicT (v,a)) = toRational a
instance (Real a, Enum a, Integral a) => Integral (HarmonicT a) where
HarmonicT (v,a) `quotRem` HarmonicT (_,b) = (HarmonicT (v,q), HarmonicT (v,r)) where (q,r) = a `quotRem` b
toInteger (HarmonicT (v,a)) = toInteger a
instance Num a => Num (SlideT a) where
SlideT (eg,es,a,bg,bs) + SlideT (_,_,b,_,_) = SlideT (eg,es,a+b,bg,bs)
SlideT (eg,es,a,bg,bs) * SlideT (_,_,b,_,_) = SlideT (eg,es,a*b,bg,bs)
SlideT (eg,es,a,bg,bs) SlideT (_,_,b,_,_) = SlideT (eg,es,ab,bg,bs)
abs (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,abs a,bg,bs)
signum (SlideT (eg,es,a,bg,bs)) = SlideT (eg,es,signum a,bg,bs)
fromInteger a = SlideT (False,False,fromInteger a,False,False)
instance Enum a => Enum (SlideT a) where
toEnum a = SlideT (False,False,toEnum a,False,False)
fromEnum (SlideT (_,_,a,_,_)) = fromEnum a
instance Bounded a => Bounded (SlideT a) where
minBound = SlideT (False,False,minBound,False,False)
maxBound = SlideT (False,False,maxBound,False,False)
instance (Num a, Ord a, Real a) => Real (SlideT a) where
toRational (SlideT (_,_,a,_,_)) = toRational a
instance (Real a, Enum a, Integral a) => Integral (SlideT a) where
SlideT (eg,es,a,bg,bs) `quotRem` SlideT (_,_,b,_,_) = (SlideT (eg,es,q',bg,bs), SlideT (eg,es,r',bg,bs)) where (q',r') = a `quotRem` b
toInteger (SlideT (_,_,a,_,_)) = toInteger a
mapFirstL f = mapFirstMiddleLast f id id
mapFirstMiddleLast :: (a -> b) -> (a -> b) -> (a -> b) -> [a] -> [b]
mapFirstMiddleLast f g h = go
where
go [] = []
go [a] = [f a]
go [a,b] = [f a, h b]
go xs = [f $ head xs] ++
map g (tail $ init xs) ++
[h $ last xs]