-- Copyright 2016 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 DeriveFunctor #-}
{-# LANGUAGE RecordWildCards #-}
-- | Realize an abstract solkattu Notes to concrete mridangam 'Note's.
module Solkattu.Instrument.Mridangam where
import qualified Data.List as List
import qualified Data.Map as Map
import qualified Data.Text as Text

import qualified Util.CallStack as CallStack
import qualified Util.Lists as Lists

import qualified Derive.Expr as Expr
import qualified Derive.Symbols as Symbols
import qualified Solkattu.Realize as Realize
import qualified Solkattu.S as S
import qualified Solkattu.Solkattu as Solkattu
import qualified Solkattu.Technique as Technique

import           Global


data Stroke = Thoppi !Thoppi | Valantalai !Valantalai | Both !Thoppi !Valantalai
    deriving (Stroke -> Stroke -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Stroke -> Stroke -> Bool
$c/= :: Stroke -> Stroke -> Bool
== :: Stroke -> Stroke -> Bool
$c== :: Stroke -> Stroke -> Bool
Eq, Eq Stroke
Stroke -> Stroke -> Bool
Stroke -> Stroke -> Ordering
Stroke -> Stroke -> Stroke
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Stroke -> Stroke -> Stroke
$cmin :: Stroke -> Stroke -> Stroke
max :: Stroke -> Stroke -> Stroke
$cmax :: Stroke -> Stroke -> Stroke
>= :: Stroke -> Stroke -> Bool
$c>= :: Stroke -> Stroke -> Bool
> :: Stroke -> Stroke -> Bool
$c> :: Stroke -> Stroke -> Bool
<= :: Stroke -> Stroke -> Bool
$c<= :: Stroke -> Stroke -> Bool
< :: Stroke -> Stroke -> Bool
$c< :: Stroke -> Stroke -> Bool
compare :: Stroke -> Stroke -> Ordering
$ccompare :: Stroke -> Stroke -> Ordering
Ord, Int -> Stroke -> ShowS
[Stroke] -> ShowS
Stroke -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Stroke] -> ShowS
$cshowList :: [Stroke] -> ShowS
show :: Stroke -> String
$cshow :: Stroke -> String
showsPrec :: Int -> Stroke -> ShowS
$cshowsPrec :: Int -> Stroke -> ShowS
Show)
data Thoppi =
    Tha !Tha | Thom !Thom
    -- | Just the gumiki movement, no strike.  Or possibly a light strike to
    -- make it speak if it doesn't sustain.
    | Gum
    deriving (Thoppi -> Thoppi -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Thoppi -> Thoppi -> Bool
$c/= :: Thoppi -> Thoppi -> Bool
== :: Thoppi -> Thoppi -> Bool
$c== :: Thoppi -> Thoppi -> Bool
Eq, Eq Thoppi
Thoppi -> Thoppi -> Bool
Thoppi -> Thoppi -> Ordering
Thoppi -> Thoppi -> Thoppi
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Thoppi -> Thoppi -> Thoppi
$cmin :: Thoppi -> Thoppi -> Thoppi
max :: Thoppi -> Thoppi -> Thoppi
$cmax :: Thoppi -> Thoppi -> Thoppi
>= :: Thoppi -> Thoppi -> Bool
$c>= :: Thoppi -> Thoppi -> Bool
> :: Thoppi -> Thoppi -> Bool
$c> :: Thoppi -> Thoppi -> Bool
<= :: Thoppi -> Thoppi -> Bool
$c<= :: Thoppi -> Thoppi -> Bool
< :: Thoppi -> Thoppi -> Bool
$c< :: Thoppi -> Thoppi -> Bool
compare :: Thoppi -> Thoppi -> Ordering
$ccompare :: Thoppi -> Thoppi -> Ordering
Ord, Int -> Thoppi -> ShowS
[Thoppi] -> ShowS
Thoppi -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Thoppi] -> ShowS
$cshowList :: [Thoppi] -> ShowS
show :: Thoppi -> String
$cshow :: Thoppi -> String
showsPrec :: Int -> Thoppi -> ShowS
$cshowsPrec :: Int -> Thoppi -> ShowS
Show)
data Valantalai = Ki | Ta
    | Mi -- ^ light Ki, played with middle finger
    | Nam
    | Din
    | AraiChapu -- ^ "half chapu", played covering half the valantalai
    | MuruChapu -- ^ "full chapu", played with just the pinky touching saddam
    | Dheem
    | Kin -- ^ ki on meetu
    | Tan -- ^ ta on meetu
    deriving (Valantalai -> Valantalai -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Valantalai -> Valantalai -> Bool
$c/= :: Valantalai -> Valantalai -> Bool
== :: Valantalai -> Valantalai -> Bool
$c== :: Valantalai -> Valantalai -> Bool
Eq, Eq Valantalai
Valantalai -> Valantalai -> Bool
Valantalai -> Valantalai -> Ordering
Valantalai -> Valantalai -> Valantalai
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Valantalai -> Valantalai -> Valantalai
$cmin :: Valantalai -> Valantalai -> Valantalai
max :: Valantalai -> Valantalai -> Valantalai
$cmax :: Valantalai -> Valantalai -> Valantalai
>= :: Valantalai -> Valantalai -> Bool
$c>= :: Valantalai -> Valantalai -> Bool
> :: Valantalai -> Valantalai -> Bool
$c> :: Valantalai -> Valantalai -> Bool
<= :: Valantalai -> Valantalai -> Bool
$c<= :: Valantalai -> Valantalai -> Bool
< :: Valantalai -> Valantalai -> Bool
$c< :: Valantalai -> Valantalai -> Bool
compare :: Valantalai -> Valantalai -> Ordering
$ccompare :: Valantalai -> Valantalai -> Ordering
Ord, Int -> Valantalai -> ShowS
[Valantalai] -> ShowS
Valantalai -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Valantalai] -> ShowS
$cshowList :: [Valantalai] -> ShowS
show :: Valantalai -> String
$cshow :: Valantalai -> String
showsPrec :: Int -> Valantalai -> ShowS
$cshowsPrec :: Int -> Valantalai -> ShowS
Show, Int -> Valantalai
Valantalai -> Int
Valantalai -> [Valantalai]
Valantalai -> Valantalai
Valantalai -> Valantalai -> [Valantalai]
Valantalai -> Valantalai -> Valantalai -> [Valantalai]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Valantalai -> Valantalai -> Valantalai -> [Valantalai]
$cenumFromThenTo :: Valantalai -> Valantalai -> Valantalai -> [Valantalai]
enumFromTo :: Valantalai -> Valantalai -> [Valantalai]
$cenumFromTo :: Valantalai -> Valantalai -> [Valantalai]
enumFromThen :: Valantalai -> Valantalai -> [Valantalai]
$cenumFromThen :: Valantalai -> Valantalai -> [Valantalai]
enumFrom :: Valantalai -> [Valantalai]
$cenumFrom :: Valantalai -> [Valantalai]
fromEnum :: Valantalai -> Int
$cfromEnum :: Valantalai -> Int
toEnum :: Int -> Valantalai
$ctoEnum :: Int -> Valantalai
pred :: Valantalai -> Valantalai
$cpred :: Valantalai -> Valantalai
succ :: Valantalai -> Valantalai
$csucc :: Valantalai -> Valantalai
Enum, Valantalai
forall a. a -> a -> Bounded a
maxBound :: Valantalai
$cmaxBound :: Valantalai
minBound :: Valantalai
$cminBound :: Valantalai
Bounded)

data Tha = Palm -- ^ standard tha
    | Fingertips -- ^ touch with fingertips
    | Fingers -- ^ flat of the fingers
    deriving (Tha -> Tha -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Tha -> Tha -> Bool
$c/= :: Tha -> Tha -> Bool
== :: Tha -> Tha -> Bool
$c== :: Tha -> Tha -> Bool
Eq, Eq Tha
Tha -> Tha -> Bool
Tha -> Tha -> Ordering
Tha -> Tha -> Tha
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Tha -> Tha -> Tha
$cmin :: Tha -> Tha -> Tha
max :: Tha -> Tha -> Tha
$cmax :: Tha -> Tha -> Tha
>= :: Tha -> Tha -> Bool
$c>= :: Tha -> Tha -> Bool
> :: Tha -> Tha -> Bool
$c> :: Tha -> Tha -> Bool
<= :: Tha -> Tha -> Bool
$c<= :: Tha -> Tha -> Bool
< :: Tha -> Tha -> Bool
$c< :: Tha -> Tha -> Bool
compare :: Tha -> Tha -> Ordering
$ccompare :: Tha -> Tha -> Ordering
Ord, Int -> Tha -> ShowS
[Tha] -> ShowS
Tha -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Tha] -> ShowS
$cshowList :: [Tha] -> ShowS
show :: Tha -> String
$cshow :: Tha -> String
showsPrec :: Int -> Tha -> ShowS
$cshowsPrec :: Int -> Tha -> ShowS
Show)

data Thom =
    Low -- ^ This could be either normal open stroke, or gumiki low stroke.
    | Up -- ^ gumiki up
    deriving (Thom -> Thom -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Thom -> Thom -> Bool
$c/= :: Thom -> Thom -> Bool
== :: Thom -> Thom -> Bool
$c== :: Thom -> Thom -> Bool
Eq, Eq Thom
Thom -> Thom -> Bool
Thom -> Thom -> Ordering
Thom -> Thom -> Thom
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Thom -> Thom -> Thom
$cmin :: Thom -> Thom -> Thom
max :: Thom -> Thom -> Thom
$cmax :: Thom -> Thom -> Thom
>= :: Thom -> Thom -> Bool
$c>= :: Thom -> Thom -> Bool
> :: Thom -> Thom -> Bool
$c> :: Thom -> Thom -> Bool
<= :: Thom -> Thom -> Bool
$c<= :: Thom -> Thom -> Bool
< :: Thom -> Thom -> Bool
$c< :: Thom -> Thom -> Bool
compare :: Thom -> Thom -> Ordering
$ccompare :: Thom -> Thom -> Ordering
Ord, Int -> Thom -> ShowS
[Thom] -> ShowS
Thom -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Thom] -> ShowS
$cshowList :: [Thom] -> ShowS
show :: Thom -> String
$cshow :: Thom -> String
showsPrec :: Int -> Thom -> ShowS
$cshowsPrec :: Int -> Thom -> ShowS
Show)

-- * strokes

instance Solkattu.Notation Stroke where
    notation :: Stroke -> (Style, Text)
notation (Thoppi Thoppi
t) = forall a. Notation a => a -> (Style, Text)
Solkattu.notation Thoppi
t
    notation (Valantalai Valantalai
v) = forall a. Notation a => a -> (Style, Text)
Solkattu.notation Valantalai
v
    notation (Both Thoppi
t Valantalai
v) = Text -> (Style, Text)
Solkattu.textNotation forall a b. (a -> b) -> a -> b
$ case Thoppi
t of
        -- The convention is that thom & x is written as X.  That leaves
        -- tha & x.  I can't think of any systematic ascii transformation for x
        -- so I use a unicode overline thing.  However, p&k and p&t are pretty
        -- common, so I have irregular ad-hoc P and X for them.
        Tha Tha
_ -> case Valantalai
v of
            Valantalai
Ki -> Text
"P"
            Valantalai
Ta -> Text
"X"
            -- Hopefully this is big enough to not look like screen gunk, but
            -- small enough to not be too distracting or make the original
            -- character unreadable.
            Valantalai
_ -> forall a. Notation a => a -> Text
Solkattu.notationText Valantalai
v forall a. Semigroup a => a -> a -> a
<> Text
overline
        Thom Thom
Low -> case Valantalai
v of
            -- These are symbols, so they have no uppercase.
            Valantalai
Kin -> Text
"o" forall a. Semigroup a => a -> a -> a
<> Text
cedillaBelow
            Valantalai
Mi -> Text
"o" forall a. Semigroup a => a -> a -> a
<> Text
dotBelow
            Valantalai
Tan -> Text
"ô"
            Valantalai
_ -> Text -> Text
Text.toUpper (forall a. Notation a => a -> Text
Solkattu.notationText Valantalai
v)
        Thom Thom
Up -> forall a. Notation a => a -> Text
Solkattu.notationText (Thom -> Thoppi
Thom Thom
Up)
        Thoppi
Gum -> Text
"/"

instance Pretty Stroke where pretty :: Stroke -> Text
pretty = forall a. Notation a => a -> Text
Solkattu.notationText

-- COMBINING CEDILLA
cedillaBelow :: Text
cedillaBelow :: Text
cedillaBelow = Text
"\x0327"

-- COMBINING DOT BELOW
dotBelow :: Text
dotBelow :: Text
dotBelow = Text
"\x0323"

-- COMBINING OVERLINE
overline :: Text
overline :: Text
overline = Text
"\x0305"

instance Solkattu.Notation Thoppi where
    notation :: Thoppi -> (Style, Text)
notation = Text -> (Style, Text)
Solkattu.textNotation forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
        Thom Thom
Low -> Text
"o"
        Thom Thom
Up -> Text
"ó"
        Tha Tha
_ -> Text
"p"
        Thoppi
Gum -> Text
"/"

instance Solkattu.Notation Valantalai where
    notation :: Valantalai -> (Style, Text)
notation = Text -> (Style, Text)
Solkattu.textNotation forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
        Valantalai
Ki -> Text
"k"
        Valantalai
Ta -> Text
"t"
        Valantalai
Mi -> Text
"."
        Valantalai
Nam -> Text
"n"
        Valantalai
Din -> Text
"d"
        Valantalai
AraiChapu -> Text
"u"
        Valantalai
MuruChapu -> Text
"v"
        Valantalai
Dheem -> Text
"i"
        Valantalai
Kin -> Text
","
        Valantalai
Tan -> Text
"^"

ganeshNotationThoppi :: Thoppi -> Text
ganeshNotationThoppi :: Thoppi -> Text
ganeshNotationThoppi = \case
    Thom Thom
Low -> Text
"d"
    Thom Thom
Up -> Text
"d"
    Tha Tha
_ -> Text
"h"
    Thoppi
Gum -> Text
"?"

ganeshNotationValantalai :: Valantalai -> Text
ganeshNotationValantalai :: Valantalai -> Text
ganeshNotationValantalai = \case
    Valantalai
Ki -> Text
"k"
    Valantalai
Ta -> Text
"t"
    Valantalai
Mi -> Text
"?"
    Valantalai
Nam -> Text
"n"
    Valantalai
Din -> Text
"i"
    Valantalai
AraiChapu -> Text
"l"
    Valantalai
MuruChapu -> Text
"l"
    Valantalai
Dheem -> Text
"?"
    Valantalai
Kin -> Text
","
    Valantalai
Tan -> Text
"^"

instance Pretty Thoppi where pretty :: Thoppi -> Text
pretty = forall a. Notation a => a -> Text
Solkattu.notationText
instance Pretty Valantalai where pretty :: Valantalai -> Text
pretty = forall a. Notation a => a -> Text
Solkattu.notationText

-- | Pretty reproduces the "Derive.Solkattu.Dsl" syntax, which has to be
-- haskell syntax, so it can't use +, and I have to put thoppi first to avoid
-- the keyword @do@.  It would be nice if I could make the tracklang syntax
-- consistent, but maybe not a huge deal at the moment.
instance Expr.ToExpr Stroke where
    to_expr :: Stroke -> Expr MiniVal
to_expr Stroke
s = forall val. Symbol -> Expr val
Expr.generator0 forall a b. (a -> b) -> a -> b
$ Text -> Symbol
Expr.Symbol forall a b. (a -> b) -> a -> b
$ case Stroke
s of
        Thoppi Thoppi
t -> forall {a}. IsString a => Thoppi -> a
thoppi Thoppi
t
        Valantalai Valantalai
v -> forall a. Notation a => a -> Text
Solkattu.notationText Valantalai
v
        Both Thoppi
t Valantalai
v -> forall {a}. IsString a => Thoppi -> a
thoppi Thoppi
t forall a. Semigroup a => a -> a -> a
<> forall a. Notation a => a -> Text
Solkattu.notationText Valantalai
v
        where
        thoppi :: Thoppi -> a
thoppi Thoppi
t = case Thoppi
t of
            Thom Thom
Low -> a
"o"
            Thom Thom
Up -> a
"o/"
            Tha Tha
_ -> a
"+"
            Thoppi
Gum -> a
"/"

instance Expr.ToExpr (Realize.Stroke Stroke) where
    to_expr :: Stroke Stroke -> Expr MiniVal
to_expr (Realize.Stroke Emphasis
emphasis Stroke
stroke) = case (Emphasis
emphasis, Stroke
stroke) of
        (Emphasis
Realize.Normal, Stroke
_) -> forall a. ToExpr a => a -> Expr MiniVal
Expr.to_expr Stroke
stroke
        (Emphasis
Realize.Light, Thoppi (Thom Thom
Low)) -> Expr MiniVal
"."
        (Emphasis
Realize.Light, Thoppi (Tha Tha
_)) -> Expr MiniVal
"-"
        (Emphasis
Realize.Heavy, Thoppi (Tha Tha
_)) -> Expr MiniVal
"*"
        (Emphasis
Realize.Light, Stroke
_) -> forall a. ToExpr a => Symbol -> a -> Expr MiniVal
Expr.with Symbol
Symbols.weak Stroke
stroke
        (Emphasis
Realize.Heavy, Stroke
_) -> forall a. ToExpr a => Symbol -> a -> Expr MiniVal
Expr.with Symbol
Symbols.accent Stroke
stroke

