{-# OPTIONS_GHC -threaded #-}
module Composition.Sound.Functional.Split (
splitO
, splitO2
, overConcat
, splitHelp1
, splitHelp2
, splitOG1
, splitOG2
, splitOG12
, splitOG12S
, splitOG22
, splitOG22S
) where
import CaseBi.Arr (getBFstL')
import Data.Char (isAsciiLower)
import Data.List (sortBy)
import GHC.Arr
import Data.Foldable.Ix
import qualified Data.Foldable as F
import Composition.Sound.Functional.Basics
splitO :: Int -> OvertonesO -> [OvertonesO]
splitO :: Int -> OvertonesO -> [OvertonesO]
splitO Int
n OvertonesO
v0
| OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) =
let v1 :: OvertonesO
v1 = ((Float, Float) -> (Float, Float) -> Ordering)
-> OvertonesO -> OvertonesO
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (\(Float
x1,Float
_) (Float
x2,Float
_) -> Float -> Float -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Float -> Float
forall a. Num a => a -> a
abs Float
x2) (Float -> Float
forall a. Num a => a -> a
abs Float
x1)) OvertonesO
v0
(Float
x0, Float
y0) = OvertonesO -> (Float, Float)
forall a. [a] -> a
head OvertonesO
v1
v2 :: OvertonesO
v2 = Int -> Int -> OvertonesO -> OvertonesO
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L Int
1 (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) OvertonesO
v1
v31 :: [Float]
v31 = ((Float, Float) -> Float) -> OvertonesO -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map (\(Float, Float)
t -> ((Float, Float) -> Float
forall a b. (a, b) -> a
fst (Float, Float)
t) Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
x0) OvertonesO
v2
v32 :: [Float]
v32 = ((Float, Float) -> Float) -> OvertonesO -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map (\(Float, Float)
t -> ((Float, Float) -> Float
forall a b. (a, b) -> b
snd (Float, Float)
t) Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
y0) OvertonesO
v2
v3 :: OvertonesO
v3 = [Float] -> [Float] -> OvertonesO
forall a b. [a] -> [b] -> [(a, b)]
zip [Float]
v31 [Float]
v32
f1Tup :: (Float, Float) -> OvertonesO
f1Tup (Float
t1, Float
w2) = ((Integer, (Float, Float)) -> (Float, Float))
-> [(Integer, (Float, Float))] -> OvertonesO
forall a b. (a -> b) -> [a] -> [b]
map (\(Integer
i, (Float, Float)
rr) -> ((Float, Float) -> Float
forall a b. (a, b) -> a
fst (Float, Float)
rr Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
t1, (Float, Float) -> Float
forall a b. (a, b) -> b
snd (Float, Float)
rr Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
w2)) ([(Integer, (Float, Float))] -> OvertonesO)
-> (OvertonesO -> [(Integer, (Float, Float))])
-> OvertonesO
-> OvertonesO
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Integer] -> OvertonesO -> [(Integer, (Float, Float))]
forall a b. [a] -> [b] -> [(a, b)]
zip [Integer
0..] (OvertonesO -> OvertonesO) -> OvertonesO -> OvertonesO
forall a b. (a -> b) -> a -> b
$ OvertonesO
v3
in ((Float, Float) -> OvertonesO) -> OvertonesO -> [OvertonesO]
forall a b. (a -> b) -> [a] -> [b]
map (Float, Float) -> OvertonesO
f1Tup (OvertonesO -> [OvertonesO])
-> (OvertonesO -> OvertonesO) -> OvertonesO -> [OvertonesO]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> OvertonesO -> OvertonesO
forall a. Int -> [a] -> [a]
take Int
n (OvertonesO -> [OvertonesO]) -> OvertonesO -> [OvertonesO]
forall a b. (a -> b) -> a -> b
$ OvertonesO
v1
| Bool
otherwise = [OvertonesO
v0]
splitO2 :: (OvertonesO -> OvertonesO) -> Int -> OvertonesO -> [OvertonesO]
splitO2 :: (OvertonesO -> OvertonesO) -> Int -> OvertonesO -> [OvertonesO]
splitO2 OvertonesO -> OvertonesO
h Int
n OvertonesO
v0
| OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) =
let v1 :: OvertonesO
v1 = ((Float, Float) -> (Float, Float) -> Ordering)
-> OvertonesO -> OvertonesO
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (\(Float
x1,Float
_) (Float
x2,Float
_) -> Float -> Float -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Float -> Float
forall a. Num a => a -> a
abs Float
x2) (Float -> Float
forall a. Num a => a -> a
abs Float
x1)) OvertonesO
v0
(Float
x0, Float
y0) = OvertonesO -> (Float, Float)
forall a. [a] -> a
head OvertonesO
v1
v2 :: OvertonesO
v2 = Int -> Int -> OvertonesO -> OvertonesO
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L Int
1 (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) OvertonesO
v1
v31 :: [Float]
v31 = ((Float, Float) -> Float) -> OvertonesO -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map (\(Float, Float)
t -> ((Float, Float) -> Float
forall a b. (a, b) -> a
fst (Float, Float)
t) Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
x0) OvertonesO
v2
v32 :: [Float]
v32 = ((Float, Float) -> Float) -> OvertonesO -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map (\(Float, Float)
t -> ((Float, Float) -> Float
forall a b. (a, b) -> b
snd (Float, Float)
t) Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
y0) OvertonesO
v2
v3 :: OvertonesO
v3 = [Float] -> [Float] -> OvertonesO
forall a b. [a] -> [b] -> [(a, b)]
zip [Float]
v31 [Float]
v32
f1Tup :: (Float, Float) -> OvertonesO
f1Tup (Float
t1, Float
w2) = ((Integer, (Float, Float)) -> (Float, Float))
-> [(Integer, (Float, Float))] -> OvertonesO
forall a b. (a -> b) -> [a] -> [b]
map (\(Integer
i, (Float, Float)
rr) -> ((Float, Float) -> Float
forall a b. (a, b) -> a
fst (Float, Float)
rr Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
t1, (Float, Float) -> Float
forall a b. (a, b) -> b
snd (Float, Float)
rr Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
w2)) ([(Integer, (Float, Float))] -> OvertonesO)
-> (OvertonesO -> [(Integer, (Float, Float))])
-> OvertonesO
-> OvertonesO
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Integer] -> OvertonesO -> [(Integer, (Float, Float))]
forall a b. [a] -> [b] -> [(a, b)]
zip [Integer
0..] (OvertonesO -> OvertonesO) -> OvertonesO -> OvertonesO
forall a b. (a -> b) -> a -> b
$ OvertonesO
v3
in ((Float, Float) -> OvertonesO) -> OvertonesO -> [OvertonesO]
forall a b. (a -> b) -> [a] -> [b]
map (Float, Float) -> OvertonesO
f1Tup (OvertonesO -> OvertonesO
h (OvertonesO -> OvertonesO)
-> (OvertonesO -> OvertonesO) -> OvertonesO -> OvertonesO
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> OvertonesO -> OvertonesO
forall a. Int -> [a] -> [a]
take Int
n (OvertonesO -> OvertonesO) -> OvertonesO -> OvertonesO
forall a b. (a -> b) -> a -> b
$ OvertonesO
v1)
| Bool
otherwise = [OvertonesO
v0]
splitOG1 :: String -> Int -> OvertonesO -> [OvertonesO]
splitOG1 :: String -> Int -> OvertonesO -> [OvertonesO]
splitOG1 String
xs Int
n OvertonesO
v0
| OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) =
let c1s :: String
c1s = Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
2 (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 -> Bool
isAsciiLower (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
xs
v1 :: OvertonesO
v1 = ((Float, Float) -> (Float, Float) -> Ordering)
-> OvertonesO -> OvertonesO
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (\(Float
x1,Float
_) (Float
x2,Float
_) -> Float -> Float -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Float -> Float
forall a. Num a => a -> a
abs Float
x2) (Float -> Float
forall a. Num a => a -> a
abs Float
x1)) OvertonesO
v0
(Float
x0, Float
y0) = OvertonesO -> (Float, Float)
forall a. [a] -> a
head OvertonesO
v1 in
case String
c1s of
String
"ab" -> let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
n,Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
n) in Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp1 Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
String
"ac" -> let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int
1,Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
n) in Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp1 Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
String
"ad" -> let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
n,Int
0,Int
n) in Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp1 Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
String
_ -> let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int
1,Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,Int
0,Int
n) in Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp1 Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
| Bool
otherwise = [OvertonesO
v0]
splitHelp1 :: Int -> Int -> Int -> Int -> [(Float, Float)] -> (Float,Float) -> [OvertonesO]
splitHelp1 :: Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp1 Int
x1 Int
x2 Int
x3 Int
x4 OvertonesO
v0 (Float
y5,Float
y6) =
let v2 :: OvertonesO
v2 = Int -> Int -> OvertonesO -> OvertonesO
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L Int
x1 Int
x2 OvertonesO
v0
v31 :: [Float]
v31 = ((Float, Float) -> Float) -> OvertonesO -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map (\(Float, Float)
t -> ((Float, Float) -> Float
forall a b. (a, b) -> a
fst (Float, Float)
t) Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
y5) OvertonesO
v2
v32 :: [Float]
v32 = ((Float, Float) -> Float) -> OvertonesO -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map (\(Float, Float)
t -> ((Float, Float) -> Float
forall a b. (a, b) -> b
snd (Float, Float)
t) Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
y6) OvertonesO
v2
v3 :: OvertonesO
v3 = [Float] -> [Float] -> OvertonesO
forall a b. [a] -> [b] -> [(a, b)]
zip [Float]
v31 [Float]
v32
f1Tup :: (Float, Float) -> OvertonesO
f1Tup (Float
t1, Float
w2) = ((Integer, (Float, Float)) -> (Float, Float))
-> [(Integer, (Float, Float))] -> OvertonesO
forall a b. (a -> b) -> [a] -> [b]
map (\(Integer
i, (Float, Float)
rr) -> ((Float, Float) -> Float
forall a b. (a, b) -> a
fst (Float, Float)
rr Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
t1, (Float, Float) -> Float
forall a b. (a, b) -> b
snd (Float, Float)
rr Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
w2)) ([(Integer, (Float, Float))] -> OvertonesO)
-> (OvertonesO -> [(Integer, (Float, Float))])
-> OvertonesO
-> OvertonesO
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Integer] -> OvertonesO -> [(Integer, (Float, Float))]
forall a b. [a] -> [b] -> [(a, b)]
zip [Integer
0..] (OvertonesO -> OvertonesO) -> OvertonesO -> OvertonesO
forall a b. (a -> b) -> a -> b
$ OvertonesO
v3 in ((Float, Float) -> OvertonesO) -> OvertonesO -> [OvertonesO]
forall a b. (a -> b) -> [a] -> [b]
map (Float, Float) -> OvertonesO
f1Tup (Int -> Int -> OvertonesO -> OvertonesO
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L Int
x3 Int
x4 OvertonesO
v0)
splitHelp2 :: (OvertonesO -> OvertonesO) -> Int -> Int -> Int -> Int -> [(Float, Float)] -> (Float,Float) -> [OvertonesO]
splitHelp2 :: (OvertonesO -> OvertonesO)
-> Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp2 OvertonesO -> OvertonesO
h1 Int
x1 Int
x2 Int
x3 Int
x4 OvertonesO
v0 (Float
y5,Float
y6) =
let v2 :: OvertonesO
v2 = Int -> Int -> OvertonesO -> OvertonesO
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L Int
x1 Int
x2 OvertonesO
v0
v31 :: [Float]
v31 = ((Float, Float) -> Float) -> OvertonesO -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map (\(Float, Float)
t -> ((Float, Float) -> Float
forall a b. (a, b) -> a
fst (Float, Float)
t) Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
y5) OvertonesO
v2
v32 :: [Float]
v32 = ((Float, Float) -> Float) -> OvertonesO -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map (\(Float, Float)
t -> ((Float, Float) -> Float
forall a b. (a, b) -> b
snd (Float, Float)
t) Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
y6) OvertonesO
v2
v3 :: OvertonesO
v3 = [Float] -> [Float] -> OvertonesO
forall a b. [a] -> [b] -> [(a, b)]
zip [Float]
v31 [Float]
v32
f1Tup :: (Float, Float) -> OvertonesO
f1Tup (Float
t1, Float
w2) = ((Integer, (Float, Float)) -> (Float, Float))
-> [(Integer, (Float, Float))] -> OvertonesO
forall a b. (a -> b) -> [a] -> [b]
map (\(Integer
i, (Float, Float)
rr) -> ((Float, Float) -> Float
forall a b. (a, b) -> a
fst (Float, Float)
rr Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
t1, (Float, Float) -> Float
forall a b. (a, b) -> b
snd (Float, Float)
rr Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
w2)) ([(Integer, (Float, Float))] -> OvertonesO)
-> (OvertonesO -> [(Integer, (Float, Float))])
-> OvertonesO
-> OvertonesO
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Integer] -> OvertonesO -> [(Integer, (Float, Float))]
forall a b. [a] -> [b] -> [(a, b)]
zip [Integer
0..] (OvertonesO -> OvertonesO) -> OvertonesO -> OvertonesO
forall a b. (a -> b) -> a -> b
$ OvertonesO
v3 in ((Float, Float) -> OvertonesO) -> OvertonesO -> [OvertonesO]
forall a b. (a -> b) -> [a] -> [b]
map (Float, Float) -> OvertonesO
f1Tup (OvertonesO -> OvertonesO
h1 (OvertonesO -> OvertonesO)
-> (OvertonesO -> OvertonesO) -> OvertonesO -> OvertonesO
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int -> OvertonesO -> OvertonesO
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L Int
x3 Int
x4 (OvertonesO -> OvertonesO) -> OvertonesO -> OvertonesO
forall a b. (a -> b) -> a -> b
$ OvertonesO
v0)
splitOG2 :: (OvertonesO -> OvertonesO) -> String -> Int -> [(Float, Float)] -> [OvertonesO]
splitOG2 :: (OvertonesO -> OvertonesO)
-> String -> Int -> OvertonesO -> [OvertonesO]
splitOG2 OvertonesO -> OvertonesO
h String
xs Int
n OvertonesO
v0
| OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) =
let c1s :: String
c1s = Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
2 (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 -> Bool
isAsciiLower (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
xs
v1 :: OvertonesO
v1 = ((Float, Float) -> (Float, Float) -> Ordering)
-> OvertonesO -> OvertonesO
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (\(Float
x1,Float
_) (Float
x2,Float
_) -> Float -> Float -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Float -> Float
forall a. Num a => a -> a
abs Float
x2) (Float -> Float
forall a. Num a => a -> a
abs Float
x1)) OvertonesO
v0
(Float
x0, Float
y0) = OvertonesO -> (Float, Float)
forall a. [a] -> a
head OvertonesO
v1 in
case String
c1s of
String
"ab" -> let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
n,Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
n) in (OvertonesO -> OvertonesO)
-> Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp2 OvertonesO -> OvertonesO
h Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
String
"ac" -> let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int
1,Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
n) in (OvertonesO -> OvertonesO)
-> Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp2 OvertonesO -> OvertonesO
h Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
String
"ad" -> let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
n,Int
0,Int
n) in (OvertonesO -> OvertonesO)
-> Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp2 OvertonesO -> OvertonesO
h Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
String
_ -> let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int
1,Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1,Int
0,Int
n) in (OvertonesO -> OvertonesO)
-> Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp2 OvertonesO -> OvertonesO
h Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
| Bool
otherwise = [OvertonesO
v0]
splitOG12 :: (Int,Int,Int,Int) -> [(String,Int -> [(Float, Float)] -> (Int,Int,Int,Int))] -> String -> Int -> [(Float, Float)] -> [OvertonesO]
splitOG12 :: (Int, Int, Int, Int)
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
-> String
-> Int
-> OvertonesO
-> [OvertonesO]
splitOG12 (Int
x1,Int
x2,Int
x3,Int
x4) [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf String
xs Int
n OvertonesO
v0
| OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Bool -> Bool -> Bool
&& Bool -> Bool
not ([(String, Int -> OvertonesO -> (Int, Int, Int, Int))] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf) =
let c1s :: String
c1s = (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter Char -> Bool
isAsciiLower String
xs
v1 :: OvertonesO
v1 = ((Float, Float) -> (Float, Float) -> Ordering)
-> OvertonesO -> OvertonesO
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (\(Float
x1,Float
_) (Float
x2,Float
_) -> Float -> Float -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Float -> Float
forall a. Num a => a -> a
abs Float
x2) (Float -> Float
forall a. Num a => a -> a
abs Float
x1)) OvertonesO
v0
(Float
x0, Float
y0) = OvertonesO -> (Float, Float)
forall a. [a] -> a
head OvertonesO
v1 in let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int, Int, Int, Int)
-> [(String, (Int, Int, Int, Int))]
-> String
-> (Int, Int, Int, Int)
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstL' (Int
x1,Int
x2,Int
x3,Int
x4) (((String, Int -> OvertonesO -> (Int, Int, Int, Int))
-> (String, (Int, Int, Int, Int)))
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
-> [(String, (Int, Int, Int, Int))]
forall a b. (a -> b) -> [a] -> [b]
map (\(String
ys,Int -> OvertonesO -> (Int, Int, Int, Int)
g) -> (String
ys,Int -> OvertonesO -> (Int, Int, Int, Int)
g Int
n OvertonesO
v1)) [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf) String
c1s in
Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp1 Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
| Bool
otherwise = [OvertonesO
v0]
splitOG12S :: (Int,Int,Int,Int) -> [(String,Int -> [(Float, Float)] -> (Int,Int,Int,Int))] -> String -> Int -> [(Float, Float)] -> [OvertonesO]
splitOG12S :: (Int, Int, Int, Int)
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
-> String
-> Int
-> OvertonesO
-> [OvertonesO]
splitOG12S (Int
x1,Int
x2,Int
x3,Int
x4) [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf String
xs Int
n OvertonesO
v0
| OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Bool -> Bool -> Bool
&& Bool -> Bool
not ([(String, Int -> OvertonesO -> (Int, Int, Int, Int))] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf) =
let c1s :: String
c1s = (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter Char -> Bool
isAsciiLower String
xs
v1 :: OvertonesO
v1 = ((Float, Float) -> (Float, Float) -> Ordering)
-> OvertonesO -> OvertonesO
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (\(Float
x1,Float
_) (Float
x2,Float
_) -> Float -> Float -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Float -> Float
forall a. Num a => a -> a
abs Float
x2) (Float -> Float
forall a. Num a => a -> a
abs Float
x1)) OvertonesO
v0
v2 :: [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
v2 = ((String, Int -> OvertonesO -> (Int, Int, Int, Int))
-> (String, Int -> OvertonesO -> (Int, Int, Int, Int)) -> Ordering)
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (\(String
x1s,Int -> OvertonesO -> (Int, Int, Int, Int)
_) (String
x2s,Int -> OvertonesO -> (Int, Int, Int, Int)
_) -> String -> String -> Ordering
forall a. Ord a => a -> a -> Ordering
compare String
x1s String
x2s) [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf
(Float
x0, Float
y0) = OvertonesO -> (Float, Float)
forall a. [a] -> a
head OvertonesO
v1 in let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int, Int, Int, Int)
-> [(String, (Int, Int, Int, Int))]
-> String
-> (Int, Int, Int, Int)
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstL' (Int
x1,Int
x2,Int
x3,Int
x4) (((String, Int -> OvertonesO -> (Int, Int, Int, Int))
-> (String, (Int, Int, Int, Int)))
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
-> [(String, (Int, Int, Int, Int))]
forall a b. (a -> b) -> [a] -> [b]
map (\(String
ys,Int -> OvertonesO -> (Int, Int, Int, Int)
g) -> (String
ys,Int -> OvertonesO -> (Int, Int, Int, Int)
g Int
n OvertonesO
v1)) [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
v2) String
c1s in
Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp1 Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
| Bool
otherwise = [OvertonesO
v0]
splitOG22 :: (Int,Int,Int,Int) -> [(String,Int -> [(Float, Float)] -> (Int,Int,Int,Int))] -> (OvertonesO -> OvertonesO) -> String -> Int ->
[(Float, Float)] -> [OvertonesO]
splitOG22 :: (Int, Int, Int, Int)
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
-> (OvertonesO -> OvertonesO)
-> String
-> Int
-> OvertonesO
-> [OvertonesO]
splitOG22 (Int
x1,Int
x2,Int
x3,Int
x4) [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf OvertonesO -> OvertonesO
h String
xs Int
n OvertonesO
v0
| OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Bool -> Bool -> Bool
&& Bool -> Bool
not ([(String, Int -> OvertonesO -> (Int, Int, Int, Int))] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf) =
let c1s :: String
c1s = (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter Char -> Bool
isAsciiLower String
xs
v1 :: OvertonesO
v1 = ((Float, Float) -> (Float, Float) -> Ordering)
-> OvertonesO -> OvertonesO
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (\(Float
x1,Float
_) (Float
x2,Float
_) -> Float -> Float -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Float -> Float
forall a. Num a => a -> a
abs Float
x2) (Float -> Float
forall a. Num a => a -> a
abs Float
x1)) OvertonesO
v0
(Float
x0, Float
y0) = OvertonesO -> (Float, Float)
forall a. [a] -> a
head OvertonesO
v1 in let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int, Int, Int, Int)
-> [(String, (Int, Int, Int, Int))]
-> String
-> (Int, Int, Int, Int)
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstL' (Int
x1,Int
x2,Int
x3,Int
x4) (((String, Int -> OvertonesO -> (Int, Int, Int, Int))
-> (String, (Int, Int, Int, Int)))
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
-> [(String, (Int, Int, Int, Int))]
forall a b. (a -> b) -> [a] -> [b]
map (\(String
ys,Int -> OvertonesO -> (Int, Int, Int, Int)
g) -> (String
ys,Int -> OvertonesO -> (Int, Int, Int, Int)
g Int
n OvertonesO
v1)) [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf) String
c1s in
(OvertonesO -> OvertonesO)
-> Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp2 OvertonesO -> OvertonesO
h Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
| Bool
otherwise = [OvertonesO
v0]
splitOG22S :: (Int,Int,Int,Int) -> [(String,Int -> [(Float, Float)] -> (Int,Int,Int,Int))] -> (OvertonesO -> OvertonesO) -> String -> Int ->
[(Float, Float)] -> [OvertonesO]
splitOG22S :: (Int, Int, Int, Int)
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
-> (OvertonesO -> OvertonesO)
-> String
-> Int
-> OvertonesO
-> [OvertonesO]
splitOG22S (Int
x1,Int
x2,Int
x3,Int
x4) [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf OvertonesO -> OvertonesO
h String
xs Int
n OvertonesO
v0
| OvertonesO -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length OvertonesO
v0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Bool -> Bool -> Bool
&& Bool -> Bool
not ([(String, Int -> OvertonesO -> (Int, Int, Int, Int))] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf) =
let c1s :: String
c1s = (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter Char -> Bool
isAsciiLower String
xs
v1 :: OvertonesO
v1 = ((Float, Float) -> (Float, Float) -> Ordering)
-> OvertonesO -> OvertonesO
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (\(Float
x1,Float
_) (Float
x2,Float
_) -> Float -> Float -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Float -> Float
forall a. Num a => a -> a
abs Float
x2) (Float -> Float
forall a. Num a => a -> a
abs Float
x1)) OvertonesO
v0
v2 :: [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
v2 = ((String, Int -> OvertonesO -> (Int, Int, Int, Int))
-> (String, Int -> OvertonesO -> (Int, Int, Int, Int)) -> Ordering)
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (\(String
x1s,Int -> OvertonesO -> (Int, Int, Int, Int)
_) (String
x2s,Int -> OvertonesO -> (Int, Int, Int, Int)
_) -> String -> String -> Ordering
forall a. Ord a => a -> a -> Ordering
compare String
x1s String
x2s) [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
vf
(Float
x0, Float
y0) = OvertonesO -> (Float, Float)
forall a. [a] -> a
head OvertonesO
v1 in let (Int
k1,Int
k2,Int
k3,Int
k4) = (Int, Int, Int, Int)
-> [(String, (Int, Int, Int, Int))]
-> String
-> (Int, Int, Int, Int)
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstL' (Int
x1,Int
x2,Int
x3,Int
x4) (((String, Int -> OvertonesO -> (Int, Int, Int, Int))
-> (String, (Int, Int, Int, Int)))
-> [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
-> [(String, (Int, Int, Int, Int))]
forall a b. (a -> b) -> [a] -> [b]
map (\(String
ys,Int -> OvertonesO -> (Int, Int, Int, Int)
g) -> (String
ys,Int -> OvertonesO -> (Int, Int, Int, Int)
g Int
n OvertonesO
v1)) [(String, Int -> OvertonesO -> (Int, Int, Int, Int))]
v2) String
c1s in
(OvertonesO -> OvertonesO)
-> Int
-> Int
-> Int
-> Int
-> OvertonesO
-> (Float, Float)
-> [OvertonesO]
splitHelp2 OvertonesO -> OvertonesO
h Int
k1 Int
k2 Int
k3 Int
k4 OvertonesO
v1 (Float
x0,Float
y0)
| Bool
otherwise = [OvertonesO
v0]
overConcat :: [OvertonesO] -> OvertonesO
overConcat :: [OvertonesO] -> OvertonesO
overConcat = [OvertonesO] -> OvertonesO
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat