{-# OPTIONS_HADDOCK show-extensions #-}
{-# LANGUAGE NoImplicitPrelude, BangPatterns #-}

-- |
-- Module      :  Phladiprelio.Ukrainian.Melodics
-- Copyright   :  (c) OleksandrZhabenko 2021-2024
-- License     :  MIT
-- Maintainer  :  oleksandr.zhabenko@yahoo.com
--
-- Functions provide functionality of a musical instrument synthesizer or for Ukrainian speech synthesis
-- especially for poets, translators and writers. Is rewritten from the module Melodics.ByteString.Ukrainian.Arr
-- for optimization purposes.
-- Phonetic material is taken from the :
--
-- Solomija Buk, Ján Mačutek, Andrij Rovenchak. Some properties of
-- the Ukrainian writing system. [Electronic resource] https://arxiv.org/ftp/arxiv/papers/0802/0802.4198.pdf

module Phladiprelio.Ukrainian.Melodics (
  -- * Basic functions
  Sound8
  , FlowSound
  , convertToProperUkrainianI8WithTuples
  , convertToProperUkrainianI8
  , isUkrainianL
  , linkFileNameI8
  -- * Transformation functions
  , дзT
  , жT
  , дT
  , гT
  , зT
  , цT
  , чT
  , шT
  , фT
  , кT
  , пT
  , сT
  , тT
  , хT
  , сьT
  , нтT
  , стT
  , тьT
  , цьT
) where

import GHC.Base
import GHC.List
import GHC.Num ((-))
import Data.Maybe (fromJust)
import Data.Char
import GHC.Arr
import CaseBi.Arr
import Data.List (uncons)
import GHC.Int
import Phladiprelio.Ukrainian.Common2

-- | Is used to signify the optimization data type of 'Int8'.
type Sound8 = Int8

type FlowSound = [Sound8]

{-| The function that uses the following correspondence between the previous data type UZPP2 and the 'Sound8'.
See for more implementation information:
<https://oleksandr-zhabenko.github.io/uk/rhythmicity/PhLADiPreLiO.Eng.21.html#ability-to-use-your-own-durations-of-representations-of-sounds-or-phonetic-phenomena>

Starting from the version 0.6.0.0:

-2 -> 102
-1 -> 101
0 -> 100
-}
convertToProperUkrainianI8 :: String -> FlowSound
convertToProperUkrainianI8 :: String -> [Sound8]
convertToProperUkrainianI8 =
      let !tup1 :: Array Int (Sound8, Bool)
tup1 = (Int, Int) -> [(Sound8, Bool)] -> Array Int (Sound8, Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
13) [(Sound8
10,Bool
True),(Sound8
17,Bool
True),(Sound8
21,Bool
True),(Sound8
25,Bool
True),(Sound8
32,Bool
True),(Sound8
38,Bool
True),(Sound8
39,Bool
True),
              (Sound8
41,Bool
True),(Sound8
43,Bool
True),(Sound8
45,Bool
True),(Sound8
47,Bool
True),(Sound8
49,Bool
True),(Sound8
50,Bool
True),(Sound8
52,Bool
True)]
          !tup2 :: Array Int (Sound8, Bool)
tup2 = (Int, Int) -> [(Sound8, Bool)] -> Array Int (Sound8, Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
19) [(Sound8
10,Bool
True),(Sound8
15,Bool
True),(Sound8
17,Bool
True),(Sound8
19,Bool
True),(Sound8
21,Bool
True),(Sound8
25,Bool
True),(Sound8
28,Bool
True),
              (Sound8
30,Bool
True),(Sound8
32,Bool
True),(Sound8
34,Bool
True),(Sound8
36,Bool
True),(Sound8
38,Bool
True),(Sound8
39,Bool
True),(Sound8
41,Bool
True),(Sound8
43,Bool
True),(Sound8
45,Bool
True),(Sound8
47,Bool
True),
                (Sound8
49,Bool
True),(Sound8
50,Bool
True),(Sound8
52,Bool
True)]
          !tup3 :: Array Int (Sound8, Bool)
tup3 = (Int, Int) -> [(Sound8, Bool)] -> Array Int (Sound8, Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
13) [(Sound8
10,Bool
False),(Sound8
17,Bool
False),(Sound8
21,Bool
False),(Sound8
25,Bool
False),(Sound8
32,Bool
False),(Sound8
38,Bool
False),(Sound8
39,Bool
False),
                  (Sound8
41,Bool
False),(Sound8
43,Bool
False),(Sound8
45,Bool
False),(Sound8
47,Bool
False),(Sound8
49,Bool
False),(Sound8
50,Bool
False),(Sound8
52,Bool
False)]
          !tup4 :: Array Int (Sound8, Bool)
tup4 = (Int, Int) -> [(Sound8, Bool)] -> Array Int (Sound8, Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
5) [(Sound8
17,Bool
True),(Sound8
32,Bool
True),(Sound8
38,Bool
True),(Sound8
49,Bool
True),(Sound8
50,Bool
True),(Sound8
52,Bool
True)]
          !tup5 :: Array Int ([Sound8], Bool)
tup5 = (Int, Int) -> [([Sound8], Bool)] -> Array Int ([Sound8], Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
8) [([Sound8
17,Sound8
10],Bool
True),([Sound8
17,Sound8
25],Bool
True),([Sound8
32,Sound8
50],Bool
True),([Sound8
38,Sound8
7],Bool
True),([Sound8
49,Sound8
7],Bool
True),
              ([Sound8
49,Sound8
50],Bool
True),([Sound8
50,Sound8
7],Bool
True),([Sound8
50,Sound8
49],Bool
True),([Sound8
52,Sound8
21],Bool
True)]
          !tup6 :: Array Int ([Sound8], Sound8)
tup6 = (Int, Int) -> [([Sound8], Sound8)] -> Array Int ([Sound8], Sound8)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
8) [([Sound8
17,Sound8
10],Sound8
23),([Sound8
17,Sound8
25],Sound8
8),([Sound8
32,Sound8
50],Sound8
62),([Sound8
38,Sound8
7],Sound8
66),([Sound8
49,Sound8
7],Sound8
54), ([Sound8
49,Sound8
50],Sound8
63),
              ([Sound8
50,Sound8
7],Sound8
64),([Sound8
50,Sound8
49],Sound8
38),([Sound8
52,Sound8
21],Sound8
21)]
          !tup8 :: Array Int (Sound8, Bool)
tup8 = (Int, Int) -> [(Sound8, Bool)] -> Array Int (Sound8, Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
7) [(Sound8
8,Bool
True),(Sound8
10,Bool
True),(Sound8
15,Bool
True),(Sound8
17,Bool
True),(Sound8
19,Bool
True),(Sound8
21,Bool
True),(Sound8
23,Bool
True),(Sound8
25, Bool
True)]
          !tup9 :: Array Int ([Sound8], Bool)
tup9 = (Int, Int) -> [([Sound8], Bool)] -> Array Int ([Sound8], Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
10) [([Sound8
15,Sound8
7],Bool
True),([Sound8
17,Sound8
7],Bool
True),([Sound8
28,Sound8
7],Bool
True),([Sound8
30,Sound8
7],Bool
True),([Sound8
32,Sound8
7],Bool
True),([Sound8
36,Sound8
7],Bool
True),
              ([Sound8
38,Sound8
7],Bool
True),([Sound8
43,Sound8
7],Bool
True),([Sound8
47,Sound8
7],Bool
True),([Sound8
49,Sound8
7],Bool
True),([Sound8
50,Sound8
7],Bool
True)]
          !tup10 :: Array Int ([Sound8], Bool)
tup10 = (Int, Int) -> [([Sound8], Bool)] -> Array Int ([Sound8], Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
4) [([Sound8
12],Bool
True),([Sound8
13],Bool
True),([Sound8
14],Bool
True),([Sound8
64],Bool
True),([Sound8
65],Bool
True)]
          !tup11 :: Array Int ([Sound8], Bool)
tup11 = (Int, Int) -> [([Sound8], Bool)] -> Array Int ([Sound8], Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
7) [([Sound8
8,Sound8
7],Bool
True),([Sound8
17,Sound8
7],Bool
True),([Sound8
25,Sound8
7],Bool
True),([Sound8
28,Sound8
7],Bool
True),([Sound8
32,Sound8
7],Bool
True),([Sound8
38,Sound8
7],Bool
True),
              ([Sound8
49,Sound8
7],Bool
True),([Sound8
50,Sound8
7],Bool
True)]
          tup7 :: Array Int (Sound8, [Sound8] -> Sound8)
tup7 = (Int, Int)
-> [(Sound8, [Sound8] -> Sound8)]
-> Array Int (Sound8, [Sound8] -> Sound8)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
18) [(Sound8
8, Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Sound8
дзT Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10),(Sound8
10, [Sound8] -> Sound8
жT),(Sound8
17, [Sound8] -> Sound8
дT),(Sound8
21, [Sound8] -> Sound8
гT),(Sound8
25, Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Sound8
зT Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10),(Sound8
38, Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> Sound8
цT Array Int (Sound8, Bool)
tup8 Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10),
              (Sound8
39, [Sound8] -> Sound8
чT),(Sound8
41, [Sound8] -> Sound8
шT),(Sound8
43, [Sound8] -> Sound8
фT), (Sound8
45, [Sound8] -> Sound8
кT),(Sound8
47, [Sound8] -> Sound8
пT),(Sound8
49, Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> Sound8
сT Array Int (Sound8, Bool)
tup8 Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10),(Sound8
50, Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> Sound8
тT Array Int (Sound8, Bool)
tup8 Array Int ([Sound8], Bool)
tup11 Array Int ([Sound8], Bool)
tup10),
                (Sound8
52, [Sound8] -> Sound8
хT),(Sound8
54, [Sound8] -> Sound8
сьT),(Sound8
62, [Sound8] -> Sound8
нтT),(Sound8
63, [Sound8] -> Sound8
стT),(Sound8
64, [Sound8] -> Sound8
тьT),(Sound8
66, [Sound8] -> Sound8
цьT)]
          !tup12 :: Array Int (Sound8, [Sound8])
tup12 = (Int, Int) -> [(Sound8, [Sound8])] -> Array Int (Sound8, [Sound8])
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
6) [(Sound8
12,[Sound8
8,Sound8
7]),(Sound8
13,[Sound8
25,Sound8
7]),(Sound8
14,[Sound8
17,Sound8
7]),(Sound8
62,[Sound8
32,Sound8
50]),(Sound8
63,[Sound8
49,Sound8
50]),(Sound8
64,[Sound8
50,Sound8
7]), (Sound8
65,[Sound8
32,Sound8
7])]
          !tup13 :: Array Int (Char, Sound8)
tup13 = (Int, Int) -> [(Char, Sound8)] -> Array Int (Char, Sound8)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
36) [(Char
'\'',Sound8
102),(Char
'-',Sound8
101),(Char
'\700',Sound8
60),(Char
'\1072',Sound8
1),(Char
'\1073',Sound8
15),(Char
'\1074',Sound8
36),(Char
'\1075',Sound8
21),
              (Char
'\1076',Sound8
17),(Char
'\1077',Sound8
2),(Char
'\1078',Sound8
10),(Char
'\1079',Sound8
25),(Char
'\1080',Sound8
5),(Char
'\1081',Sound8
27),(Char
'\1082',Sound8
45),(Char
'\1083',Sound8
28),
                (Char
'\1084',Sound8
30),(Char
'\1085',Sound8
32),(Char
'\1086',Sound8
3),(Char
'\1087',Sound8
47),(Char
'\1088',Sound8
34),(Char
'\1089',Sound8
49),(Char
'\1090',Sound8
50),(Char
'\1091',Sound8
4),
                  (Char
'\1092',Sound8
43),(Char
'\1093',Sound8
52),(Char
'\1094',Sound8
38),(Char
'\1095',Sound8
39),(Char
'\1096',Sound8
41),(Char
'\1097',Sound8
55),(Char
'\1100',Sound8
7),(Char
'\1102',Sound8
56),
                    (Char
'\1103',Sound8
57),(Char
'\1108',Sound8
58),(Char
'\1110',Sound8
6),(Char
'\1111',Sound8
59),(Char
'\1169',Sound8
19),(Char
'\8217',Sound8
61)]
          !tup14 :: Array Int (Sound8, [Sound8])
tup14 = (Int, Int) -> [(Sound8, [Sound8])] -> Array Int (Sound8, [Sound8])
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
8) [(Sound8
55,[Sound8
41,Sound8
39]),(Sound8
56,[Sound8
27,Sound8
4]),(Sound8
57,[Sound8
27,Sound8
1]),(Sound8
58,[Sound8
27,Sound8
2]),(Sound8
59,[Sound8
27,Sound8
6]),
              (Sound8
60,[Sound8
101]),(Sound8
61,[Sound8
101]),(Sound8
101,[Sound8
101]),(Sound8
102,[Sound8
101])]
          !tup15 :: Array Int (Char, Bool)
tup15 = (Int, Int) -> [(Char, Bool)] -> Array Int (Char, Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
15) [(Char
'\'',Bool
True),(Char
'-',Bool
True),(Char
'\700',Bool
True),(Char
'\1028',Bool
True),(Char
'\1030',Bool
True),(Char
'\1031',Bool
True),
              (Char
'\1068',Bool
True),(Char
'\1100',Bool
True),(Char
'\1102',Bool
True),(Char
'\1103',Bool
True),(Char
'\1108',Bool
True),(Char
'\1110',Bool
True),(Char
'\1111',Bool
True),
                (Char
'\1168',Bool
True),(Char
'\1169',Bool
True),(Char
'\8217',Bool
True)]
          !tup16 :: Array Int (Char, Bool)
tup16 = (Int, Int) -> [(Char, Bool)] -> Array Int (Char, Bool)
forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
20) [(Char
'\1073',Bool
True),(Char
'\1074',Bool
True),(Char
'\1075',Bool
True),(Char
'\1076',Bool
True),(Char
'\1078',Bool
True),
              (Char
'\1079',Bool
True),(Char
'\1082',Bool
True),(Char
'\1083',Bool
True),(Char
'\1084',Bool
True),(Char
'\1085',Bool
True),(Char
'\1087',Bool
True),(Char
'\1088',Bool
True),
                (Char
'\1089',Bool
True),(Char
'\1090',Bool
True),(Char
'\1092',Bool
True),(Char
'\1093',Bool
True),(Char
'\1094',Bool
True),(Char
'\1095',Bool
True),(Char
'\1096',Bool
True),
                  (Char
'\1097',Bool
True),(Char
'\1169',Bool
True)] in
            [Sound8] -> [Sound8]
