-- Copyright 2017 Evan Laforge
-- This program is distributed under the terms of the GNU General Public
-- License 3.0, see COPYING or http://www.gnu.org/licenses/gpl-3.0.txt

{-# LANGUAGE RecordWildCards #-}
-- | Mohras.
module Solkattu.Score.SolkattuMohra where
import           Prelude hiding ((.), (^), repeat)

import qualified Solkattu.Instrument.KendangTunggal as KendangTunggal
import qualified Solkattu.Korvai as Korvai
import qualified Solkattu.Score.Mohra as Mohra
import qualified Solkattu.Tala as Tala

import           Solkattu.Dsl.Solkattu hiding (korvai1)


-- | Bundle multiple mohra korvais.  This is convenient for variations.
korvais :: Tala.Tala -> Korvai.StrokeMaps -> (Sequence -> Sequence)
    -> [((Sequence, Sequence, Sequence), (Sequence, Sequence, Sequence))]
    -> Korvai
korvais :: Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> [((Sequence, Sequence, Sequence),
     (Sequence, Sequence, Sequence))]
-> Korvai
korvais Tala
tala StrokeMaps
smaps Sequence -> Sequence
transform = forall sollu a.
([Section (SequenceT sollu)] -> Korvai)
-> (a -> SequenceT sollu) -> [((a, a, a), (a, a, a))] -> Korvai
Mohra.korvais (Tala -> StrokeMaps -> [Section] -> Korvai
korvai Tala
tala StrokeMaps
smaps) Sequence -> Sequence
transform

korvai1 :: Tala.Tala -> Korvai.StrokeMaps -> (Sequence -> Sequence)
    -> (Sequence, Sequence, Sequence)
    -> (Sequence, Sequence, Sequence) -> Korvai
korvai1 :: Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> (Sequence, Sequence, Sequence)
-> (Sequence, Sequence, Sequence)
-> Korvai
korvai1 Tala
tala StrokeMaps
smaps Sequence -> Sequence
transform (Sequence, Sequence, Sequence)
as (Sequence, Sequence, Sequence)
bs = Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> [((Sequence, Sequence, Sequence),
     (Sequence, Sequence, Sequence))]
-> Korvai
korvais Tala
tala StrokeMaps
smaps Sequence -> Sequence
transform [((Sequence, Sequence, Sequence)
as, (Sequence, Sequence, Sequence)
bs)]

-- | Mohra with a matching korvai.
mohraKorvai :: Tala.Tala -> Korvai.StrokeMaps -> (Sequence -> Sequence)
    -> (Sequence, Sequence, Sequence)
    -> (Sequence, Sequence, Sequence)
    -> Sequence
    -> Korvai
mohraKorvai :: Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> (Sequence, Sequence, Sequence)
-> (Sequence, Sequence, Sequence)
-> Sequence
-> Korvai
mohraKorvai Tala
tala StrokeMaps
smaps Sequence -> Sequence
transform (Sequence, Sequence, Sequence)
as (Sequence, Sequence, Sequence)
bs Sequence
korvai_ =
    Korvai -> Korvai
mohra forall a b. (a -> b) -> a -> b
$ Tala -> StrokeMaps -> [Section] -> Korvai
korvai Tala
tala StrokeMaps
smaps
        [ forall sollu. Text -> Section sollu -> Section sollu
withTypeS Text
"mohra" forall a b. (a -> b) -> a -> b
$ forall a. a -> Section a
s forall a b. (a -> b) -> a -> b
$ forall a sollu.
(a -> SequenceT sollu) -> (a, a, a) -> (a, a, a) -> SequenceT sollu
Mohra.make Sequence -> Sequence
transform (Sequence, Sequence, Sequence)
as (Sequence, Sequence, Sequence)
bs
        , forall sollu. Text -> Section sollu -> Section sollu
withTypeS Text
"korvai" forall a b. (a -> b) -> a -> b
$ forall a. a -> Section a
s Sequence
korvai_
        ]

-- | Alternate melkalam and kirkalam.
makeMohras2 :: Tala.Tala -> Korvai.StrokeMaps -> (Sequence -> Sequence)
    -> [((Sequence, Sequence, Sequence), (Sequence, Sequence, Sequence))]
    -> Korvai
makeMohras2 :: Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> [((Sequence, Sequence, Sequence),
     (Sequence, Sequence, Sequence))]
-> Korvai
makeMohras2 Tala
tala StrokeMaps
smaps Sequence -> Sequence
transform =
    Korvai -> Korvai
mohra forall b c a. (b -> c) -> (a -> b) -> a -> c
 Tala -> StrokeMaps -> [Section] -> Korvai
korvai Tala
tala StrokeMaps
smaps forall b c a. (b -> c) -> (a -> b) -> a -> c
 forall a b. (a -> b) -> [a] -> [b]
map (forall a. a -> Section a
section forall b c a. (b -> c) -> (a -> b) -> a -> c
 forall a sollu.
(a -> SequenceT sollu) -> ((a, a, a), (a, a, a)) -> SequenceT sollu
Mohra.make2 Sequence -> Sequence
transform)

-- | Alternate melkalam and kirkalam.
makeMohra2 :: Tala.Tala -> Korvai.StrokeMaps -> (Sequence -> Sequence)
    -> (Sequence, Sequence, Sequence) -> (Sequence, Sequence, Sequence)
    -> Korvai
makeMohra2 :: Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> (Sequence, Sequence, Sequence)
-> (Sequence, Sequence, Sequence)
-> Korvai
makeMohra2 Tala
tala StrokeMaps
smaps Sequence -> Sequence
transform (Sequence, Sequence, Sequence)
as (Sequence, Sequence, Sequence)
bs =
    Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> [((Sequence, Sequence, Sequence),
     (Sequence, Sequence, Sequence))]
-> Korvai
makeMohras2 Tala
tala StrokeMaps
smaps Sequence -> Sequence
transform [((Sequence, Sequence, Sequence)
as, (Sequence, Sequence, Sequence)
bs)]

c_mohra :: Korvai
c_mohra :: Korvai
c_mohra = Korvai -> Korvai
ganesh forall a b. (a -> b) -> a -> b
$ Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> [((Sequence, Sequence, Sequence),
     (Sequence, Sequence, Sequence))]
-> Korvai
korvais Tala
adi (StrokeMaps
mridangamforall a. Semigroup a => a -> a -> a
<>StrokeMaps
kendang) forall g sollu. Sequence g sollu -> Sequence g sollu
su
    [ ((Sequence
a1, Sequence
a2, Sequence
a1), (Sequence
b1, Sequence
b2, Sequence
b3))
    , ((Sequence
a1, Sequence
a2, Sequence
a1), (Sequence
b12, Sequence
b22, Sequence
b32))
    ]
    where
    a1 :: Sequence
a1 = Sequence
ditforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4     forall a. Monoid a => a -> a -> a
.Sequence
tangforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
kitaforall a. Monoid a => a -> a -> a
.Sequence
nakatiku
    a2 :: Sequence
a2 = Sequence
naforall a. Monoid a => a -> a -> a
.Sequence
kaforall a. Monoid a => a -> a -> a
.Sequence
ditforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
tangforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
kitaforall a. Monoid a => a -> a -> a
.Sequence
nakatiku
    b1 :: Sequence
b1 = Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
langaforall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
tatforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
tatforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
dheemforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4
    b2 :: Sequence
b2 = Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
langaforall a. Monoid a => a -> a -> a
.Sequence
dheemforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4
    b3 :: Sequence
b3 = forall sollu. SequenceT sollu -> SequenceT sollu -> SequenceT sollu
tri_ (Sequence
dheemforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4) (Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
langaforall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
tatforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__)

    b12 :: Sequence
b12 = forall g sollu. Matra -> Sequence g sollu -> Sequence g sollu
nadai Matra
3 forall a b. (a -> b) -> a -> b
$ Sequence
naforall a. Monoid a => a -> a -> a
.Sequence
kitaforall a. Monoid a => a -> a -> a
.Sequence
takitaforall a. Monoid a => a -> a -> a
.Sequence
takitaforall a. Monoid a => a -> a -> a
.Sequence
dheemforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__3
    b22 :: Sequence
b22 = forall g sollu. Matra -> Sequence g sollu -> Sequence g sollu
nadai Matra
3 forall a b. (a -> b) -> a -> b
$ Sequence
takitaforall a. Monoid a => a -> a -> a
.Sequence
dheemforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__3
    b32 :: Sequence
b32 = forall g sollu. Matra -> Sequence g sollu -> Sequence g sollu
nadai Matra
3 forall a b. (a -> b) -> a -> b
$ forall sollu. SequenceT sollu -> SequenceT sollu -> SequenceT sollu
tri_ Sequence
tanga (Sequence
naforall a. Monoid a => a -> a -> a
.Sequence
kitaforall a. Monoid a => a -> a -> a
.Sequence
takita)
    mridangam :: StrokeMaps
mridangam = StrokeMap Stroke -> StrokeMaps
makeMridangam
        [ (Sequence
dit, forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
tangforall a. Monoid a => a -> a -> a
.Sequence
kita, forall {g}. Sequence g (Note (Stroke Stroke))
uforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
naforall a. Monoid a => a -> a -> a
.Sequence
ka, forall {g}. Sequence g (Note (Stroke Stroke))
nforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
p)
        , (Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
langa, forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
uforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
dinforall a. Monoid a => a -> a -> a
.Sequence
tat, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
dheem, forall {g}. Sequence g (Note (Stroke Stroke))
od)

        , (Sequence
naforall a. Monoid a => a -> a -> a
.Sequence
kita, forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
kforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
n)
        , (Sequence
takita, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
tanga, forall {g}. Sequence g (Note (Stroke Stroke))
odforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        ]
    kendang :: StrokeMaps
kendang = StrokeMap Stroke -> StrokeMaps
makeKendang1
        [ (Sequence
dit, forall {g}. Sequence g (Note (Stroke Stroke))
pk)
        , (Sequence
tangforall a. Monoid a => a -> a -> a
.Sequence
kita, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
naforall a. Monoid a => a -> a -> a
.Sequence
ka, forall {g}. Sequence g (Note (Stroke Stroke))
tforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
langa, forall {g}. Sequence g (Note (Stroke Stroke))
uforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
uforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
p)
        , (Sequence
dinforall a. Monoid a => a -> a -> a
.Sequence
tat, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
p)
        , (Sequence
dheem, forall {g}. Sequence g (Note (Stroke Stroke))
a)

        , (Sequence
naforall a. Monoid a => a -> a -> a
.Sequence
kita, forall {g}. Sequence g (Note (Stroke Stroke))
tforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
aforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
p)
        , (Sequence
takita, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
p)
        , (Sequence
tanga, forall {g}. Sequence g (Note (Stroke Stroke))
aforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
p)
        ] where KendangTunggal.Strokes {Sequence g (Note (Stroke Stroke))
a :: forall a. Strokes a -> a
o :: forall a. Strokes a -> a
k :: forall a. Strokes a -> a
å :: forall a. Strokes a -> a
u :: forall a. Strokes a -> a
t :: forall a. Strokes a -> a
p :: forall a. Strokes a -> a
pk :: forall a. Strokes a -> a
å :: Sequence g (Note (Stroke Stroke))
a :: Sequence g (Note (Stroke Stroke))
u :: Sequence g (Note (Stroke Stroke))
t :: Sequence g (Note (Stroke Stroke))
k :: Sequence g (Note (Stroke Stroke))
p :: Sequence g (Note (Stroke Stroke))
o :: Sequence g (Note (Stroke Stroke))
pk :: Sequence g (Note (Stroke Stroke))
..} = forall g. Strokes (Sequence g (Note (Stroke Stroke)))
KendangTunggal.notes

c_mohra2 :: Korvai
c_mohra2 :: Korvai
c_mohra2 = Korvai -> Korvai
janahan forall a b. (a -> b) -> a -> b
$ Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> (Sequence, Sequence, Sequence)
-> (Sequence, Sequence, Sequence)
-> Korvai
korvai1 Tala
adi StrokeMaps
mridangam forall g sollu. Sequence g sollu -> Sequence g sollu
su (Sequence
a1, Sequence
a2, Sequence
a3) (Sequence
b1, Sequence
b2, Sequence
b3)
    where
    a_ :: Sequence
a_ = Sequence
kitatakaforall a. Monoid a => a -> a -> a
.Sequence
nakatiku
    a1 :: Sequence
a1 = Sequence
ditforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4forall a. Monoid a => a -> a -> a
.Sequence
tangforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__ forall a. Monoid a => a -> a -> a
. Sequence
a_
    a2 :: Sequence
a2 = Sequence
ditforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__2forall a. Monoid a => a -> a -> a
.Sequence
tangforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__ forall a. Monoid a => a -> a -> a
. Sequence
a_
    a3 :: Sequence
a3 = Sequence
ditforall a. Monoid a => a -> a -> a
.Sequence
tang forall a. Monoid a => a -> a -> a
. Sequence
a_
    b1 :: Sequence
b1 = forall a. Monoid a => Matra -> a -> a
repeat Matra
3 (Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
gaforall a. Monoid a => a -> a -> a
.Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
ga) forall a. Monoid a => a -> a -> a
. Sequence
dhomforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4
    b2 :: Sequence
b2 = Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
gaforall a. Monoid a => a -> a -> a
.Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
ga forall a. Monoid a => a -> a -> a
. Sequence
dhomforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4
    b3 :: Sequence
b3 = forall sollu. SequenceT sollu -> SequenceT sollu -> SequenceT sollu
tri_ (Sequence
dhomforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4) forall a b. (a -> b) -> a -> b
$ forall a. Monoid a => Matra -> a -> a
repeat Matra
2 (Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
gaforall a. Monoid a => a -> a -> a
.Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
ga)
    mridangam :: StrokeMaps
mridangam = StrokeMap Stroke -> StrokeMaps
makeMridangam
        [ (Sequence
dit, forall {g}. Sequence g (Note (Stroke Stroke))
t)
        , (Sequence
tang, forall {g}. Sequence g (Note (Stroke Stroke))
o)
        , (Sequence
kitataka, forall {g}. Sequence g (Note (Stroke Stroke))
kforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
tforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
ga, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
u)
        , (Sequence
dhom, forall {g}. Sequence g (Note (Stroke Stroke))
o)
        ]

c_mohra_youtube :: Korvai
c_mohra_youtube :: Korvai
c_mohra_youtube = Text -> Korvai -> Korvai
source Text
"Melakkaveri Balaji" forall a b. (a -> b) -> a -> b
$
    Stack => Text -> String -> Korvai -> Korvai
recording Text
"https://www.youtube.com/watch?v=eq-DZeJi8Sk" String
"59-2:07" forall a b. (a -> b) -> a -> b
$
    Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> (Sequence, Sequence, Sequence)
-> (Sequence, Sequence, Sequence)
-> Korvai
makeMohra2 Tala
adi StrokeMaps
mridangam forall g sollu. Sequence g sollu -> Sequence g sollu
su (Sequence
a1, Sequence
a2, Sequence
a3) (Sequence
b1, Sequence
b2, Sequence
b3)
    where
    -- he says "tikutaka tarikita" instead of "nakatiku tarikita"
    a1 :: Sequence
a1 = forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
dhomforall a. Monoid a => a -> a -> a
.Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
kaforall a. Monoid a => a -> a -> a
.Sequence
ta forall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
kiforall a. Monoid a => a -> a -> a
.Sequence
ta forall a. Monoid a => a -> a -> a
. Sequence
nakatiku
    a2 :: Sequence
a2 = Sequence
kaforall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
. Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
kiforall a. Monoid a => a -> a -> a
.Sequence
ta forall a. Monoid a => a -> a -> a
. Sequence
nakatiku
    a3 :: Sequence
a3 = Sequence
kaforall a. Monoid a => a -> a -> a
.Sequence
dhomforall a. Monoid a => a -> a -> a
.Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
kaforall a. Monoid a => a -> a -> a
.Sequence
ta forall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
kiforall a. Monoid a => a -> a -> a
.Sequence
ta forall a. Monoid a => a -> a -> a
. Sequence
nakatiku
    b1 :: Sequence
b1 = Sequence
taka forall a. Monoid a => a -> a -> a
. Sequence
tangforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__3forall a. Monoid a => a -> a -> a
.Sequence
ga forall a. Monoid a => a -> a -> a
. Sequence
tangforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__3forall a. Monoid a => a -> a -> a
.Sequence
ga forall a. Monoid a => a -> a -> a
. Sequence
tangforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__3forall a. Monoid a => a -> a -> a
.Sequence
ga forall a. Monoid a => a -> a -> a
. Sequence
tangforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__
    b2 :: Sequence
b2 = Sequence
taka forall a. Monoid a => a -> a -> a
. Sequence
tangforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__3forall a. Monoid a => a -> a -> a
.Sequence
gaforall a. Monoid a => a -> a -> a
.Sequence
tangforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__
    b3 :: Sequence
b3 = Sequence
taka forall a. Monoid a => a -> a -> a
. forall sollu. SequenceT sollu -> SequenceT sollu -> SequenceT sollu
tri_ (Sequence
tangforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
kitataka) (Sequence
tangforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__3forall a. Monoid a => a -> a -> a
.Sequence
gaforall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__)
    mridangam :: StrokeMaps
mridangam = StrokeMap Stroke -> StrokeMaps
makeMridangam
        [ (Sequence
dhomforall a. Monoid a => a -> a -> a
.Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
kaforall a. Monoid a => a -> a -> a
.Sequence
ta, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
kforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
u)
        , (Sequence
kiforall a. Monoid a => a -> a -> a
.Sequence
ta, forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
kaforall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.Sequence
din, forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
iforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
i)
        , (Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
kiforall a. Monoid a => a -> a -> a
.Sequence
ta, forall {g}. Sequence g (Note (Stroke Stroke))
kforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
tforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
ka, forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
takaforall a. Monoid a => a -> a -> a
.Sequence
tang, forall {g}. Sequence g (Note (Stroke Stroke))
nforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
od)
        , (Sequence
gaforall a. Monoid a => a -> a -> a
.Sequence
tang, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
od)
        , (Sequence
gaforall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.Sequence
tang, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
odforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
u)
        , (Sequence
kitataka, forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
kforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
kforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
o)
        , (Sequence
gaforall a. Monoid a => a -> a -> a
.Sequence
din, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
od)
        ]

-- | Misra version of 'c_mohra'.
misra1 :: Korvai
misra1 :: Korvai
misra1 = Stack => Matra -> Matra -> Matra -> Korvai -> Korvai
date Matra
2019 Matra
4 Matra
14 forall a b. (a -> b) -> a -> b
$ Korvai -> Korvai
ganesh forall a b. (a -> b) -> a -> b
$ Tala
-> StrokeMaps
-> (Sequence -> Sequence)
-> (Sequence, Sequence, Sequence)
-> (Sequence, Sequence, Sequence)
-> Korvai
korvai1 Tala
Tala.misra_chapu StrokeMaps
mridangam forall a. a -> a
id
    (Sequence
a1, Sequence
a2, Sequence
a1) (Sequence
b1, Sequence
b2, Sequence
b3)
    where
    a1 :: Sequence
a1 = Sequence
tamforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
takaforall a. Monoid a => a -> a -> a
.Sequence
nakatiku
    a2 :: Sequence
a2 = Sequence
naforall a. Monoid a => a -> a -> a
.Sequence
kaforall a. Monoid a => a -> a -> a
.Sequence
ditforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
tangforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
kitaforall a. Monoid a => a -> a -> a
.Sequence
nakatiku
    b1 :: Sequence
b1 = Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
langaforall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
tatforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
tatforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
dheemforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4
    b2 :: Sequence
b2 = Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
langaforall a. Monoid a => a -> a -> a
.Sequence
dheemforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4
    b3 :: Sequence
b3 = forall sollu. SequenceT sollu -> SequenceT sollu -> SequenceT sollu
tri_ (Sequence
dheemforall a. Monoid a => a -> a -> a
.forall sollu. SequenceT sollu
__4) (Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
langaforall a. Monoid a => a -> a -> a
.Sequence
dinforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.Sequence
tatforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__)
    mridangam :: StrokeMaps
mridangam = StrokeMap Stroke -> StrokeMaps
makeMridangam
        [ (Sequence
tamforall a. Monoid a => a -> a -> a
.Sequence
taka, Sequence Group (Note (Stroke Stroke))
onforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
dit, forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
tangforall a. Monoid a => a -> a -> a
.Sequence
kita, forall {g}. Sequence g (Note (Stroke Stroke))
uforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
naforall a. Monoid a => a -> a -> a
.Sequence
ka, forall {g}. Sequence g (Note (Stroke Stroke))
nforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
p)
        , (Sequence
taforall a. Monoid a => a -> a -> a
.Sequence
langa, forall {g}. Sequence g (Note (Stroke Stroke))
pforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
uforall a. Monoid a => a -> a -> a
.forall a. Rest a => a
__forall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
dinforall a. Monoid a => a -> a -> a
.Sequence
tat, forall {g}. Sequence g (Note (Stroke Stroke))
oforall a. Monoid a => a -> a -> a
.forall {g}. Sequence g (Note (Stroke Stroke))
k)
        , (Sequence
dheem, forall {g}. Sequence g (Note (Stroke Stroke))
od)
        ]