data Strokes a = Strokes {
    forall a. Strokes a -> a
k :: a, forall a. Strokes a -> a
t :: a
    , forall a. Strokes a -> a
l :: a
    , forall a. Strokes a -> a
n :: a, forall a. Strokes a -> a
d :: a, forall a. Strokes a -> a
u :: a, forall a. Strokes a -> a
v :: a, forall a. Strokes a -> a
i :: a
    -- | Mnemonic: y = kin = , uses 3 fingers, j = tan = ^ uses 1.
    , forall a. Strokes a -> a
y :: a, forall a. Strokes a -> a
j :: a
    , forall a. Strokes a -> a
p :: a, forall a. Strokes a -> a
p' :: a
    , forall a. Strokes a -> a
o :: a, forall a. Strokes a -> a
o' :: a -- ^ gumiki up
    , forall a. Strokes a -> a
_' :: a -- Gum
    -- | @do@ would match score notation, but @do@ is a keyword.  Ultimately
    -- that's because score uses + for tha, and +o is an attr, while o+ is
    -- a bareword.  But perhaps I should change + to p in the score, and then
    -- the left hand can go on the left side?
    , forall a. Strokes a -> a
od :: a
    -- Less common combinations can use (&).
    } deriving (forall a b. a -> Strokes b -> Strokes a
forall a b. (a -> b) -> Strokes a -> Strokes b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> Strokes b -> Strokes a
$c<$ :: forall a b. a -> Strokes b -> Strokes a
fmap :: forall a b. (a -> b) -> Strokes a -> Strokes b
$cfmap :: forall a b. (a -> b) -> Strokes a -> Strokes b
Functor, Int -> Strokes a -> ShowS
forall a. Show a => Int -> Strokes a -> ShowS
forall a. Show a => [Strokes a] -> ShowS
forall a. Show a => Strokes a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Strokes a] -> ShowS
$cshowList :: forall a. Show a => [Strokes a] -> ShowS
show :: Strokes a -> String
$cshow :: forall a. Show a => Strokes a -> String
showsPrec :: Int -> Strokes a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Strokes a -> ShowS
Show)

strokes :: Strokes Stroke
strokes :: Strokes Stroke
strokes = Strokes
    { k :: Stroke
k = Valantalai -> Stroke
Valantalai Valantalai
Ki
    , t :: Stroke
t = Valantalai -> Stroke
Valantalai Valantalai
Ta
    , l :: Stroke
l = Valantalai -> Stroke
Valantalai Valantalai
Mi
    , n :: Stroke
n = Valantalai -> Stroke
Valantalai Valantalai
Nam
    , d :: Stroke
d = Valantalai -> Stroke
Valantalai Valantalai
Din
    , u :: Stroke
u = Valantalai -> Stroke
Valantalai Valantalai
AraiChapu
    , v :: Stroke
v = Valantalai -> Stroke
Valantalai Valantalai
MuruChapu
    , i :: Stroke
i = Valantalai -> Stroke
Valantalai Valantalai
Dheem
    , y :: Stroke
y = Valantalai -> Stroke
Valantalai Valantalai
Kin
    , j :: Stroke
j = Valantalai -> Stroke
Valantalai Valantalai
Tan
    , p :: Stroke
p = Thoppi -> Stroke
Thoppi (Tha -> Thoppi
Tha Tha
Palm)
    , p' :: Stroke
p' = Thoppi -> Stroke
Thoppi (Tha -> Thoppi
Tha Tha
Fingertips)
    , o :: Stroke
o = Thoppi -> Stroke
Thoppi (Thom -> Thoppi
Thom Thom
Low)
    , o' :: Stroke
o' = Thoppi -> Stroke
Thoppi (Thom -> Thoppi
Thom Thom
Up)
    , _' :: Stroke
_' = Thoppi -> Stroke
Thoppi Thoppi
Gum
    , od :: Stroke
od = Thoppi -> Valantalai -> Stroke
Both (Thom -> Thoppi
Thom Thom
Low) Valantalai
Din
    }

notes :: Strokes (S.Sequence g (Solkattu.Note (Realize.Stroke Stroke)))
notes :: forall g. Strokes (Sequence g (Note (Stroke Stroke)))
notes = forall stroke g. stroke -> Sequence g (Note (Stroke stroke))
Realize.strokeToSequence forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Strokes Stroke
strokes

type SequenceR = S.Sequence () (Realize.Note Stroke)

rnotes :: Strokes SequenceR
rnotes :: Strokes (Sequence () (Note Stroke))
rnotes = forall g a. Note g a -> Sequence g a
S.singleton forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall g a. a -> Note g a
S.Note forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall stroke. Stroke stroke -> Note stroke
Realize.Note forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall stroke. stroke -> Stroke stroke
Realize.stroke forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Strokes Stroke
strokes

bothRStrokes :: CallStack.Stack => Realize.Stroke Stroke
    -> Realize.Stroke Stroke -> Realize.Stroke Stroke
bothRStrokes :: Stack => Stroke Stroke -> Stroke Stroke -> Stroke Stroke
bothRStrokes (Realize.Stroke Emphasis
em1 Stroke
s1) (Realize.Stroke Emphasis
em2 Stroke
s2) =
    forall stroke. Emphasis -> stroke -> Stroke stroke
Realize.Stroke (Emphasis
em1 forall a. Semigroup a => a -> a -> a
<> Emphasis
em2) (Stack => Stroke -> Stroke -> Stroke
bothStrokes Stroke
s1 Stroke
s2)

bothStrokes :: CallStack.Stack => Stroke -> Stroke -> Stroke
bothStrokes :: Stack => Stroke -> Stroke -> Stroke
bothStrokes (Thoppi Thoppi
a) (Valantalai Valantalai
b) = Thoppi -> Valantalai -> Stroke
Both Thoppi
a Valantalai
b
bothStrokes (Valantalai Valantalai
b) (Thoppi Thoppi
a) = Thoppi -> Valantalai -> Stroke
Both Thoppi
a Valantalai
b
bothStrokes Stroke
a Stroke
b =
    forall a. Stack => Text -> a
Solkattu.throw forall a b. (a -> b) -> a -> b
$ Text
"requires thoppi & valantalai: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> Text
showt (Stroke
a, Stroke
b)

val :: Stroke -> Maybe Valantalai
val :: Stroke -> Maybe Valantalai
val (Valantalai Valantalai
s) = forall a. a -> Maybe a
Just Valantalai
s
val (Both Thoppi
_ Valantalai
s) = forall a. a -> Maybe a
Just Valantalai
s
val (Thoppi Thoppi
_) = forall a. Maybe a
Nothing

setVal :: Valantalai -> Stroke -> Stroke
setVal :: Valantalai -> Stroke -> Stroke
setVal Valantalai
v (Valantalai Valantalai
_) = Valantalai -> Stroke
Valantalai Valantalai
v
setVal Valantalai
v (Both Thoppi
t Valantalai
_) = Thoppi -> Valantalai -> Stroke
Both Thoppi
t Valantalai
v
setVal Valantalai
_ (Thoppi Thoppi
t) = Thoppi -> Stroke
Thoppi Thoppi
t

thoppi :: Stroke -> Maybe Thoppi
thoppi :: Stroke -> Maybe Thoppi
thoppi (Thoppi Thoppi
s) = forall a. a -> Maybe a
Just Thoppi
s
thoppi (Both Thoppi
s Valantalai
_) = forall a. a -> Maybe a
Just Thoppi
s
thoppi (Valantalai Valantalai
_) = forall a. Maybe a
Nothing

setThoppi :: Thoppi -> Stroke -> Stroke
setThoppi :: Thoppi -> Stroke -> Stroke
setThoppi Thoppi
_ (Valantalai Valantalai
v) = Valantalai -> Stroke
Valantalai Valantalai
v
setThoppi Thoppi
t (Both Thoppi
_ Valantalai
v) = Thoppi -> Valantalai -> Stroke
Both Thoppi
t Valantalai
v
setThoppi Thoppi
t (Thoppi Thoppi
_) = Thoppi -> Stroke
Thoppi Thoppi
t

addThoppi :: Thoppi -> Stroke -> Stroke
addThoppi :: Thoppi -> Stroke -> Stroke
addThoppi Thoppi
t (Valantalai Valantalai
v) = Thoppi -> Valantalai -> Stroke
Both Thoppi
t Valantalai
v
addThoppi Thoppi
t (Both Thoppi
_ Valantalai
v) = Thoppi -> Valantalai -> Stroke
Both Thoppi
t Valantalai
v
addThoppi Thoppi
t (Thoppi Thoppi
_) = Thoppi -> Stroke
Thoppi Thoppi
t

-- * fromString

fromString :: String -> Either Text [Maybe Stroke]
fromString :: String -> Either Text [Maybe Stroke]
fromString = forall (m :: * -> *) a b.
Monad m =>
(a -> m (Maybe b)) -> [a] -> m [b]
mapMaybeM Char -> Either Text (Maybe (Maybe Stroke))
parse
    where
    parse :: Char -> Either Text (Maybe (Maybe Stroke))
parse Char
c = case Char
c of
        Char
' ' -> forall a b. b -> Either a b
Right forall a. Maybe a
Nothing
        Char
'_' -> forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall a. a -> Maybe a
Just forall a. Maybe a
Nothing
        Char
_ -> case forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup Char
c Map Char Stroke
notations of
            Maybe Stroke
Nothing -> forall a b. a -> Either a b
Left forall a b. (a -> b) -> a -> b
$ Text
"unknown mridangam stroke: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> Text
showt Char
c
            Just Stroke
s -> forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall a. a -> Maybe a
Just Stroke
s

notations :: Map Char Stroke
notations :: Map Char Stroke
notations = forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList forall a b. (a -> b) -> a -> b
$ ([(Char, Stroke)]
extras++) forall a b. (a -> b) -> a -> b
$ forall a a2 b. (a -> Maybe a2) -> [(a, b)] -> [(a2, b)]
Lists.mapMaybeFst Text -> Maybe Char
isChar forall a b. (a -> b) -> a -> b
$
    forall a k. (a -> k) -> [a] -> [(k, a)]
Lists.keyOn forall a. Notation a => a -> Text
Solkattu.notationText forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
        [ forall a b. (a -> b) -> [a] -> [b]
map Thoppi -> Stroke
Thoppi ([Thoppi]
lhs forall a. [a] -> [a] -> [a]
++ [Thom -> Thoppi
Thom Thom
Up, Thoppi
Gum])
        , forall a b. (a -> b) -> [a] -> [b]
map Valantalai -> Stroke
Valantalai [Valantalai]
rhs
        -- Omit little strokes, they're probably inaudible on Both anyway.
        , [Thoppi -> Valantalai -> Stroke
Both Thoppi
lh Valantalai
rh | Thoppi
lh <- [Thoppi]
lhs, Valantalai
rh <- [Valantalai]
rhs, Valantalai
rh forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Valantalai
Mi, Valantalai
Kin, Valantalai
Tan]]
        ]
    where
    -- Two ways to write these.
    extras :: [(Char, Stroke)]
extras =
        [ (Char
'y', forall a. Strokes a -> a
y Strokes Stroke
strokes)
        , (Char
'j', forall a. Strokes a -> a
j Strokes Stroke
strokes)
        , (Char
'l', forall a. Strokes a -> a
l Strokes Stroke
strokes)
        ]
    isChar :: Text -> Maybe Char
isChar Text
t = case Text -> String
untxt Text
t of
        [Char
c] -> forall a. a -> Maybe a
Just Char
c
        String
_ -> forall a. Maybe a
Nothing
    lhs :: [Thoppi]
lhs = [Tha -> Thoppi
Tha Tha
Palm, Thom -> Thoppi
Thom Thom
Low]
    rhs :: [Valantalai]
rhs = [forall a. Bounded a => a
minBound .. ]

printNotations :: IO ()
printNotations :: IO ()
printNotations = forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ String -> IO ()
putStrLn
    [ [Char
k] forall a. Semigroup a => a -> a -> a
<> String
": " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show Stroke
v
    | (Char
k, Stroke
v) <- forall b a. Ord b => (a -> b) -> [a] -> [a]
List.sortOn forall a b. (a, b) -> b
snd (forall k a. Map k a -> [(k, a)]
Map.toList Map Char Stroke
notations)
    ]

-- * postprocess

postprocess :: [Technique.Flat Stroke] -> [Technique.Flat Stroke]
postprocess :: [Flat Stroke] -> [Flat Stroke]
postprocess = forall stroke.
Technique (Stroke stroke) -> [Flat stroke] -> [Flat stroke]
Technique.postprocess forall a b. (a -> b) -> a -> b
$ forall stroke. Technique stroke -> Technique (Stroke stroke)
Technique.plain Technique Stroke
technique

technique :: Technique.Technique Stroke
technique :: Technique Stroke
technique [Stroke]
prevs Stroke
cur (Stroke
next:[Stroke]
_)
    -- There are extended analogues of this, e.g.:
    -- [on, k] to [k, on, k] -> on [k, on, ..]
    -- But to apply it I'd have to extend from ktk to ntn, and also to apply
    -- across intervening 'k's, so no need until I see more examples.
    | Int -> ([Stroke], Stroke, Stroke)
prev Int
1 forall a. Eq a => a -> a -> Bool
== ([Stroke
k], Stroke
t, Stroke
k) = forall a. a -> Maybe a
Just Stroke
k
    | Int -> ([Stroke], Stroke, Stroke)
prev Int
1 forall a. Eq a => a -> a -> Bool
== ([Stroke
k], Stroke
pStroke -> Stroke -> Stroke
&Stroke
t, Stroke
k) = forall a. a -> Maybe a
Just (Stroke
pStroke -> Stroke -> Stroke
&Stroke
k)
    -- Sometimes this happens but sometimes not.  I guess if it matters, I'll
    -- want a way to opt in to specific techniques.
    | Int -> ([Stroke], Stroke, Stroke)
prev Int
2 forall a. Eq a => a -> a -> Bool
== ([Stroke
k, Stroke
o], Stroke
o, Stroke
k) = forall a. a -> Maybe a
Just Stroke
p
    where
    prev :: Int -> ([Stroke], Stroke, Stroke)
prev Int
n = (forall a. Int -> [a] -> [a]
Lists.takeEnd Int
n [Stroke]
prevs, Stroke
cur, Stroke
next)
    Strokes {Stroke
od :: Stroke
_' :: Stroke
o' :: Stroke
p' :: Stroke
j :: Stroke
y :: Stroke
i :: Stroke
v :: Stroke
u :: Stroke
d :: Stroke
n :: Stroke
l :: Stroke
o :: Stroke
p :: Stroke
t :: Stroke
k :: Stroke
od :: forall a. Strokes a -> a
_' :: forall a. Strokes a -> a
o' :: forall a. Strokes a -> a
o :: forall a. Strokes a -> a
p' :: forall a. Strokes a -> a
p :: forall a. Strokes a -> a
j :: forall a. Strokes a -> a
y :: forall a. Strokes a -> a
i :: forall a. Strokes a -> a
v :: forall a. Strokes a -> a
u :: forall a. Strokes a -> a
d :: forall a. Strokes a -> a
n :: forall a. Strokes a -> a
l :: forall a. Strokes a -> a
t :: forall a. Strokes a -> a
k :: forall a. Strokes a -> a
..} = Strokes Stroke
strokes
    & :: Stroke -> Stroke -> Stroke
(&) = Stack => Stroke -> Stroke -> Stroke
bothStrokes
technique [Stroke]
_ Stroke
_ [Stroke]
_ = forall a. Maybe a
Nothing

-- * patterns

__ :: SequenceR
__ :: Sequence () (Note Stroke)
__ = forall g a. Note g a -> Sequence g a
S.singleton forall stroke. SNote stroke
Realize.rest

defaultPatterns :: Realize.PatternMap Stroke
defaultPatterns :: PatternMap Stroke
defaultPatterns = forall a. Stack => Either Text a -> a
Solkattu.check forall a b. (a -> b) -> a -> b
$ [(Int, Sequence () (Note Stroke))]
-> Either Text (PatternMap Stroke)
patterns
    [ (Int
5, Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o)
    , (Int
6, Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o)
    , (Int
7, Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o)
    , (Int
8, Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o)
    , (Int
9, Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o)
    ]
    where
    Strokes {Sequence () (Note Stroke)
od :: Sequence () (Note Stroke)
_' :: Sequence () (Note Stroke)
o' :: Sequence () (Note Stroke)
p' :: Sequence () (Note Stroke)
p :: Sequence () (Note Stroke)
j :: Sequence () (Note Stroke)
y :: Sequence () (Note Stroke)
i :: Sequence () (Note Stroke)
v :: Sequence () (Note Stroke)
u :: Sequence () (Note Stroke)
d :: Sequence () (Note Stroke)
l :: Sequence () (Note Stroke)
o :: Sequence () (Note Stroke)
n :: Sequence () (Note Stroke)
t :: Sequence () (Note Stroke)
k :: Sequence () (Note Stroke)
od :: forall a. Strokes a -> a
_' :: forall a. Strokes a -> a
o' :: forall a. Strokes a -> a
o :: forall a. Strokes a -> a
p' :: forall a. Strokes a -> a
p :: forall a. Strokes a -> a
j :: forall a. Strokes a -> a
y :: forall a. Strokes a -> a
i :: forall a. Strokes a -> a
v :: forall a. Strokes a -> a
u :: forall a. Strokes a -> a
d :: forall a. Strokes a -> a
n :: forall a. Strokes a -> a
l :: forall a. Strokes a -> a
t :: forall a. Strokes a -> a
k :: forall a. Strokes a -> a
..} = Strokes (Sequence () (Note Stroke))
rnotes
    . :: Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
(.) = forall a. Semigroup a => a -> a -> a
(<>)