correctB ([Sound8] -> [Sound8])
-> (String -> [Sound8]) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Sound8, [Sound8]) -> [Sound8] -> [Sound8]
correctA Array Int (Sound8, [Sound8])
tup12 ([Sound8] -> [Sound8])
-> (String -> [Sound8]) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Sound8, [Sound8] -> Sound8) -> [Sound8] -> [Sound8]
applyChanges Array Int (Sound8, [Sound8] -> Sound8)
tup7 ([Sound8] -> [Sound8])
-> (String -> [Sound8]) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int ([Sound8], Sound8) -> [[Sound8]] -> [Sound8]
bsToCharUkr Array Int ([Sound8], Sound8)
tup6 ([[Sound8]] -> [Sound8])
-> (String -> [[Sound8]]) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
createTuplesByAnalysis Array Int (Sound8, Bool)
tup1 Array Int (Sound8, Bool)
tup2 Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 ([Sound8] -> [[Sound8]])
-> (String -> [Sound8]) -> String -> [[Sound8]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
              Array Int (Sound8, [Sound8]) -> [Sound8] -> [Sound8]
secondConv Array Int (Sound8, [Sound8])
tup14 ([Sound8] -> [Sound8])
-> (String -> [Sound8]) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Char, Sound8) -> String -> [Sound8]
filterUkr Array Int (Char, Sound8)
tup13 (String -> [Sound8]) -> (String -> String) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Char, Bool) -> String -> String
changeIotated Array Int (Char, Bool)
tup16 (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
                (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter (\Char
x -> Array Int (Char, Bool) -> Char -> Bool
isUkrainianLTup Array Int (Char, Bool)
tup15 Char
x Bool -> Bool -> Bool
|| Char -> Bool
isSpace Char
x Bool -> Bool -> Bool
|| Char -> Bool
isControl Char
x Bool -> Bool -> Bool
|| Char -> Bool
isPunctuation Char
x) (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toLower
{-# INLINE convertToProperUkrainianI8 #-}

{-| A full variant of the 'convertToProperUkrainianI8' function with all the elements for the 'getBFst'' function being
provided as 'Array' 'Int' (data tuple). Can be useful to reduce number of calculations in the complex usage scenarios.
-}
convertToProperUkrainianI8WithTuples
  :: Array Int (Int8, Bool)
     -> Array Int (Int8, Bool)
     -> Array Int (Int8, Bool)
     -> Array Int (Int8, Bool)
     -> Array Int ([Int8], Bool)
     -> Array Int ([Int8], Int8)
     -> Array Int (Int8, FlowSound -> Sound8)
     -> Array Int (Int8, Bool)
     -> Array Int ([Int8], Bool)
     -> Array Int ([Int8], Bool)
     -> Array Int ([Int8], Bool)
     -> Array Int (Int8, [Int8])
     -> Array Int (Char,Int8)
     -> Array Int (Int8,[Int8])
     -> Array Int (Char, Bool)
     -> Array Int (Char, Bool)
     -> [Char]
     -> FlowSound
convertToProperUkrainianI8WithTuples :: Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Sound8)
-> Array Int (Sound8, [Sound8] -> Sound8)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool)
-> Array Int (Sound8, [Sound8])
-> Array Int (Char, Sound8)
-> Array Int (Sound8, [Sound8])
-> Array Int (Char, Bool)
-> Array Int (Char, Bool)
-> String
-> [Sound8]
convertToProperUkrainianI8WithTuples !Array Int (Sound8, Bool)
tup1 !Array Int (Sound8, Bool)
tup2 !Array Int (Sound8, Bool)
tup3 !Array Int (Sound8, Bool)
tup4 !Array Int ([Sound8], Bool)
tup5 !Array Int ([Sound8], Sound8)
tup6 Array Int (Sound8, [Sound8] -> Sound8)
tup7 !Array Int (Sound8, Bool)
tup8 !Array Int ([Sound8], Bool)
tup9 !Array Int ([Sound8], Bool)
tup10 !Array Int ([Sound8], Bool)
tup11 !Array Int (Sound8, [Sound8])
tup12 !Array Int (Char, Sound8)
tup13 !Array Int (Sound8, [Sound8])
tup14 !Array Int (Char, Bool)
tup15 !Array Int (Char, Bool)
tup16 =
  [Sound8] -> [Sound8]
correctB ([Sound8] -> [Sound8])
-> (String -> [Sound8]) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Sound8, [Sound8]) -> [Sound8] -> [Sound8]
correctA Array Int (Sound8, [Sound8])
tup12 ([Sound8] -> [Sound8])
-> (String -> [Sound8]) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Sound8, [Sound8] -> Sound8) -> [Sound8] -> [Sound8]
applyChanges Array Int (Sound8, [Sound8] -> Sound8)
tup7 ([Sound8] -> [Sound8])
-> (String -> [Sound8]) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int ([Sound8], Sound8) -> [[Sound8]] -> [Sound8]
bsToCharUkr Array Int ([Sound8], Sound8)
tup6 ([[Sound8]] -> [Sound8])
-> (String -> [[Sound8]]) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
createTuplesByAnalysis Array Int (Sound8, Bool)
tup1 Array Int (Sound8, Bool)
tup2 Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 ([Sound8] -> [[Sound8]])
-> (String -> [Sound8]) -> String -> [[Sound8]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
    Array Int (Sound8, [Sound8]) -> [Sound8] -> [Sound8]
secondConv Array Int (Sound8, [Sound8])
tup14 ([Sound8] -> [Sound8])
-> (String -> [Sound8]) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Char, Sound8) -> String -> [Sound8]
filterUkr Array Int (Char, Sound8)
tup13 (String -> [Sound8]) -> (String -> String) -> String -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Char, Bool) -> String -> String
changeIotated Array Int (Char, Bool)
tup16 (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
      (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter (\Char
x -> Array Int (Char, Bool) -> Char -> Bool
isUkrainianLTup Array Int (Char, Bool)
tup15 Char
x Bool -> Bool -> Bool
|| Char -> Bool
isSpace Char
x Bool -> Bool -> Bool
|| Char -> Bool
isControl Char
x Bool -> Bool -> Bool
|| Char -> Bool
isPunctuation Char
x) (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toLower
{-# INLINE convertToProperUkrainianI8WithTuples #-}

changeIotated :: Array Int (Char,Bool) -> String -> String
changeIotated :: Array Int (Char, Bool) -> String -> String
changeIotated !Array Int (Char, Bool)
tup16 (Char
x:Char
y:String
zs)
  | (Char
y Char -> String -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` (String
"\1102\1103\1108\1110"::String)) Bool -> Bool -> Bool
&& Array Int (Char, Bool) -> Char -> Bool
isConsNotJTup Array Int (Char, Bool)
tup16 Char
x = Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:Char
'\1100'Char -> String -> String
forall a. a -> [a] -> [a]
:(case Char
y of { Char
'\1102' -> Char
'\1091' ; Char
'\1103' -> Char
'\1072' ; Char
'\1108' -> Char
'\1077' ; ~Char
r -> Char
'\1110' })Char -> String -> String
forall a. a -> [a] -> [a]
:Array Int (Char, Bool) -> String -> String
changeIotated Array Int (Char, Bool)
tup16 String
zs
  | Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\'' Bool -> Bool -> Bool
|| Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\x2019' Bool -> Bool -> Bool
|| Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\x02BC' Bool -> Bool -> Bool
|| Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-' = if (Char
y Char -> String -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` (String
"\1102\1103\1108\1110"::String)) then Char
'\1081'Char -> String -> String
forall a. a -> [a] -> [a]
:(case Char
y of { Char
'\1102' -> Char
'\1091' ; Char
'\1103' -> Char
'\1072' ; Char
'\1108' -> Char
'\1077' ; ~Char
r -> Char
'\1110' })Char -> String -> String
forall a. a -> [a] -> [a]
:Array Int (Char, Bool) -> String -> String
changeIotated Array Int (Char, Bool)
tup16 String
zs else Array Int (Char, Bool) -> String -> String
changeIotated Array Int (Char, Bool)
tup16 (Char
yChar -> String -> String
forall a. a -> [a] -> [a]
:String
zs)
  | Bool
otherwise = Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:Array Int (Char, Bool) -> String -> String
changeIotated Array Int (Char, Bool)
tup16 (Char
yChar -> String -> String
forall a. a -> [a] -> [a]
:String
zs)
changeIotated Array Int (Char, Bool)
_ String
xs = String
xs

filterUkr :: Array Int (Char,Int8) -> String -> FlowSound
filterUkr :: Array Int (Char, Sound8) -> String -> [Sound8]
filterUkr Array Int (Char, Sound8)
tup13 = let !tup :: (Sound8, Array Int (Char, Sound8))
tup = (Sound8
100, Array Int (Char, Sound8)
tup13) in (Char -> Sound8) -> String -> [Sound8]
forall a b. (a -> b) -> [a] -> [b]
map ((Sound8, Array Int (Char, Sound8)) -> Char -> Sound8
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Sound8, Array Int (Char, Sound8))
tup)
{-# INLINE filterUkr #-}

secondConv :: Array Int (Int8,[Int8]) -> FlowSound -> FlowSound
secondConv :: Array Int (Sound8, [Sound8]) -> [Sound8] -> [Sound8]
secondConv Array Int (Sound8, [Sound8])
tup14 = (Sound8 -> [Sound8]) -> [Sound8] -> [Sound8]
forall a b. (a -> [b]) -> [a] -> [b]
concatMap (\Sound8
y -> ([Sound8], Array Int (Sound8, [Sound8])) -> Sound8 -> [Sound8]
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' ([Sound8
y], Array Int (Sound8, [Sound8])
tup14) Sound8
y)
{-# INLINE secondConv #-}

createTuplesByAnalysis :: Array Int (Int8,Bool) -> Array Int (Int8,Bool) -> Array Int (Int8,Bool) -> Array Int (Int8,Bool) -> Array Int ([Int8],Bool) -> FlowSound -> [FlowSound]
createTuplesByAnalysis :: Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
createTuplesByAnalysis Array Int (Sound8, Bool)
tup1 Array Int (Sound8, Bool)
tup2 Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 x :: [Sound8]
x@(Sound8
h:[Sound8]
ta)
  | (Bool, Array Int (Sound8, Bool)) -> Sound8 -> Bool
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Bool
False, Array Int (Sound8, Bool)
tup1) Sound8
h = Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
initialA Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 [Sound8]
x
  | Bool -> Bool
not ([Sound8] -> Bool
forall a. [a] -> Bool
null [Sound8]
ta) Bool -> Bool -> Bool
&& ([Sound8] -> Sound8
forall a. HasCallStack => [a] -> a
head [Sound8]
ta Sound8 -> Sound8 -> Bool
forall a. Eq a => a -> a -> Bool
== Sound8
27 Bool -> Bool -> Bool
&& (Bool, Array Int (Sound8, Bool)) -> Sound8 -> Bool
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Bool
False, Array Int (Sound8, Bool)
tup2) Sound8
h) = [Sound8
h][Sound8] -> [[Sound8]] -> [[Sound8]]
forall a. a -> [a] -> [a]
:[Sound8
7][Sound8] -> [[Sound8]] -> [[Sound8]]
forall a. a -> [a] -> [a]
:Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
createTuplesByAnalysis Array Int (Sound8, Bool)
tup1 Array Int (Sound8, Bool)
tup2 Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 (Int -> [Sound8] -> [Sound8]
forall a. Int -> [a] -> [a]
drop Int
1 [Sound8]
ta)
  | Bool
otherwise = [Sound8
h][Sound8] -> [[Sound8]] -> [[Sound8]]
forall a. a -> [a] -> [a]
:Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
createTuplesByAnalysis Array Int (Sound8, Bool)
tup1 Array Int (Sound8, Bool)
tup2 Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 [Sound8]
ta
createTuplesByAnalysis Array Int (Sound8, Bool)
_ Array Int (Sound8, Bool)
_ Array Int (Sound8, Bool)
_ Array Int (Sound8, Bool)
_ Array Int ([Sound8], Bool)
_ [Sound8]
_ = []

initialA :: Array Int (Int8,Bool) -> Array Int (Int8,Bool) -> Array Int ([Int8],Bool) -> FlowSound -> [FlowSound]
initialA :: Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
initialA Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 t1 :: [Sound8]
t1@(Sound8
t:[Sound8]
ts)
  | Sound8
t Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
< Sound8
1 Bool -> Bool -> Bool
|| Sound8
t Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
> Sound8
99 = [Sound8
100][Sound8] -> [[Sound8]] -> [[Sound8]]
forall a. a -> [a] -> [a]
:Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
initialA Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 [Sound8]
ts
  | (Bool, Array Int (Sound8, Bool)) -> Sound8 -> Bool
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Bool
True, Array Int (Sound8, Bool)
tup3) Sound8
t = [Sound8
t][Sound8] -> [[Sound8]] -> [[Sound8]]
forall a. a -> [a] -> [a]
:Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
initialA Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 [Sound8]
ts
  | (Bool, Array Int (Sound8, Bool)) -> Sound8 -> Bool
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Bool
False, Array Int (Sound8, Bool)
tup4) Sound8
t =
     let ([Sound8]
us,[Sound8]
vs) = Int -> [Sound8] -> ([Sound8], [Sound8])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
2 [Sound8]
t1 in
       if (Bool, Array Int ([Sound8], Bool)) -> [Sound8] -> Bool
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Bool
False, Array Int ([Sound8], Bool)
tup5) [Sound8]
us
        then [Sound8]
us[Sound8] -> [[Sound8]] -> [[Sound8]]
forall a. a -> [a] -> [a]
:Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
initialA Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 [Sound8]
vs
        else [Sound8
t][Sound8] -> [[Sound8]] -> [[Sound8]]
forall a. a -> [a] -> [a]
:Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
initialA Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 [Sound8]
ts
  | Bool
otherwise = [Sound8
t][Sound8] -> [[Sound8]] -> [[Sound8]]
forall a. a -> [a] -> [a]
:Array Int (Sound8, Bool)
-> Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> [[Sound8]]
initialA Array Int (Sound8, Bool)
tup3 Array Int (Sound8, Bool)
tup4 Array Int ([Sound8], Bool)
tup5 [Sound8]
ts
initialA Array Int (Sound8, Bool)
_ Array Int (Sound8, Bool)
_ Array Int ([Sound8], Bool)
_ [Sound8]
_ = []

bsToCharUkr :: Array Int ([Int8],Int8) -> [FlowSound] -> FlowSound
bsToCharUkr :: Array Int ([Sound8], Sound8) -> [[Sound8]] -> [Sound8]
bsToCharUkr Array Int ([Sound8], Sound8)
tup6 zs :: [[Sound8]]
zs@([Sound8]
_:[[Sound8]]
_) = ([Sound8] -> Sound8) -> [[Sound8]] -> [Sound8]
forall a b. (a -> b) -> [a] -> [b]
map (Array Int ([Sound8], Sound8) -> [Sound8] -> Sound8
forall {b}. (Ord b, Num b) => Array Int ([b], b) -> [b] -> b
g Array Int ([Sound8], Sound8)
tup6) [[Sound8]]
zs
     where g :: Array Int ([b], b) -> [b] -> b
g Array Int ([b], b)
tup6 ts :: [b]
ts@(b
t:[b]
_) = (b, Array Int ([b], b)) -> [b] -> b
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (b
t, Array Int ([b], b)
tup6) [b]
ts
           g Array Int ([b], b)
_ [b]
_ = b
101
bsToCharUkr Array Int ([Sound8], Sound8)
_ [[Sound8]]
_ = []
{-# INLINE bsToCharUkr #-}

applyChanges
  :: Array Int (Int8,FlowSound -> Sound8)
  -> FlowSound
  -> FlowSound
applyChanges :: Array Int (Sound8, [Sound8] -> Sound8) -> [Sound8] -> [Sound8]
applyChanges Array Int (Sound8, [Sound8] -> Sound8)
tup7 [Sound8]
ys = (Sound8 -> [Sound8] -> [Sound8])
-> [Sound8] -> [Sound8] -> [Sound8]
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr Sound8 -> [Sound8] -> [Sound8]
f [Sound8]
forall a. [a]
v [Sound8]
ys
  where v :: [a]
v = []
        f :: Sound8 -> [Sound8] -> [Sound8]
f Sound8
x xs :: [Sound8]
xs@(Sound8
_:[Sound8]
_) = ([Sound8] -> Sound8, Array Int (Sound8, [Sound8] -> Sound8))
-> Sound8 -> [Sound8] -> Sound8
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (\[Sound8]
_ -> Sound8
x, Array Int (Sound8, [Sound8] -> Sound8)
tup7) Sound8
x [Sound8]
xsSound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:[Sound8]
xs
        f Sound8
x [Sound8]
_ = [Sound8
x]
{-# INLINE applyChanges #-}

isVoicedObstruent :: FlowSound -> Bool
isVoicedObstruent :: [Sound8] -> Bool
isVoicedObstruent (Sound8
x:[Sound8]
_) = Sound8
x Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
> Sound8
7 Bool -> Bool -> Bool
&& Sound8
x Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
< Sound8
27
isVoicedObstruent [Sound8]
_ = Bool
False
{-# INLINE isVoicedObstruent #-}

isVoicedObstruentH :: Array Int (Int8,Bool) -> FlowSound -> Bool
isVoicedObstruentH :: Array Int (Sound8, Bool) -> [Sound8] -> Bool
isVoicedObstruentH Array Int (Sound8, Bool)
tup8 (Sound8
x:[Sound8]
_) = (Bool, Array Int (Sound8, Bool)) -> Sound8 -> Bool
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Bool
False, Array Int (Sound8, Bool)
tup8) Sound8
x
isVoicedObstruentH Array Int (Sound8, Bool)
_ [Sound8]
_ = Bool
False
{-# INLINE isVoicedObstruentH #-}

isVoicedObstruentS :: FlowSound -> Bool
isVoicedObstruentS :: [Sound8] -> Bool
isVoicedObstruentS (Sound8
x:[Sound8]
_) = Sound8
x Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
> Sound8
11 Bool -> Bool -> Bool
&& Sound8
x Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
< Sound8
15
isVoicedObstruentS [Sound8]
_ = Bool
False
{-# INLINE isVoicedObstruentS #-}

isSoftDOrL :: Array Int ([Int8],Bool) -> Array Int ([Int8],Bool) -> FlowSound -> Bool
isSoftDOrL :: Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Bool
isSoftDOrL Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10 [Sound8]
xs = (Bool, Array Int ([Sound8], Bool)) -> [Sound8] -> Bool
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Bool
False, Array Int ([Sound8], Bool)
tup9) (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
xs) Bool -> Bool -> Bool
|| (Bool, Array Int ([Sound8], Bool)) -> [Sound8] -> Bool
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Bool
False, Array Int ([Sound8], Bool)
tup10) (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
xs)
{-# INLINE isSoftDOrL #-}

isSoftDen :: Array Int ([Int8],Bool) -> Array Int ([Int8],Bool) -> FlowSound -> Bool
isSoftDen :: Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Bool
isSoftDen Array Int ([Sound8], Bool)
tup11 Array Int ([Sound8], Bool)
tup10 [Sound8]
xs = (Bool, Array Int ([Sound8], Bool)) -> [Sound8] -> Bool
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Bool
False, Array Int ([Sound8], Bool)
tup11) (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
xs) Bool -> Bool -> Bool
|| (Bool, Array Int ([Sound8], Bool)) -> [Sound8] -> Bool
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' (Bool
False, Array Int ([Sound8], Bool)
tup10) (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
xs)
{-# INLINE isSoftDen #-}

гT :: FlowSound -> Sound8
гT :: [Sound8] -> Sound8
гT (Sound8
t:[Sound8]
_) | Sound8
t Sound8 -> Sound8 -> Bool
forall a. Eq a => a -> a -> Bool
== Sound8
45 Bool -> Bool -> Bool
|| Sound8
t Sound8 -> Sound8 -> Bool
forall a. Eq a => a -> a -> Bool
== Sound8
50 = Sound8
52 -- г х
         | Bool
otherwise = Sound8
21
гT [Sound8]
_ = Sound8
21
{-# INLINE гT #-}

дT :: FlowSound -> Sound8
дT :: [Sound8] -> Sound8
дT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
10],[Sound8
39],[Sound8
41]] = Sound8
23 --  д дж
            | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
49,Sound8
7],[Sound8
38,Sound8
7]] = Sound8
12 --  д дзь
            | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
54],[Sound8
66]] = Sound8
12 --  д дзь
            | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
25],[Sound8
49],[Sound8
38]] = Sound8
8 --   д дз
            | Bool
