{-# OPTIONS_GHC -threaded #-}
module Composition.Sound.Keyboard (
qwerty2dvorak
, dvorak2qwerty
, input2BL
, input2BLN
, input2BLMN
, readFile2BL
, readFile2BLN
, readFile2BLMN
, readFile2BLGen
, readFile2BLGenN
, readFile2BLGenMN
, readFileDoubles
, readFileDoublesN
, readFileDoublesMN
, readFileDoublesGen
, readFileDoublesGenN
, readFileDoublesGenMN
, takeDoubles
, hashStr2
, convH
) where
import CaseBi.Arr (getBFstL',getBFstLSorted')
import Data.Char (isAsciiLower)
import GHC.Arr
import Data.Foldable.Ix
import GHC.Int (Int64)
takeDoubles :: String -> [Int]
takeDoubles :: String -> [Int]
takeDoubles String
xs = (Char -> Char -> Int) -> String -> String -> [Int]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Char -> Char -> Int
hashStr2 String
xs (String -> [Int]) -> String -> [Int]
forall a b. (a -> b) -> a -> b
$ String -> String
forall a. [a] -> [a]
tail String
xs
qwerty2dvorak :: String -> String
qwerty2dvorak :: String -> String
qwerty2dvorak = (Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
map (Char -> [(Char, Char)] -> Char -> Char
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstL' Char
' ' (String -> String -> [(Char, Char)]
forall a b. [a] -> [b] -> [(a, b)]
zip (String
"/;<>" String -> String -> String
forall a. [a] -> [a] -> [a]
++ [Char
'a'..Char
'z']) String
"wvszaxje.uidchtnmbrl'poygk,qf;"))
dvorak2qwerty :: String -> String
dvorak2qwerty :: String -> String
dvorak2qwerty = (Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
map (Char -> [(Char, Char)] -> Char -> Char
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstL' Char
' ' (String -> String -> [(Char, Char)]
forall a b. [a] -> [b] -> [(a, b)]
zip (String
"',.;" String -> String -> String
forall a. [a] -> [a] -> [a]
++ [Char
'a'..Char
'z']) String
"qwezanihdyujgcvpmlsrxo;kf.,bt/"))
hashStr2 :: Char -> Char -> Int
hashStr2 :: Char -> Char -> Int
hashStr2 Char
x Char
y = Int -> [(Char, Int)] -> Char -> Int
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' Int
57 (String -> [Int] -> [(Char, Int)]
forall a b. [a] -> [b] -> [(a, b)]
zip [Char
'a'..Char
'z'] ([Int] -> [(Char, Int)])
-> ([[Int]] -> [Int]) -> [[Int]] -> [(Char, Int)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Int) -> [Int] -> [Int]
forall a b. (a -> b) -> [a] -> [b]
map (\Int
t -> Int -> [(Char, Int)] -> Char -> Int
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' (Int
26 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
t Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
18) (String -> [Int] -> [(Char, Int)]
forall a b. [a] -> [b] -> [(a, b)]
zip [Char
'a'..Char
'z'] [(Int
26 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
t Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
4)..]) Char
y) ([Int] -> [Int]) -> ([[Int]] -> [Int]) -> [[Int]] -> [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
[[Int]] -> [Int]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([[Int]] -> [(Char, Int)]) -> [[Int]] -> [(Char, Int)]
forall a b. (a -> b) -> a -> b
$ [[Int
0],[Int
6..Int
8],[Int
1],[Int
9..Int
11],[Int
4],[Int
12..Int
16],[Int
2],[Int
17..Int
21],[Int
3],[Int
22..Int
24],[Int
5,Int
25]]) Char
x
input2BL :: IO (String)
input2BL :: IO String
input2BL = (String -> String) -> IO String -> IO String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> (String -> String) -> String -> String
convH [] ((Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter Char -> Bool
isAsciiLower)) IO String
getContents
input2BLN :: Int -> IO (String)
input2BLN :: Int -> IO String
input2BLN Int
n = (String -> String) -> IO String -> IO String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> (String -> String) -> String -> String
convH [] (Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
n (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)) IO String
getContents
input2BLMN :: Int -> Int -> IO (String)
input2BLMN :: Int -> Int -> IO String
input2BLMN Int
m Int
n = (String -> String) -> IO String -> IO String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> (String -> String) -> String -> String
convH [] (Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
n (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> String
forall a. Int -> [a] -> [a]
drop Int
m (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)) IO String
getContents
readFile2BLGen :: String -> FilePath -> IO (String)
readFile2BLGen :: String -> String -> IO String
readFile2BLGen String
ys = (String -> String) -> IO String -> IO String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> (String -> String) -> String -> String
convH String
ys ((Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter Char -> Bool
isAsciiLower)) (IO String -> IO String)
-> (String -> IO String) -> String -> IO String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO String
readFile
readFile2BLGenN :: Int -> String -> FilePath -> IO (String)
readFile2BLGenN :: Int -> String -> String -> IO String
readFile2BLGenN Int
n String
ys = (String -> String) -> IO String -> IO String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> (String -> String) -> String -> String
convH String
ys (Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
n (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)) (IO String -> IO String)
-> (String -> IO String) -> String -> IO String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO String
readFile
readFile2BLGenMN :: Int -> Int -> String -> FilePath -> IO (String)
readFile2BLGenMN :: Int -> Int -> String -> String -> IO String
readFile2BLGenMN Int
m Int
n String
ys = (String -> String) -> IO String -> IO String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> (String -> String) -> String -> String
convH String
ys (Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
n (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> String
forall a. Int -> [a] -> [a]
drop Int
m (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)) (IO String -> IO String)
-> (String -> IO String) -> String -> IO String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO String
readFile
convH :: String -> (String -> String) -> (String -> String)
convH :: String -> (String -> String) -> String -> String
convH String
ys String -> String
f
| String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
ys = String -> String
f
| String
ys String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"q" = String -> String
qwerty2dvorak (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
f
| Bool
otherwise = String -> String
dvorak2qwerty (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
f
readFile2BL :: FilePath -> IO (String)
readFile2BL :: String -> IO String
readFile2BL = String -> String -> IO String
readFile2BLGen []
{-# INLINE readFile2BL #-}
readFile2BLN :: Int -> FilePath -> IO (String)
readFile2BLN :: Int -> String -> IO String
readFile2BLN Int
n = Int -> String -> String -> IO String
readFile2BLGenN Int
n []
{-# INLINE readFile2BLN #-}
readFile2BLMN :: Int -> Int -> FilePath -> IO (String)
readFile2BLMN :: Int -> Int -> String -> IO String
readFile2BLMN Int
m Int
n = Int -> Int -> String -> String -> IO String
readFile2BLGenMN Int
m Int
n []
{-# INLINE readFile2BLMN #-}
readFileDoublesGen :: String -> FilePath -> IO [Int]
readFileDoublesGen :: String -> String -> IO [Int]
readFileDoublesGen String
ys = (String -> [Int]) -> IO String -> IO [Int]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> [Int]
takeDoubles (String -> [Int]) -> (String -> String) -> String -> [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> (String -> String) -> String -> String
convH String
ys ((Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter Char -> Bool
isAsciiLower)) (IO String -> IO [Int])
-> (String -> IO String) -> String -> IO [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO String
readFile
readFileDoublesGenN :: Int -> String -> FilePath -> IO [Int]
readFileDoublesGenN :: Int -> String -> String -> IO [Int]
readFileDoublesGenN Int
n String
ys = (String -> [Int]) -> IO String -> IO [Int]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Int -> [Int] -> [Int]
forall a. Int -> [a] -> [a]
take (Int -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n) ([Int] -> [Int]) -> (String -> [Int]) -> String -> [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [Int]
takeDoubles (String -> [Int]) -> (String -> String) -> String -> [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> (String -> String) -> String -> String
convH String
ys ((Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter Char -> Bool
isAsciiLower)) (IO String -> IO [Int])
-> (String -> IO String) -> String -> IO [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO String
readFile
readFileDoublesGenMN :: Int -> Int -> String -> FilePath -> IO [Int]
readFileDoublesGenMN :: Int -> Int -> String -> String -> IO [Int]
readFileDoublesGenMN Int
m Int
n String
ys = (String -> [Int]) -> IO String -> IO [Int]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Int -> Int -> [Int] -> [Int]
forall a. Eq a => Int -> Int -> [a] -> [a]
s2L (Int -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
m) (Int -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n) ([Int] -> [Int]) -> (String -> [Int]) -> String -> [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [Int]
takeDoubles (String -> [Int]) -> (String -> String) -> String -> [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> (String -> String) -> String -> String
convH String
ys ((Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter Char -> Bool
isAsciiLower)) (IO String -> IO [Int])
-> (String -> IO String) -> String -> IO [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO String
readFile
readFileDoubles :: FilePath -> IO [Int]
readFileDoubles :: String -> IO [Int]
readFileDoubles = String -> String -> IO [Int]
readFileDoublesGen []
{-# INLINE readFileDoubles #-}
readFileDoublesN :: Int -> FilePath -> IO [Int]
readFileDoublesN :: Int -> String -> IO [Int]
readFileDoublesN Int
n = Int -> String -> String -> IO [Int]
readFileDoublesGenN Int
n []
{-# INLINE readFileDoublesN #-}
readFileDoublesMN :: Int -> Int -> FilePath -> IO [Int]
readFileDoublesMN :: Int -> Int -> String -> IO [Int]
readFileDoublesMN Int
m Int
n = Int -> Int -> String -> String -> IO [Int]
readFileDoublesGenMN Int
m Int
n []
{-# INLINE readFileDoublesMN #-}