> module  HSoM.Examples.Interlude
>         (  childSong6,  --  :: Music Pitch,
>            prefix       --  :: [Music a] -> Music a)
>         )  where
> import Euterpea
> addDur       :: Dur -> [Dur -> Music a] -> Music a
> addDur d ns  =  let f n = n d
>                 in line (map f ns)
> graceNote :: Int -> Music Pitch -> Music Pitch
> graceNote n  (Prim (Note d p))  =
>           note (d/8) (trans n p) :+: note (7*d/8) p
> graceNote n  _                  = 
>           error "Can only add a grace note to a note."
> b1  = addDur dqn [b 2,   fs 3,  g 3,   fs 3]
> b2  = addDur dqn [b 2,   es 3,  fs 3,  es 3]
> b3  = addDur dqn [as 2,  fs 3,  g 3,   fs 3]
> bassLine =  times 3 b1 :+: times 2 b2 :+: 
>             times 4 b3 :+: times 5 b1
> mainVoice = times 3 v1 :+: v2
> v1   = v1a :+: graceNote (-1) (d 4 qn) :+: v1b                 --  bars 1-2
> v1a  = addDur en [a 4, e 4, d 4, fs 4, cs 4, b 3, e 4, b 3]
> v1b  = addDur en [cs 4, b 3]
> v2 = v2a :+: v2b :+: v2c :+: v2d :+: v2e :+: v2f :+: v2g
> v2a  =  line [  cs 4 (dhn+dhn), d 4 dhn, 
>                 f 4 hn, gs 4 qn, fs 4 (hn+en), g 4 en]     --  bars 7-11
> v2b  =  addDur en [  fs 4, e 4, cs 4, as 3] :+: a 3 dqn :+:
>         addDur en [  as 3, cs 4, fs 4, e 4, fs 4]          --  bars 12-13
> v2c  =  line [  g 4 en, as 4 en, cs 5 (hn+en), d 5 en, cs 5 en] :+:
>         e 4 en :+: enr :+: 
>         line [  as 4 en, a 4 en, g 4 en, d 4 qn, c 4 en, cs 4 en] 
>                                                            --  bars 14-16
> v2d  =  addDur en [  fs 4, cs 4, e 4, cs 4, 
>                      a 3, as 3, d 4, e 4, fs 4]            --  bars 17-18.5
> v2e  =  line [  graceNote 2 (e 4 qn), d 4 en, graceNote 2 (d 4 qn), cs 4 en,
>                 graceNote 1 (cs 4 qn), b 3 (en+hn), cs 4 en, b 3 en ]  
>                                                            --  bars 18.5-20
> v2f  =  line [  fs 4 en, a 4 en, b 4 (hn+qn), a 4 en, fs 4 en, e 4 qn,
>                 d 4 en, fs 4 en, e 4 hn, d 4 hn, fs 4 qn]  --  bars 21-23
> v2g  =  tempo (3/2) (line [cs 4 en, d 4 en, cs 4 en]) :+: 
>         b 3 (3*dhn+hn)                                     --  bars 24-28
> childSong6 :: Music Pitch
> childSong6 =  let t = (dhn/qn)*(69/120)
>               in instrument  RhodesPiano 
>                              (tempo t (bassLine :=: mainVoice))
> prefixes         :: [a] -> [[a]]
> prefixes []      =  []
> prefixes (x:xs)  =  let f pf = x:pf
>                     in [x] : map f (prefixes xs)
> prefix :: [Music a] -> Music a
> prefix mel =  let  m1  = line (concat (prefixes mel))
>                    m2  = transpose 12 (line (concat (prefixes (reverse mel))))
>                    m   = instrument Flute m1 :=: instrument VoiceOohs m2
>               in m :+: transpose 5 m :+: m
> mel1 = [c 4 en, e 4 sn, g 4 en, b 4 sn, a 4 en, f 4 sn, d 4 en, b 3 sn, c 4 en]
> mel2 = [c 4 sn, e 4 sn, g 4 sn, b 4 sn, a 4 sn, f 3 sn, d 4 sn, b 3 sn, c 4 sn]