otherwise = Sound8
17
дT [Sound8]
_ = Sound8
17
{-# INLINE дT #-}

дзT :: Array Int ([Int8],Bool) -> Array Int ([Int8],Bool) -> FlowSound -> Sound8
дзT :: Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Sound8
дзT Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10 t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Bool
isSoftDOrL Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10 [Sound8]
t1 = Sound8
12 -- дз дзь
                        | Bool
otherwise = Sound8
8
дзT Array Int ([Sound8], Bool)
_ Array Int ([Sound8], Bool)
_ [Sound8]
_ = Sound8
8
{-# INLINE дзT #-}

жT :: FlowSound -> Sound8
жT :: [Sound8] -> Sound8
жT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | Int -> [Sound8] -> [Sound8]
takeFromFT Int
2 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
49,Sound8
7],[Sound8
38,Sound8
7]] = Sound8
13  -- ж зь
            | Int -> [Sound8] -> [Sound8]
takeFromFT Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
54],[Sound8
66]] = Sound8
13
            | Bool
otherwise = Sound8
10
жT [Sound8]
_ = Sound8
10
{-# INLINE жT #-}

зT :: Array Int ([Int8],Bool) -> Array Int ([Int8],Bool) -> FlowSound -> Sound8
зT :: Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Sound8
зT Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10 t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
10],[Sound8
39],[Sound8
41]] Bool -> Bool -> Bool
|| Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
17,Sound8
10] Bool -> Bool -> Bool
|| Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
23] = Sound8
10  -- з ж
                       | Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Bool
isSoftDOrL Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10 [Sound8]
t1 = Sound8
13        -- з зь
                       | Int -> [Sound8] -> [Sound8]
takeFromFT Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
39],[Sound8
41]] = Sound8
41 --  з ш
                       | Int -> [Sound8] -> [Sound8]
takeFromFT Int
1 [Sound8]
t1  [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
49],[Sound8
38]] Bool -> Bool -> Bool
|| Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
45],[Sound8
47],[Sound8
50],[Sound8
43],[Sound8
52]] = Sound8
49 --  з с
                       | Bool
otherwise = Sound8
25
зT Array Int ([Sound8], Bool)
_ Array Int ([Sound8], Bool)
_ [Sound8]
_ = Sound8
25
{-# INLINE зT #-}

кT :: FlowSound -> Sound8
кT :: [Sound8] -> Sound8
кT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | [Sound8] -> Bool
isVoicedObstruent ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
19
            | Bool
otherwise = Sound8
45
кT [Sound8]
_ = Sound8
45
{-# INLINE кT #-}

нтT :: FlowSound -> Sound8
нтT :: [Sound8] -> Sound8
нтT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | Int -> [Sound8] -> [Sound8]
takeFromFT Int
2 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
49,Sound8
50] Bool -> Bool -> Bool
|| Int -> [Sound8] -> [Sound8]
takeFromFT Int
1 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
63] = Sound8
32
             | Int -> [Sound8] -> [Sound8]
takeFromFT Int
3 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
49,Sound8
7,Sound8
45] Bool -> Bool -> Bool
|| Int -> [Sound8] -> [Sound8]
takeFromFT Int
2 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
54,Sound8
45] = Sound8
65
             | Bool
otherwise = Sound8
62
нтT [Sound8]
_ = Sound8
62
{-# INLINE нтT #-}

пT :: FlowSound -> Sound8
пT :: [Sound8] -> Sound8
пT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | [Sound8] -> Bool
isVoicedObstruent ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
15
            | Bool
otherwise = Sound8
47
пT [Sound8]
_ = Sound8
47
{-# INLINE пT #-}

сT :: Array Int (Int8,Bool) -> Array Int ([Int8],Bool) -> Array Int ([Int8],Bool) -> FlowSound -> Sound8
сT :: Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> Sound8
сT Array Int (Sound8, Bool)
tup8 Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10 t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_)
  | ((Array Int (Sound8, Bool) -> [Sound8] -> Bool
isVoicedObstruentH Array Int (Sound8, Bool)
tup8 ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1) Bool -> Bool -> Bool
&& Int -> [Sound8] -> [Sound8]
forall a. Int -> [a] -> [a]
drop Int
1 (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1) [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
7]) Bool -> Bool -> Bool
||
      [Sound8] -> Bool
isVoicedObstruentS (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1) = Sound8
13
  | Array Int (Sound8, Bool) -> [Sound8] -> Bool
isVoicedObstruentH Array Int (Sound8, Bool)
tup8 ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
25
  | Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Bool
isSoftDOrL Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10 [Sound8]
t1 = Sound8
54
  | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
41] = Sound8
41
  | Bool
otherwise = Sound8
49
сT Array Int (Sound8, Bool)
_ Array Int ([Sound8], Bool)
_ Array Int ([Sound8], Bool)
_ [Sound8]
_ = Sound8
49
{-# INLINE сT #-}

стT :: FlowSound -> Sound8
стT :: [Sound8] -> Sound8
стT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_)
  | [Sound8] -> Bool
isVoicedObstruent ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1  = Sound8
25
  | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
3 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
49,Sound8
7,Sound8
45] Bool -> Bool -> Bool
|| (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
54,Sound8
45],[Sound8
38,Sound8
7]]) Bool -> Bool -> Bool
|| Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
66] = Sound8
54
  | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
49],[Sound8
32]] = Sound8
49
  | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
39] = Sound8
41
  | Bool
otherwise = Sound8
63
стT [Sound8]
_ = Sound8
63
{-# INLINE стT #-}

сьT :: FlowSound -> Sound8
сьT :: [Sound8] -> Sound8
сьT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | [Sound8] -> Bool
isVoicedObstruent ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
13
             | Bool
otherwise = Sound8
54
сьT [Sound8]
_ = Sound8
54
{-# INLINE сьT #-}

тT :: Array Int (Int8,Bool) -> Array Int ([Int8],Bool) -> Array Int ([Int8],Bool) -> FlowSound -> Sound8
тT :: Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> Sound8
тT Array Int (Sound8, Bool)
tup8 Array Int ([Sound8], Bool)
tup11 Array Int ([Sound8], Bool)
tup10 t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_)
  | ((Array Int (Sound8, Bool) -> [Sound8] -> Bool
isVoicedObstruentH Array Int (Sound8, Bool)
tup8 ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1) Bool -> Bool -> Bool
&& Int -> [Sound8] -> [Sound8]
forall a. Int -> [a] -> [a]
drop Int
1 (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1) [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
7]) Bool -> Bool -> Bool
||
       [Sound8] -> Bool
isVoicedObstruentS (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1) = Sound8
14
  | Array Int (Sound8, Bool) -> [Sound8] -> Bool
isVoicedObstruentH Array Int (Sound8, Bool)
tup8 ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
17
  | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
38,Sound8
7] Bool -> Bool -> Bool
|| Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
66]  = Sound8
66
  | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
38] = Sound8
38
  | Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Bool
isSoftDen Array Int ([Sound8], Bool)
tup11 Array Int ([Sound8], Bool)
tup10 [Sound8]
t1 = Sound8
64
  | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
39],[Sound8
41]] = Sound8
39
  | Bool
otherwise = Sound8
50
тT Array Int (Sound8, Bool)
_ Array Int ([Sound8], Bool)
_ Array Int ([Sound8], Bool)
_ [Sound8]
_ = Sound8
50
{-# INLINE тT #-}

тьT :: FlowSound -> Sound8
тьT :: [Sound8] -> Sound8
тьT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | [Sound8] -> Bool
isVoicedObstruent ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
14
             | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
3 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
49,Sound8
7,Sound8
1] Bool -> Bool -> Bool
|| Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1 [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
54,Sound8
1] = Sound8
66
             | Bool