-- | Misc patterns I should figure out how to integrate some day.
misc :: [(S.Matra, SequenceR)]
misc :: [(Int, Sequence () (Note Stroke))]
misc =
    [ (Int
7, forall g a. Sequence g a -> Sequence g a
su forall a b. (a -> b) -> a -> b
$ forall a. Monoid a => [a] -> a
mconcat [Sequence () (Note Stroke)
k, Sequence () (Note Stroke)
__, Sequence () (Note Stroke)
__, Sequence () (Note Stroke)
t, Sequence () (Note Stroke)
__, Sequence () (Note Stroke)
__, Sequence () (Note Stroke)
k, Sequence () (Note Stroke)
__, Sequence () (Note Stroke)
__, Sequence () (Note Stroke)
n, Sequence () (Note Stroke)
__, Sequence () (Note Stroke)
__, Sequence () (Note Stroke)
o, Sequence () (Note Stroke)
__])
    ]
    where Strokes {Sequence () (Note Stroke)
od :: Sequence () (Note Stroke)
_' :: Sequence () (Note Stroke)
o' :: Sequence () (Note Stroke)
p' :: Sequence () (Note Stroke)
p :: Sequence () (Note Stroke)
j :: Sequence () (Note Stroke)
y :: Sequence () (Note Stroke)
i :: Sequence () (Note Stroke)
v :: Sequence () (Note Stroke)
u :: Sequence () (Note Stroke)
d :: Sequence () (Note Stroke)
l :: Sequence () (Note Stroke)
o :: Sequence () (Note Stroke)
n :: Sequence () (Note Stroke)
t :: Sequence () (Note Stroke)
k :: Sequence () (Note Stroke)
od :: forall a. Strokes a -> a
_' :: forall a. Strokes a -> a
o' :: forall a. Strokes a -> a
o :: forall a. Strokes a -> a
p' :: forall a. Strokes a -> a
p :: forall a. Strokes a -> a
j :: forall a. Strokes a -> a
y :: forall a. Strokes a -> a
i :: forall a. Strokes a -> a
v :: forall a. Strokes a -> a
u :: forall a. Strokes a -> a
d :: forall a. Strokes a -> a
n :: forall a. Strokes a -> a
l :: forall a. Strokes a -> a
t :: forall a. Strokes a -> a
k :: forall a. Strokes a -> a
..} = Strokes (Sequence () (Note Stroke))
rnotes

kt_kn_o :: Realize.PatternMap Stroke
kt_kn_o :: PatternMap Stroke
kt_kn_o = forall a. Stack => Either Text a -> a
Solkattu.check forall a b. (a -> b) -> a -> b
$ [(Int, Sequence () (Note Stroke))]
-> Either Text (PatternMap Stroke)
patterns
    [ (Int
5, Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o)
    , (Int
7, Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o)
    , (Int
9, Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o)
    ]
    where
    Strokes {Sequence () (Note Stroke)
od :: Sequence () (Note Stroke)
_' :: Sequence () (Note Stroke)
o' :: Sequence () (Note Stroke)
p' :: Sequence () (Note Stroke)
p :: Sequence () (Note Stroke)
j :: Sequence () (Note Stroke)
y :: Sequence () (Note Stroke)
i :: Sequence () (Note Stroke)
v :: Sequence () (Note Stroke)
u :: Sequence () (Note Stroke)
d :: Sequence () (Note Stroke)
l :: Sequence () (Note Stroke)
o :: Sequence () (Note Stroke)
n :: Sequence () (Note Stroke)
t :: Sequence () (Note Stroke)
k :: Sequence () (Note Stroke)
od :: forall a. Strokes a -> a
_' :: forall a. Strokes a -> a
o' :: forall a. Strokes a -> a
o :: forall a. Strokes a -> a
p' :: forall a. Strokes a -> a
p :: forall a. Strokes a -> a
j :: forall a. Strokes a -> a
y :: forall a. Strokes a -> a
i :: forall a. Strokes a -> a
v :: forall a. Strokes a -> a
u :: forall a. Strokes a -> a
d :: forall a. Strokes a -> a
n :: forall a. Strokes a -> a
l :: forall a. Strokes a -> a
t :: forall a. Strokes a -> a
k :: forall a. Strokes a -> a
..} = Strokes (Sequence () (Note Stroke))
rnotes
    . :: Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
(.) = forall a. Semigroup a => a -> a -> a
(<>)

fives :: [SequenceR]
fives :: [Sequence () (Note Stroke)]
fives =
    [ Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.forall g a. Sequence g a -> Sequence g a
su (Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
t)Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
    , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.forall g a. Sequence g a -> Sequence g a
su (Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
t)Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
    ]
    where
    Strokes {Sequence () (Note Stroke)
od :: Sequence () (Note Stroke)
_' :: Sequence () (Note Stroke)
o' :: Sequence () (Note Stroke)
p' :: Sequence () (Note Stroke)
p :: Sequence () (Note Stroke)
j :: Sequence () (Note Stroke)
y :: Sequence () (Note Stroke)
i :: Sequence () (Note Stroke)
v :: Sequence () (Note Stroke)
u :: Sequence () (Note Stroke)
d :: Sequence () (Note Stroke)
n :: Sequence () (Note Stroke)
l :: Sequence () (Note Stroke)
o :: Sequence () (Note Stroke)
t :: Sequence () (Note Stroke)
k :: Sequence () (Note Stroke)
od :: forall a. Strokes a -> a
_' :: forall a. Strokes a -> a
o' :: forall a. Strokes a -> a
o :: forall a. Strokes a -> a
p' :: forall a. Strokes a -> a
p :: forall a. Strokes a -> a
j :: forall a. Strokes a -> a
y :: forall a. Strokes a -> a
i :: forall a. Strokes a -> a
v :: forall a. Strokes a -> a
u :: forall a. Strokes a -> a
d :: forall a. Strokes a -> a
n :: forall a. Strokes a -> a
l :: forall a. Strokes a -> a
t :: forall a. Strokes a -> a
k :: forall a. Strokes a -> a
..} = Strokes (Sequence () (Note Stroke))
rnotes
    . :: Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
(.) = forall a. Semigroup a => a -> a -> a
(<>)

