music-preludes 1.8 → 1.8.1
raw patch · 9 files changed
+152/−107 lines, 9 filesdep −aesondep −data-defaultdep ~lilyponddep ~music-articulationdep ~music-dynamicsPVP ok
version bump matches the API change (PVP)
Dependencies removed: aeson, data-default
Dependency ranges changed: lilypond, music-articulation, music-dynamics, music-dynamics-literal, music-parts, music-pitch, music-pitch-literal, music-score, musicxml2
API changes (from Hackage documentation)
Files
- examples/chords.hs +1/−1
- examples/imitations.hs +114/−88
- examples/part.hs +1/−1
- examples/phrases.hs +8/−2
- examples/voices.hs +16/−0
- music-preludes.cabal +12/−12
- src/Music/Prelude/Basic.hs +0/−1
- src/Music/Prelude/Instances.hs +0/−1
- src/Music/Prelude/Standard.hs +0/−1
examples/chords.hs view
@@ -49,7 +49,7 @@ dropLast n = reverse . drop n . reverse -counterRh = set parts' rh $ (mcatMaybes $ times 4 $ octavesUp 1 $ scat [rest^*2,g,g,g^*2,g^*2, rest^*2, scat [g,g,g]^*2])^/8+counterRh = set parts' rh $ (removeRests $ times 4 $ octavesUp 1 $ scat [rest^*2,g,g,g^*2,g^*2, rest^*2, scat [g,g,g]^*2])^/8 strings = set parts' (tutti violin) $ octavesAbove 1 $ (c_<>e_<>g_)^*4
examples/imitations.hs view
@@ -2,8 +2,9 @@ {-# LANGUAGE NoMonomorphismRestriction #-} module Main where-import Music.Score.Util (rotated)-import Music.Prelude.Standard+import Music.Time.Internal.Util (rotate)+import Music.Prelude+import qualified Data.Ratio -- Get (bar,beat) -- 400 bars in 60 BPM@@ -19,7 +20,7 @@ main = {-openMusicXml-}open noteScore -noteScore :: Score Note+noteScore :: Score StandardNote noteScore = compress 4 $ {-addInstrChange $-} mempty @@ -76,88 +77,90 @@ -------------------------------------------------------------------------------- -colLegno1 :: Score Note+colLegno1 :: Score StandardNote colLegno1 = {-staccato $ -} level (ppp {-`cresc` mp |> mp^*0.2-}) $ text "col legno battuto" $- (down 12 $ delay 0 $ repTimes 7 $ mcatMaybes $ ([4,4,4,5,4] `groupWith` g) |> rest^*6)- </> (down 12 $ delay 1 $ repTimes 7 $ mcatMaybes $ ([4,4,5,4,5] `groupWith` g) |> rest^*6)- </> (down 24 $ delay 3 $ repTimes 7 $ mcatMaybes $ ([4,5,4,5,4] `groupWith` g) |> rest^*6)- </> (down 24 $ delay 6 $ repTimes 7 $ mcatMaybes $ ([3,3,5,3,5] `groupWith` g) |> rest^*6)+ (down _P8 $ delay 0 $ repTimes 7 $ removeRests $ ([4,4,4,5,4] `groupWith` g) |> rest^*6)+ </> (down _P8 $ delay 1 $ repTimes 7 $ removeRests $ ([4,4,5,4,5] `groupWith` g) |> rest^*6)+ </> (down _P15 $ delay 3 $ repTimes 7 $ removeRests $ ([4,5,4,5,4] `groupWith` g) |> rest^*6)+ </> (down _P15 $ delay 6 $ repTimes 7 $ removeRests $ ([3,3,5,3,5] `groupWith` g) |> rest^*6) -- dur 45 -colLegno2 :: Score Note+colLegno2 :: Score StandardNote colLegno2 = {-staccato $ -} level (mp) $ text "col legno battuto" $- (down 12 $ delay 0 $ repTimes 4 $ mcatMaybes $ [4,4,5,4,5,4] `groupWith` g |> rest^*6)- </> (down 12 $ delay 1 $ repTimes 4 $ mcatMaybes $ [4,4,5,4,5,4] `groupWith` g |> rest^*6)- </> (down 12 $ delay 3 $ repTimes 4 $ mcatMaybes $ [4,5,4,5,4,4] `groupWith` g |> rest^*6)- </> (down 12 $ delay 6 $ repTimes 4 $ mcatMaybes $ [3,3,5,3,3] `groupWith` g |> rest^*6)+ (down _P8 $ delay 0 $ repTimes 4 $ removeRests $ [4,4,5,4,5,4] `groupWith` g |> rest^*6)+ </> (down _P8 $ delay 1 $ repTimes 4 $ removeRests $ [4,4,5,4,5,4] `groupWith` g |> rest^*6)+ </> (down _P8 $ delay 3 $ repTimes 4 $ removeRests $ [4,5,4,5,4,4] `groupWith` g |> rest^*6)+ </> (down _P8 $ delay 6 $ repTimes 4 $ removeRests $ [3,3,5,3,3] `groupWith` g |> rest^*6) -- -colLegno2Alt :: Score Note+colLegno2Alt :: Score StandardNote colLegno2Alt = {-staccato $ -} level (mp) $ text "col legno battuto" $- (down 12 $ delay 0 $ mcatMaybes $ repWithIndex 4 $ \t -> [4,4,5,4,5,4] `groupWith` g |> rest^*(1+4*t))- </> (down 12 $ delay 1 $ mcatMaybes $ repWithIndex 4 $ \t -> [4,4,5,4,5,4] `groupWith` g |> rest^*(1+4*t))- </> (down 24 $ delay 3 $ mcatMaybes $ repWithIndex 4 $ \t -> [4,5,4,5,4,4] `groupWith` g |> rest^*(1+4*t))- </> (down 24 $ delay 6 $ mcatMaybes $ repWithIndex 4 $ \t -> [3,3,5,3,3] `groupWith` g |> rest^*(1+4*t))+ (down _P8 $ delay 0 $ removeRests $ repWithIndex 4 $ \t -> [4,4,5,4,5,4] `groupWith` g |> rest^*(1+4*t))+ </> (down _P8 $ delay 1 $ removeRests $ repWithIndex 4 $ \t -> [4,4,5,4,5,4] `groupWith` g |> rest^*(1+4*t))+ </> (down _P15 $ delay 3 $ removeRests $ repWithIndex 4 $ \t -> [4,5,4,5,4,4] `groupWith` g |> rest^*(1+4*t))+ </> (down _P15 $ delay 6 $ removeRests $ repWithIndex 4 $ \t -> [3,3,5,3,3] `groupWith` g |> rest^*(1+4*t)) -- -------------------------------------------------------------------------------- -- -makeJete :: Behavior Pitch -> Bool -> Duration -> Score Note-makeJete p v d = text "jeté" $ pitches' %~ (+ p) $ mcatMaybes $ g_ |> ((if v then cs else cs_){-^/2-}) {-|> rest^/2-} |> rest^*d+makeJete :: Behavior Interval -> Bool -> Duration -> Score (Maybe StandardNote)+makeJete p v d = {-text "jeté" $-} pitches' %~ (.+^ p) $ removeRests $ g_ |> ((if v then cs else cs_){-^/2-}) {-|> rest^/2-} |> rest^*d -makeJetes :: [Behavior Pitch] -> [Bool] -> [Duration] -> Score Note+makeJetes :: [Behavior Interval] -> [Bool] -> [Duration] -> Score (Maybe StandardNote) makeJetes ps vs ds = scat $ zipWith3 makeJete ps vs ds -jete1 :: Score Note-jete1 = id $ -- FIXME temporary fix w.r.t onset/padToBar- (delay 3 $ up 0 $ makeJetes (rotated 0 ps) (rotated 3 vs) (rotated 1 ds))- </> (delay 5 $ up 0 $ makeJetes (rotated 1 ps) (rotated 0 vs) (rotated 3 ds))^*(4/5)- </> (delay 7 $ down 12 $ makeJetes (rotated 2 ps) (rotated 1 vs) (rotated 2 ds))- </> (delay 12 $ down 12 $ makeJetes (rotated 3 ps) (rotated 2 vs) (rotated 0 ds))^*(4/5)+jete1 :: Score StandardNote+jete1 = removeRests $ -- FIXME temporary fix w.r.t onset/padToBar+ (delay 3 $ up _P1 $ makeJetes (rotate 0 ps) (rotate 3 vs) (rotate 1 ds))+ </> (delay 5 $ up _P1 $ makeJetes (rotate 1 ps) (rotate 0 vs) (rotate 3 ds))^*(4/5)+ </> (delay 7 $ down _P8 $ makeJetes (rotate 2 ps) (rotate 1 vs) (rotate 2 ds))+ </> (delay 12 $ down _P8 $ makeJetes (rotate 3 ps) (rotate 2 vs) (rotate 0 ds))^*(4/5) where- ps = take n $ cycle [0,6,6,0,6,6,0]+ ps = take n $ cycle [_P1,d5,d5,_P1,d5,d5,_P1] vs = take n $ cycle [True,False,True,False,True,False,True,False] ds = take n $ cycle $ fmap (+ 4) [3,7,5,7,5,5,3,7,7,7,7,7,5,3,7,7,7,7,7,3,3,5] n = 9 -- --- -- colLegno3 :: Score Note--- -- colLegno3 = (down 12 $ delay 0 $ rep $ [4,4,5,4,5,4] `groupWith` g |> rest^*6)+-- -- colLegno3 :: Score StandardNote+-- -- colLegno3 = (down _P8 $ delay 0 $ rep $ [4,4,5,4,5,4] `groupWith` g |> rest^*6) -- -- -- -------------------------------------------------------------------------------- -- -makeCanon_I :: Rational -> Dynamic Note -> Score Note -> Score Note -> Score Note+makeCanon_I :: Rational -> Dynamic StandardNote -> Score StandardNote -> Score StandardNote -> Score StandardNote makeCanon_I n dn subj1 subj2 =- level dn (rev (a </> b </> c </> d) |> (a </> b </> c </> d))+ level dn (empty |> (a </> b </> c </> d)) where a = (repTimes (floor $ 5*n/(4/3)) $ subj1 ^*(4/3)) b = (repTimes (floor $ 5*n/1) $ subj2 ^*1) c = (repTimes (floor $ 5*n/2) $ subj1 ^*2) d = (repTimes (floor $ 5*n/3) $ subj2 ^*3) -- -canon_I :: Score Note+canon_I :: Score StandardNote canon_I = text "ord" $ (^*2) $ makeCanon_I 1 {-dn-}mf subj1 subj2 where subj1 = g_ |> a_^*(3/2) |> g_^*2 subj2 = f_^*3 |> bb_^*1 |> a_ |> g_^*3 -- dn = (repTimes 5 $ (pp `cresc` mf)^*3 |> (mf `dim` pp)^*3 )--- --- makeCanon_II :: Score (Levels Double) -> Score Note -> Score Note -> Score Note--- makeCanon_II dn subj1 subj2 =--- level dn (rev $ a </> b </> c </> d)--- where--- a = (repWithTime 5 $ \t -> {-up (round $ octave * t) $ -}subj1 ^*(4/3))--- b = (repWithTime 5 $ \t -> {-up (round $ octave * t) $ -}subj2 ^*1)--- c = (repWithTime 2 $ \t -> {-up (round $ octave * t) $ -}subj1 ^*2)--- d = (repWithTime 2 $ \t -> {-up (round $ octave * t) $ -}subj2 ^*3)--- --- canon_II :: Score Note--- canon_II = text "ord" $ (^*2) $ makeCanon_II dn subj1 subj2--- where--- subj1 = g_ |> d^*(3/2) |> c^/2 |> a_^/2 |> bb_^/2--- subj2 = f_^*3 |> bb_^*1 |> a_ |> d_^*3--- dn = (repTimes 5 $ (pp `cresc` mf)^*3 |> (mf `dim` pp)^*3 )++makeCanon_II :: Dynamic StandardNote -> Score StandardNote -> Score StandardNote -> Score StandardNote+makeCanon_II dn subj1 subj2 =+ level dn (rev $ a </> b </> c </> d)+ where+ a = (repWithTime 5 $ \t -> {-up (round $ octave * t) $ -}subj1 ^*(4/3))+ b = (repWithTime 5 $ \t -> {-up (round $ octave * t) $ -}subj2 ^*1)+ c = (repWithTime 2 $ \t -> {-up (round $ octave * t) $ -}subj1 ^*2)+ d = (repWithTime 2 $ \t -> {-up (round $ octave * t) $ -}subj2 ^*3)++repWithTime n f = scat $ fmap f [1..n]++canon_II :: Score StandardNote+canon_II = text "ord" $ (^*2) $ makeCanon_II {-dn-}mf subj1 subj2+ where+ subj1 = g_ |> d^*(3/2) |> c^/2 |> a_^/2 |> bb_^/2+ subj2 = f_^*3 |> bb_^*1 |> a_ |> d_^*3+ -- dn = (repTimes 5 $ (pp `cresc` mf)^*3 |> (mf `dim` pp)^*3 ) -- --- makeCanon_III :: Double -> Score (Levels Double) -> Score Note -> Score Note -> Score Note+-- makeCanon_III :: Double -> Score (Levels Double) -> Score StandardNote -> Score StandardNote -> Score StandardNote -- makeCanon_III n dn subj1 subj2 = -- level dn (rev (a </> b </> c </> d) |> (a </> b </> c </> d)) -- where@@ -166,53 +169,55 @@ -- c = (repTimes (5*n/2) $ subj1 ^*2) -- d = (repTimes (5*n/3) $ subj2 ^*3) -- --- canon_III :: Score Note+-- canon_III :: Score StandardNote -- canon_III = text "ord" $ makeCanon_III 1.6 dn subj1 subj2 -- where -- subj1 = g^*2 |> d |> eb^*(3/2) |> c^*2 |> d^*2 -- subj2 = f_^*3 |> bb_^*1 |> a_ |> g_^*2 |> d^*3 |> c^*1 -- dn = (repTimes 5 $ (mf `cresc` _f)^*3 |> (_f `dim` mf)^*3 ) -- --- makeCanon_IV :: Bool -> Score Note -> Score Note -> Score Note -> Score Note--- makeCanon_IV flip subj1 subj2 bass = if flip then lower </> upper else upper </> lower--- where--- upper = (repWithTime (10/(4/5)) $ \t -> reg Vl1 t $ subj1 ^* (4/5) )--- </> (repWithTime (12/(2/3)) $ \t -> reg Vla1 t $ subj1 ^* (2/3) )--- </> (repWithTime (15/ 1 ) $ \t -> reg Vc1 t $ subj1 ^* 1 )--- </> (repWithTime (18/ 2 ) $ \t -> reg Db2 t $ bass ^* 1 )--- --- lower = (repWithTime (10/(2/3)) $ \t -> reg Vl2 t $ subj2 ^* (2/3) )--- </> (repWithTime (12/ 1 ) $ \t -> reg Vla2 t $ subj2 ^* 1 )--- </> (repWithTime (15/(3/2)) $ \t -> reg Vc2 t $ subj2 ^* (3/2) )--- </> (repWithTime (18/ 2 ) $ \t -> reg Db2 t $ bass ^* 1 )--- --- reg Vl1 t | t < 0.3 = up (octave + fifth) | t < 0.6 = up octave | t >= 0.6 = up fifth--- reg Vl2 t | t < 0.4 = up octave | t < 0.7 = up fifth | t >= 0.7 = up fifth--- reg Vla1 t | t < 0.4 = up fifth | t < 0.7 = up fifth | t >= 0.7 = up unison--- reg Vla2 t | t < 0.4 = up unison | t < 0.7 = up fifth | t >= 0.7 = up unison--- reg Vc1 t | t < 0.4 = down octave | t < 0.7 = down octave | t >= 0.7 = down fourth--- reg Vc2 t | t < 0.4 = down octave | t < 0.7 = down octave | t >= 0.7 = down fourth--- --- reg Db1 t | t < 0.4 = down (octave*1) | t < 0.7 = down (octave*1) | t >= 0.7 = down (octave*1)--- reg Db2 t | t < 0.4 = down (octave*2) | t < 0.7 = down (octave*1) | t >= 0.7 = down (octave*1)--- --- --- canon_IV :: Score Note--- canon_IV = text "ord" $ c^*padC |> firstC |> secondC--- where--- firstC = level dn1 $ rev $ makeCanon_IV False subj1 subj2 bass--- secondC = level dn2 $ makeCanon_IV True subj1 subj2 bass--- padC = fromIntegral $ 4 - numerator (getDuration $ duration firstC) `mod` 4--- dn1 = (repTimes 10 $ (mf `cresc` _f)^*5 |> (_f `dim` mf)^*5)--- dn2 = (repTimes 10 $ (_f `cresc` ff)^*5 |> (ff `dim` _f)^*5)--- --- subj1 = down 2 $ (d^*3 |> a |> g^*2 |> c' |> b |> c' |> b |> g |> a^*3)--- subj2 = down 2 $ (d^*2 |> a |> g^*2 |> c' |> b |> c' |> b |> g |> a^*3)--- bass = melody [d,a] |> g^*2 |> melody [c,d,a] |> g^*2--- -- bass = melody [d,g] |> a^*2 |> melody [c,g,d] |> a^*2+makeCanon_IV :: Bool -> Score StandardNote -> Score StandardNote -> Score StandardNote -> Score StandardNote+makeCanon_IV flip subj1 subj2 bass = if flip then lower </> upper else upper </> lower+ where+ upper = (repWithTime (10/(4/5)) $ \t -> reg "Vl1" t $ subj1 ^* (4/5) )+ </> (repWithTime (12/(2/3)) $ \t -> reg "Vla1" t $ subj1 ^* (2/3) )+ </> (repWithTime (15/ 1 ) $ \t -> reg "Vc1" t $ subj1 ^* 1 )+ </> (repWithTime (18/ 2 ) $ \t -> reg "Db2" t $ bass ^* 1 ) + lower = (repWithTime (10/(2/3)) $ \t -> reg "Vl2" t $ subj2 ^* (2/3) )+ </> (repWithTime (12/ 1 ) $ \t -> reg "Vla2" t $ subj2 ^* 1 )+ </> (repWithTime (15/(3/2)) $ \t -> reg "Vc2" t $ subj2 ^* (3/2) )+ </> (repWithTime (18/ 2 ) $ \t -> reg "Db2" t $ bass ^* 1 ) + reg "Vl1" t | t < 0.3 = up (_P8 + _P5) | t < 0.6 = up _P8 | t >= 0.6 = up _P5+ reg "Vl2" t | t < 0.4 = up _P8 | t < 0.7 = up _P5 | t >= 0.7 = up _P5+ reg "Vla1" t | t < 0.4 = up _P5 | t < 0.7 = up _P5 | t >= 0.7 = up _P1+ reg "Vla2" t | t < 0.4 = up _P1 | t < 0.7 = up _P5 | t >= 0.7 = up _P1+ reg "Vc1" t | t < 0.4 = down _P8 | t < 0.7 = down _P8 | t >= 0.7 = down _P4+ reg "Vc2" t | t < 0.4 = down _P8 | t < 0.7 = down _P8 | t >= 0.7 = down _P4 + reg "Db1" t | t < 0.4 = down (_P8^*1) | t < 0.7 = down (_P8^*1) | t >= 0.7 = down (_P8^*1)+ reg "Db2" t | t < 0.4 = down (_P8^*2) | t < 0.7 = down (_P8^*1) | t >= 0.7 = down (_P8^*1)+++canon_IV :: Score StandardNote+canon_IV = text "ord" $ {-c^*padC |> firstC |>-} secondC+ where+ firstC = {-level dn1 $-} rev $ makeCanon_IV False subj1 subj2 bass+ secondC = {-level dn2 $-} makeCanon_IV True subj1 subj2 bass+ padC = fromIntegral $ 4 - Data.Ratio.numerator (realToFrac $ _duration firstC) `mod` 4+ -- dn1 = (repTimes 10 $ (mf `cresc` _f)^*5 |> (_f `dim` mf)^*5)+ -- dn2 = (repTimes 10 $ (_f `cresc` ff)^*5 |> (ff `dim` _f)^*5)++ subj1 = down _M2 $ (d^*3 |> a |> g^*2 |> c' |> b |> c' |> b |> g |> a^*3)+ subj2 = down _M2 $ (d^*2 |> a |> g^*2 |> c' |> b |> c' |> b |> g |> a^*3)+ bass = scat [d,a] |> g^*2 |> scat [c,d,a] |> g^*2+ -- bass = scat [d,g] |> a^*2 |> scat [c,g,d] |> a^*2+++instance Reversible (Score a) where+ rev = stretchRelativeMidpoint (-1)+ cresc = const dim = const repTimes = times@@ -226,3 +231,24 @@ moveToPart p x = parts' .~ p $ x [vl1, vl2] = divide 2 $ tutti violin+++_solo :: Lens' Part Solo+_solo f (Part s i u) = fmap (\s -> Part s i u) $ f s++_subpart :: Lens' Part Subpart+_subpart f (Part s i u) = fmap (\u -> Part s i u) $ f u++_instrument :: Lens' Part Instrument+_instrument f (Part s i u) = fmap (\i -> Part s i u) $ f i++-- Not perfect but works for many cases+ucat xs = if allDistinct ps + then mconcat xs + else mconcat $ zipWith (set parts') (divide (length xs) p) xs+ where+ ps = concatMap (toListOf parts') xs+ p = foldr1 smallestPart ps+++
examples/part.hs view
@@ -50,7 +50,7 @@ bell = let cue :: Score (Maybe StandardNote) cue = stretchTo 1 (rest |> a) - in parts' .~ solo tubularBells $ text "l.v." $ mcatMaybes $ times 40 $ scat [times 3 $ scat [cue,rest], rest^*2]+ in parts' .~ solo tubularBells $ text "l.v." $ removeRests $ times 40 $ scat [times 3 $ scat [cue,rest], rest^*2] strings :: Score StandardNote strings = pcat [
examples/phrases.hs view
@@ -10,7 +10,7 @@ subj = times 2 $ scat [c,c,d,b_,e,e]^/16 -- Each voice differ slighly in onset etc-voca v = delay ((4/8)^*v) $ mcatMaybes $ scat $ fmap (\i -> (id $ up (_M2^*i) subj) |> rest^*(15/8)) +voca v = delay ((4/8)^*v) $ removeRests $ scat $ fmap (\i -> (id $ up (_M2^*i) subj) |> rest^*(15/8)) $ [0..3] -- The @@ -19,7 +19,7 @@ $ composer "Anonymous" $ timeSignature (3/8) $ timeSignatureDuring ((14*3/8) <-> 200) (4/8) - $ over phrases (rotateValues 1)+ $ over (phrases . valuesV) (rotate 1) -- $ over (phrases.middleV) (octavesAbove 1) -- $ over phrases fuse $ rcat @@ -27,3 +27,9 @@ $ map voca [0..3] main = open $ asScore $ music++rotate :: Int -> [a] -> [a]+rotate n xs = iterate rotate1 xs !! n+ where+ rotate1 [] = []+ rotate1 xs = last xs : init xs
+ examples/voices.hs view
@@ -0,0 +1,16 @@++import Music.Prelude+import qualified Music.Score++subj :: Voice Pitch+subj = mconcat [c',ab,db',e,f,g,ab,bb,c']++type Chorale = [Voice (Maybe Pitch)]++renderVoice :: Voice (Maybe Pitch) -> Score StandardNote+renderVoice = fmap pitchToNote . removeRests . renderAlignedVoice . aligned 0 0+ where+ pitchToNote = fromPitch' . pure++renderChorale :: Chorale -> Score StandardNote+renderChorale = rcat . fmap renderVoice
music-preludes.cabal view
@@ -1,6 +1,6 @@ name: music-preludes-version: 1.8+version: 1.8.1 author: Hans Hoglund maintainer: Hans Hoglund license: BSD3@@ -26,7 +26,7 @@ library build-depends: base >= 4 && < 5,- aeson >= 0.7.0.6 && < 1,+ -- aeson >= 0.7.0.6 && < 1, lens >= 4.6 && < 4.7, split, containers,@@ -38,17 +38,17 @@ optparse-applicative >= 0.8 && < 1, average >= 0.6 && < 1, semigroups >= 0.13.0.1 && < 1,- data-default,+ -- data-default, monadplus,- lilypond == 1.8,- musicxml2 == 1.8,- music-score == 1.8,- music-pitch == 1.8,- music-dynamics == 1.8,- music-articulation == 1.8,- music-parts == 1.8,- music-pitch-literal == 1.8,- music-dynamics-literal == 1.8,+ lilypond == 1.8.1,+ musicxml2 == 1.8.1,+ music-score == 1.8.1,+ music-pitch == 1.8.1,+ music-dynamics == 1.8.1,+ music-articulation == 1.8.1,+ music-parts == 1.8.1,+ music-pitch-literal == 1.8.1,+ music-dynamics-literal == 1.8.1, -- For examples: async if !os(windows)
src/Music/Prelude/Basic.hs view
@@ -36,7 +36,6 @@ openAndPlay ) where -import Data.Default import Data.Typeable import Music.Pitch hiding (Fifths)
src/Music/Prelude/Instances.hs view
@@ -25,7 +25,6 @@ module Music.Prelude.Instances () where import Data.AffineSpace.Point-import Data.Default import Data.Typeable import Music.Dynamics
src/Music/Prelude/Standard.hs view
@@ -33,7 +33,6 @@ openAndPlay ) where -import Data.Default import Data.Typeable import Music.Pitch