otherwise = Sound8
64
тьT [Sound8]
_ = Sound8
64
{-# INLINE тьT #-}

фT :: FlowSound -> Sound8
фT :: [Sound8] -> Sound8
фT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | [Sound8] -> Bool
isVoicedObstruent ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
36
            | Bool
otherwise = Sound8
43
фT [Sound8]
_ = Sound8
43
{-# INLINE фT #-}

хT :: FlowSound -> Sound8
хT :: [Sound8] -> Sound8
хT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | [Sound8] -> Bool
isVoicedObstruent ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
21
            | Bool
otherwise = Sound8
52
хT [Sound8]
_ = Sound8
52
{-# INLINE хT #-}

цT :: Array Int (Int8,Bool) -> Array Int ([Int8],Bool) -> Array Int ([Int8],Bool) -> FlowSound -> Sound8
цT :: Array Int (Sound8, Bool)
-> Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool)
-> [Sound8]
-> Sound8
цT Array Int (Sound8, Bool)
tup8 Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10 t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_)
  | ((Array Int (Sound8, Bool) -> [Sound8] -> Bool
isVoicedObstruentH Array Int (Sound8, Bool)
tup8 ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1) Bool -> Bool -> Bool
&& Int -> [Sound8] -> [Sound8]
forall a. Int -> [a] -> [a]
drop Int
1 (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1) [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
7]) Bool -> Bool -> Bool
||
      [Sound8] -> Bool
isVoicedObstruentS (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1) = Sound8
12
  | Array Int ([Sound8], Bool)
-> Array Int ([Sound8], Bool) -> [Sound8] -> Bool
isSoftDOrL Array Int ([Sound8], Bool)
tup9 Array Int ([Sound8], Bool)
tup10 [Sound8]
t1 = Sound8
66
  | Array Int (Sound8, Bool) -> [Sound8] -> Bool
isVoicedObstruentH Array Int (Sound8, Bool)
tup8 ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
8
  | Bool
otherwise = Sound8
38
цT Array Int (Sound8, Bool)
_ Array Int ([Sound8], Bool)
_ Array Int ([Sound8], Bool)
_ [Sound8]
_ = Sound8
38
{-# INLINE цT #-}

цьT :: FlowSound -> Sound8
цьT :: [Sound8] -> Sound8
цьT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | ([Sound8] -> Bool
isVoicedObstruent ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1) Bool -> Bool -> Bool
&& Int -> [Sound8] -> [Sound8]
forall a. Int -> [a] -> [a]
drop Int
1 (Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1) [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
7] = Sound8
12
             | Bool
otherwise = Sound8
66
цьT [Sound8]
_ = Sound8
66
{-# INLINE цьT #-}

чT :: FlowSound -> Sound8
чT :: [Sound8] -> Sound8
чT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
49,Sound8
7],[Sound8
38,Sound8
7]] Bool -> Bool -> Bool
|| Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
54],[Sound8
66]] = Sound8
66
            | [Sound8] -> Bool
isVoicedObstruent ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
23
            | Bool
otherwise = Sound8
39
чT [Sound8]
_ = Sound8
39
{-# INLINE чT #-}

шT :: FlowSound -> Sound8
шT :: [Sound8] -> Sound8
шT t1 :: [Sound8]
t1@(Sound8
_:[Sound8]
_) | Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
2 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
49,Sound8
7],[Sound8
38,Sound8
7]] Bool -> Bool -> Bool
|| Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 [Sound8]
t1 [Sound8] -> [[Sound8]] -> Bool
forall a. Eq a => a -> [a] -> Bool
`elem` [[Sound8
54],[Sound8
66]] = Sound8
54
            | [Sound8] -> Bool
isVoicedObstruent ([Sound8] -> Bool) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
1 ([Sound8] -> Bool) -> [Sound8] -> Bool
forall a b. (a -> b) -> a -> b
$ [Sound8]
t1 = Sound8
10
            | Bool