-- | Intense variations of sequences, usually on the 3rd time.  I don't have a
-- way to use these yet.
intense :: [SequenceR]
intense :: [Sequence () (Note Stroke)]
intense =
    [ Sequence () (Note Stroke)
iSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
    , Sequence () (Note Stroke)
iSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
iSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.forall g a. Sequence g a -> Sequence g a
su (Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
t)Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
    ]
    where
    Strokes {Sequence () (Note Stroke)
od :: Sequence () (Note Stroke)
_' :: Sequence () (Note Stroke)
o' :: Sequence () (Note Stroke)
p' :: Sequence () (Note Stroke)
p :: Sequence () (Note Stroke)
j :: Sequence () (Note Stroke)
y :: Sequence () (Note Stroke)
v :: Sequence () (Note Stroke)
u :: Sequence () (Note Stroke)
d :: Sequence () (Note Stroke)
l :: Sequence () (Note Stroke)
t :: Sequence () (Note Stroke)
o :: Sequence () (Note Stroke)
n :: Sequence () (Note Stroke)
k :: Sequence () (Note Stroke)
i :: Sequence () (Note Stroke)
od :: forall a. Strokes a -> a
_' :: forall a. Strokes a -> a
o' :: forall a. Strokes a -> a
o :: forall a. Strokes a -> a
p' :: forall a. Strokes a -> a
p :: forall a. Strokes a -> a
j :: forall a. Strokes a -> a
y :: forall a. Strokes a -> a
i :: forall a. Strokes a -> a
v :: forall a. Strokes a -> a
u :: forall a. Strokes a -> a
d :: forall a. Strokes a -> a
n :: forall a. Strokes a -> a
l :: forall a. Strokes a -> a
t :: forall a. Strokes a -> a
k :: forall a. Strokes a -> a
..} = Strokes (Sequence () (Note Stroke))
rnotes
    . :: Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
(.) = forall a. Semigroup a => a -> a -> a
(<>)

families567 :: [Realize.PatternMap Stroke]
families567 :: [PatternMap Stroke]
families567 = forall a b. (a -> b) -> [a] -> [b]
map forall a. Stack => Either Text a -> a
Solkattu.check forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map [(Int, Sequence () (Note Stroke))]
-> Either Text (PatternMap Stroke)
patterns forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map (forall a b. [a] -> [b] -> [(a, b)]
zip [Int
5..]) forall a b. (a -> b) -> a -> b
$
    [ Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
    , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
    , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
    ] forall a. a -> [a] -> [a]
: forall a b. (a -> b) -> [a] -> [b]
map (forall a b. (a -> b) -> [a] -> [b]
map forall g a. Sequence g a -> Sequence g a
su)
    [ [ Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      ]
    , [ Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      ]
    , [ Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
      , Sequence () (Note Stroke)
kpSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
      , Sequence () (Note Stroke)
kpnpSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
      ]
    , [ Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      , Sequence () (Note Stroke)
kpSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      , Sequence () (Note Stroke)
kpnpSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      ]
    , [ Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      , Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      ]
    , [ Sequence () (Note Stroke)
uSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      , Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
uSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
uSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
oSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__
      ]
    , [ Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
      , Sequence () (Note Stroke)
kpSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
      , Sequence () (Note Stroke)
kpnpSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
      ]
    , [ Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
odSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
      , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
odSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
      , Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
odSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
tSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
__Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
o
      ]
    ]
    where
    Strokes {Sequence () (Note Stroke)
_' :: Sequence () (Note Stroke)
o' :: Sequence () (Note Stroke)
p' :: Sequence () (Note Stroke)
j :: Sequence () (Note Stroke)
y :: Sequence () (Note Stroke)
i :: Sequence () (Note Stroke)
v :: Sequence () (Note Stroke)
d :: Sequence () (Note Stroke)
l :: Sequence () (Note Stroke)
od :: Sequence () (Note Stroke)
u :: Sequence () (Note Stroke)
p :: Sequence () (Note Stroke)
o :: Sequence () (Note Stroke)
n :: Sequence () (Note Stroke)
t :: Sequence () (Note Stroke)
k :: Sequence () (Note Stroke)
od :: forall a. Strokes a -> a
_' :: forall a. Strokes a -> a
o' :: forall a. Strokes a -> a
o :: forall a. Strokes a -> a
p' :: forall a. Strokes a -> a
p :: forall a. Strokes a -> a
j :: forall a. Strokes a -> a
y :: forall a. Strokes a -> a
i :: forall a. Strokes a -> a
v :: forall a. Strokes a -> a
u :: forall a. Strokes a -> a
d :: forall a. Strokes a -> a
n :: forall a. Strokes a -> a
l :: forall a. Strokes a -> a
t :: forall a. Strokes a -> a
k :: forall a. Strokes a -> a
..} = Strokes (Sequence () (Note Stroke))
rnotes
    . :: Sequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
(.) = forall a. Semigroup a => a -> a -> a
(<>)
    kp :: Sequence () (Note Stroke)
kp = Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
p
    kpnp :: Sequence () (Note Stroke)
kpnp = Sequence () (Note Stroke)
kSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
pSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
nSequence () (Note Stroke)
-> Sequence () (Note Stroke) -> Sequence () (Note Stroke)
.Sequence () (Note Stroke)
p

su :: S.Sequence g a -> S.Sequence g a
su :: forall g a. Sequence g a -> Sequence g a
su = forall g a. Note g a -> Sequence g a
S.singleton forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall g a. Int -> [Note g a] -> Note g a
S.changeSpeed Int
1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall g a. Sequence g a -> [Note g a]
S.toList

patterns :: [(S.Matra, SequenceR)]
    -> Either Realize.Error (Realize.PatternMap Stroke)
patterns :: [(Int, Sequence () (Note Stroke))]
-> Either Text (PatternMap Stroke)
patterns = forall stroke.
[(Pattern, Sequence () (Note stroke))]
-> Either Text (PatternMap stroke)
Realize.patternMap forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map (forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
first Int -> Pattern
Solkattu.pattern)