otherwise = Sound8
41
шT [Sound8]
_ = Sound8
41
{-# INLINE шT #-}

takeFromFT :: Int -> FlowSound -> FlowSound
takeFromFT :: Int -> [Sound8] -> [Sound8]
takeFromFT Int
n [Sound8]
ts | if Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
1 then Bool
True else [Sound8] -> Bool
forall a. [a] -> Bool
null [Sound8]
ts = []
                | Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
2 = [Sound8
k]
                | Bool
otherwise = Sound8
k Sound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
: Int -> [Sound8] -> [Sound8]
takeFromFT (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) (Int -> [Sound8] -> [Sound8]
forall a. Int -> [a] -> [a]
take (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) [Sound8]
ts)
    where k :: Sound8
k = [Sound8] -> Sound8
forall a. HasCallStack => [a] -> a
head [Sound8]
ts

takeFromFT2 :: Int -> FlowSound -> FlowSound
takeFromFT2 :: Int -> [Sound8] -> [Sound8]
takeFromFT2 Int
n [Sound8]
ts | if Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
1 then Bool
True else [Sound8] -> Bool
forall a. [a] -> Bool
null [Sound8]
ts = []
                 | Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
2 = [Sound8
ks]
                 | Bool
otherwise = Sound8
ksSound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:Int -> [Sound8] -> [Sound8]
takeFromFT2 (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) ([Sound8] -> [Sound8]
forall a. HasCallStack => [a] -> [a]
tail [Sound8]
ts)
    where ks :: Sound8
ks = [Sound8] -> Sound8
forall a. HasCallStack => [a] -> a
head [Sound8]
ts

dropFromFT2 :: Int -> FlowSound -> FlowSound
dropFromFT2 :: Int -> [Sound8] -> [Sound8]
dropFromFT2 Int
n [Sound8]
ts | if Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
1 then Bool
True else [Sound8] -> Bool
forall a. [a] -> Bool
null [Sound8]
ts = []
                 | Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
2 = [Sound8] -> [Sound8]
forall a. HasCallStack => [a] -> [a]
tail [Sound8]
ts
                 | Bool
otherwise = Int -> [Sound8] -> [Sound8]
dropFromFT2 (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) ([Sound8] -> [Sound8]
forall a. HasCallStack => [a] -> [a]
tail [Sound8]
ts)

takeFromFT_ :: Int -> FlowSound -> FlowSound
takeFromFT_ :: Int -> [Sound8] -> [Sound8]
takeFromFT_ Int
n = Int -> [Sound8] -> [Sound8]
takeFromFT Int
n ([Sound8] -> [Sound8])
-> ([Sound8] -> [Sound8]) -> [Sound8] -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sound8 -> Bool) -> [Sound8] -> [Sound8]
forall a. (a -> Bool) -> [a] -> [a]
filter (\Sound8
t -> Sound8
t Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
> Sound8
0 Bool -> Bool -> Bool
&& Sound8
t Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
< Sound8
100)
{-# INLINE takeFromFT_ #-}

correctA :: Array Int (Int8,[Int8]) -> FlowSound -> FlowSound
correctA :: Array Int (Sound8, [Sound8]) -> [Sound8] -> [Sound8]
correctA Array Int (Sound8, [Sound8])
tup12 = [Sound8] -> [Sound8]
correctSomeW ([Sound8] -> [Sound8])
-> ([Sound8] -> [Sound8]) -> [Sound8] -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Array Int (Sound8, [Sound8]) -> [Sound8] -> [Sound8]
separateSoftS Array Int (Sound8, [Sound8])
tup12
{-# INLINE correctA #-}

separateSoftS :: Array Int (Int8,[Int8]) -> FlowSound -> FlowSound
separateSoftS :: Array Int (Sound8, [Sound8]) -> [Sound8] -> [Sound8]
separateSoftS Array Int (Sound8, [Sound8])
tup12 = (Sound8 -> [Sound8]) -> [Sound8] -> [Sound8]
forall a b. (a -> [b]) -> [a] -> [b]
concatMap (\Sound8
x -> ([Sound8], Array Int (Sound8, [Sound8])) -> Sound8 -> [Sound8]
forall a b. Ord a => (b, Array Int (a, b)) -> a -> b
getBFst' ([Sound8
x], Array Int (Sound8, [Sound8])
tup12) Sound8
x)
{-# INLINE separateSoftS #-}

correctSomeW :: FlowSound -> FlowSound
correctSomeW :: [Sound8] -> [Sound8]
correctSomeW (Sound8
x:Sound8
y:Sound8
z:xs :: [Sound8]
xs@(Sound8
t:[Sound8]
ys))
 | Sound8
x Sound8 -> Sound8 -> Bool
forall a. Eq a => a -> a -> Bool
== Sound8
50 Bool -> Bool -> Bool
&& Sound8
y Sound8 -> Sound8 -> Bool
forall a. Eq a => a -> a -> Bool
== Sound8
7 Bool -> Bool -> Bool
&& Sound8
z Sound8 -> Sound8 -> Bool
forall a. Eq a => a -> a -> Bool
== Sound8
54 Bool -> Bool -> Bool
&& Sound8
t Sound8 -> Sound8 -> Bool
forall a. Eq a => a -> a -> Bool
== Sound8
1 = Sound8
66Sound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:Sound8
66Sound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:Sound8
1Sound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:[Sound8] -> [Sound8]
correctSomeW [Sound8]
ys
 | (Sound8
x Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
> Sound8
99) Bool -> Bool -> Bool
&& Sound8
y Sound8 -> Sound8 -> Bool
forall a. Eq a => a -> a -> Bool
== Sound8
27 Bool -> Bool -> Bool
&& Sound8
z Sound8 -> Sound8 -> Bool
forall a. Eq a => a -> a -> Bool
== Sound8
1 =
  if Int -> [Sound8] -> [Sound8]
forall a. Int -> [a] -> [a]
take Int
2 [Sound8]
xs [Sound8] -> [Sound8] -> Bool
forall a. Eq a => a -> a -> Bool
== [Sound8
39,Sound8
32]
    then Sound8
xSound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:Sound8
ySound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:Sound8
zSound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:Sound8
41Sound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:[Sound8] -> [Sound8]
correctSomeW [Sound8]
ys
    else Sound8
xSound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:[Sound8] -> [Sound8]
correctSomeW (Sound8
ySound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:Sound8
zSound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:[Sound8]
xs)
                        | Bool
otherwise = Sound8
xSound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:[Sound8] -> [Sound8]
correctSomeW (Sound8
ySound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:Sound8
zSound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:[Sound8]
xs)
correctSomeW [Sound8]
zs = [Sound8]
zs

correctB :: FlowSound -> FlowSound
correctB :: [Sound8] -> [Sound8]
correctB ys :: [Sound8]
ys@(Sound8
x:[Sound8]
xs)
  | ([Sound8] -> Int
forall a. [a] -> Int
length ([Sound8] -> Int) -> ([Sound8] -> [Sound8]) -> [Sound8] -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sound8 -> Bool) -> [Sound8] -> [Sound8]
forall a. (a -> Bool) -> [a] -> [a]
filter (Sound8 -> Sound8 -> Bool
forall a. Eq a => a -> a -> Bool
== Sound8
100) ([Sound8] -> [Sound8])
-> ([Sound8] -> [Sound8]) -> [Sound8] -> [Sound8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [Sound8] -> [Sound8]
takeFromFT2 Int
6 ([Sound8] -> Int) -> [Sound8] -> Int
forall a b. (a -> b) -> a -> b
$ [Sound8]
ys) Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
1 = (Sound8 -> Sound8) -> [Sound8] -> [Sound8]
forall a b. (a -> b) -> [a] -> [b]
map (\Sound8
t -> if Sound8
t Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
>= Sound8
100 then Sound8
101 else Sound8
t) (Int -> [Sound8] -> [Sound8]
takeFromFT2 Int
6 [Sound8]
ys) [Sound8] -> [Sound8] -> [Sound8]
forall a. Monoid a => a -> a -> a
`mappend` [Sound8] -> [Sound8]
correctB (Int -> [Sound8] -> [Sound8]
dropFromFT2 Int
6 [Sound8]
ys)
  | Bool
otherwise = (if Sound8
x Sound8 -> Sound8 -> Bool
forall a. Ord a => a -> a -> Bool
> Sound8
100 then Sound8
101 else Sound8
x)Sound8 -> [Sound8] -> [Sound8]
forall a. a -> [a] -> [a]
:[Sound8] -> [Sound8]
correctB [Sound8]
xs
correctB [Sound8]
_ = []

-- | Can be used to map the 'Sound8' representation and the mmsyn6ukr-array files with some recordings.
linkFileNameI8 :: Sound8 -> Char
linkFileNameI8 :: Sound8 -> Char
linkFileNameI8 = Char -> [(Sound8, Char)] -> Sound8 -> Char
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' Char
'0' ([(Sound8
1,Char
'A'),(Sound8
2,Char
'H'),(Sound8
3,Char
'Q'),(Sound8
4,Char
'W'),(Sound8
5,Char
'K'),(Sound8
6,Char
'e'),(Sound8
7,Char
'd'),(Sound8
8,Char
'G'),(Sound8
10,Char
'I'),(Sound8
15,Char
'B'),
  (Sound8
17,Char
'E'),(Sound8
19,Char
'f'),(Sound8
21,Char
'D'),(Sound8
23,Char
'F'),(Sound8
25,Char
'J'),(Sound8
27,Char
'L'),(Sound8
28,Char
'N'),(Sound8
30,Char
'O'),(Sound8
32,Char
'P'),(Sound8
34,Char
'S'),(Sound8
36,Char
'C'),(Sound8
38,Char
'Z'),(Sound8
39,Char
'b'),
    (Sound8
41,Char
'c'),(Sound8
43,Char
'X'),(Sound8
45,Char
'M'),(Sound8
47,Char
'R'),(Sound8
49,Char
'T'),(Sound8
50,Char
'V'),(Sound8
52,Char
'Y'),(Sound8
54,Char
'U'),(Sound8
60,Char
'0'),(Sound8
61,Char
'0'),(Sound8
66,Char
'a')]) 
{-# INLINE linkFileNameI8 #-}