packages feed

phonetic-languages-simplified-lists-examples 0.1.0.0 → 0.2.0.0

raw patch · 5 files changed

+198/−47 lines, 5 filesdep +heapsPVP ok

version bump matches the API change (PVP)

Dependencies added: heaps

API changes (from Hackage documentation)

+ Phonetic.Languages.Simplified.Lists.DeEnCoding: decodeToStr :: [Int8] -> String -> String
+ Phonetic.Languages.Simplified.Lists.DeEnCoding: encodeToInt :: [String] -> Int
+ Phonetic.Languages.Simplified.Lists.DeEnCoding: fromHeap :: String -> Heap Int -> [String]
+ Phonetic.Languages.Simplified.Lists.DeEnCoding: indexedL :: Foldable t => b -> t b -> [(Int8, b)]
+ Phonetic.Languages.Simplified.Lists.DeEnCoding: int2l :: Int -> [Int8]
+ Phonetic.Languages.Simplified.Lists.DeEnCoding: intersectInterResults :: [String] -> [String] -> [String]
+ Phonetic.Languages.Simplified.Lists.DeEnCoding: toHeap :: [String] -> Heap Int
+ Phonetic.Languages.Simplified.Lists.DeEnCoding: trans2 :: [[a]] -> [(Int8, [a])]

Files

CHANGELOG.md view
@@ -3,3 +3,16 @@ ## 0.1.0.0 -- 2020-11-29  * First version. Released on an unsuspecting world.++## 0.2.0.0 -- 2020-12-01++* Second version. Added a new module Phonetic.Languages.Simplified.Lists.DeEnCoding for dealing with intersections using heaps functionality.+For lineVariantsG2:+ ** Added for this heaps as a new dependency (a lightweight one).++ ** Added the possibilities to leave the last word in the line on its place (this can lead to preserving rhymes in poetry, for example),+to print either metrices information or not.++ ** Added the possibility to use multiple metrices at once by using +M ... -M blocks of command line arguments. The type of metrics is the first argument and+the numeric arguments for it (as usual) are all further, then again you can specify up to two additional metrices with arguments enclosed by the block++M and -M delimiters.
+ Phonetic/Languages/Simplified/Lists/DeEnCoding.hs view
@@ -0,0 +1,71 @@+-- |+-- Module      :  Phonetic.Languages.Simplified.Lists.DeEnCoding+-- Copyright   :  (c) OleksandrZhabenko 2020+-- License     :  MIT+-- Stability   :  Experimental+-- Maintainer  :  olexandr543@yahoo.com+--+-- Functions to encode and decode 'String' -> \['Int8'\] used in the Simple/Main.hs code.++{-# LANGUAGE BangPatterns #-}++module Phonetic.Languages.Simplified.Lists.DeEnCoding where++import Data.Heap (Heap)+import qualified Data.Heap as Heap+import GHC.Int+import Data.Foldable (foldl')+import Data.List (sortBy,sort)++--default (Int, Double)++encodeToInt :: [String] -> Int+encodeToInt yss = foldl' (\x y -> x * 10 + y) 0 . map (\(j,_) -> fromEnum j) . sortBy (\x y -> compare (snd x) (snd y)) . trans2 $ yss+{-# INLINABLE encodeToInt #-}+++-- | Is taken mostly from the Phonetic.Languages.Simplified.Lists.UniquenessPeriodsG module from the @phonetic-languages-simplified-common@ package.+indexedL :: Foldable t => b -> t b -> [(Int8, b)]+indexedL y zs = foldr f v zs+  where !v = [(toEnum (length zs + 1),y)]+        f x ((j,z):ys) = (j-1,x):(j,z):ys+{-# INLINE indexedL #-}++trans2 :: [[a]] -> [(Int8, [a])]+trans2 = init . indexedL []+{-# INLINE trans2 #-}++int2l :: Int -> [Int8]+int2l n+ | n < 10 = [toEnum n]+ | otherwise = int2l n1 `mappend` [l]+     where (!n1,!l0) = quotRem n 10+           !l = toEnum l0+{-# INLINABLE int2l #-}++-- | So:+-- > decodeToStr (int2l . encodeToInt . words $ xs) xs == unwords . words $ xs+--+decodeToStr :: [Int8] -> String -> String+decodeToStr ys = unwords . map snd . sortBy (\x y -> compare (fst x) (fst y)) . zip ys . sort . words+{-# INLINE decodeToStr #-}++-- | Every 'String' consists of words with whitespace symbols in between.+toHeap :: [String] -> Heap Int+toHeap yss@(xs:xss)+  | null xss = Heap.singleton . encodeToInt . words $ xs+  | otherwise = Heap.fromList . map (encodeToInt . words) $ yss+toHeap _ = Heap.empty+{-# INLINE toHeap #-}++fromHeap :: String -> Heap Int -> [String]+fromHeap ys heap+ | Heap.null heap = []+ | otherwise = map (flip decodeToStr ys . int2l) . Heap.toUnsortedList $ heap+{-# INLINE fromHeap #-}++intersectInterResults :: [String] -> [String] -> [String]+intersectInterResults zss+ | null zss = const []+ | otherwise = fromHeap (head zss) . Heap.intersect (toHeap zss) . toHeap+{-# INLINE intersectInterResults #-}
README.md view
@@ -1,4 +1,4 @@ The short (possibly) instruction how to use the programs of the package phonetic-languages-simplified-lists-examples in Ukrainian is here: -https://web.archive.org/web/20201128230022/https://oleksandrzhabenko.github.io/uk/%D0%9A%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%B0_%D1%96%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D1%96%D1%8F_%D1%89%D0%BE%D0%B4%D0%BE_%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B0%D0%BC%D0%B8_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D1%83_phonetic-languages-simplified-lists-examples.pdf+https://oleksandrzhabenko.github.io/uk/%D0%9A%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%B0_%D1%96%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D1%96%D1%8F_%D1%89%D0%BE%D0%B4%D0%BE_%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B0%D0%BC%D0%B8_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D1%83_phonetic-languages-simplified-lists-examples-0.2.0.0.pdf
Simple/Main.hs view
@@ -24,7 +24,7 @@ import Languages.Phonetic.Ukrainian.PrepareText import Data.Char (isDigit,isAlpha) import Melodics.ByteString.Ukrainian (isUkrainianL)-import qualified Data.List  as L (span,sort)+import qualified Data.List  as L (span,sort,zip4,uncons) import Phonetic.Languages.Simplified.Lists.Ukrainian.FuncRep2RelatedG import Phonetic.Languages.Permutations import Data.SubG hiding (takeWhile,dropWhile)@@ -32,6 +32,7 @@ import Data.Maybe import Data.MinMax.Preconditions import Text.Read (readMaybe)+import Phonetic.Languages.Simplified.Lists.DeEnCoding   -- | Prints the rearrangements with the \"property\" information for the Ukrainian language text. The first command line argument must be a@@ -40,54 +41,118 @@ -- sequenced without interruptions further are treated as the numbers of the intervals (counting is started from 1) which values are moved to the maximum -- values of the metrics interval using the 'unsafeSwapVecIWithMaxI' function. The first textual command line argument should be in the form either \"y0\", -- or \"0y\", or \"yy\", or \"y\", or \"02y\", or \"y2\", or some other variant and specifies, which property or properties is or are evaluated.--- The rest of the command line arguments is the Ukrainian text.+-- The rest of the command line arguments is the Ukrainian text. Besides, you can use multiple metrices (no more than 3 different ones) together by+-- using \"+M\" ... \"-M\" command line arguments. -- -- You can specify constraints according to the 'decodeLConstraints' function between +A and -A command line arguments. If so, the program will--- ask you additional question before proceeding.+-- ask you additional question before proceeding. The \"+M\" ... \"-M\" and \"+A\" ... \"-A\" groups must not mutually intersect one another. main :: IO () main = do- args0 <- getArgs- let args = takeWhile (/= "+A") args0 `mappend` (drop 1 . dropWhile (/= "-A") $ args0)+ args00 <- getArgs+ let args0 = filter (\xs -> xs /= "++B" && xs /= "++L" && xs /= "++BL") args00+     lstW = if any (\x -> x == "++B" || x == "++BL") args00 then True else False -- If one of the command line options is \"++B\" or \"++BL\" then the last word of the line will remain the last one.+     jstL0 = if any (\x -> x == "++L" || x == "++BL") args00 then True else False -- If one of the command line options is \"++L\" or \"++BL\" then the program outputs just lines without metrices values.+     args01 = takeWhile (/= "+A") args0 `mappend` (drop 1 . dropWhile (/= "-A") $ args0)+     args = takeWhile (/= "+M") args01 `mappend` (drop 1 . dropWhile (/= "-M") $ args01)      coeffs = readCF . concat . take 1 $ args -- The first command line argument. If not sure, just pass \"1_\".- if isPair coeffs then generalProc2 args0 coeffs (drop 1 args)- else generalProc2 args0 coeffs args+ if isPair coeffs then generalProc2 jstL0 args0 coeffs (drop 1 args) lstW+ else generalProc2 jstL0 args0 coeffs args lstW +showB :: Int -> Bool -> String+showB n bool+ | n >= 2 && bool == True = 'B':show (n - 1) `mappend` concatMap show [0..n - 2]+ | otherwise = "" -generalProc2 :: [String] -> Coeffs2 -> [String] -> IO ()-generalProc2 args0 coeffs args = do-  let (!numericArgs,!textualArgs) = L.span (all isDigit) $ args-      !xs = concat . take 1 . fLines . unwords . drop 1 $ textualArgs-      !l = length . words $ xs-      !argCs = catMaybes (fmap (readMaybeECG l) . drop 1 . dropWhile (/= "+A") . takeWhile (/= "-A") $ args0)-      !arg0 = fromMaybe 1 $ (readMaybe (concat . take 1 $ numericArgs)::Maybe Int)-      !numberI = fromMaybe 1 $ (readMaybe (concat . drop 1 . take 2 $ numericArgs)::Maybe Int)-      !choice = concat . take 1 $ textualArgs-  if compare l 2 == LT then let !frep20 = chooseMax id coeffs choice in print1el choice . (:[]) . toResultR frep20 $ xs+forMultipleMetrices :: [String] -> [(String,[String])]+forMultipleMetrices (xs:xss)+ | any isAlpha xs = (xs,yss):forMultipleMetrices zss+ | otherwise = []+     where l = length . takeWhile (all isDigit) $ xss+           (yss,zss) = splitAt l xss+forMultipleMetrices _ = []++generalProc2 :: Bool -> [String] -> Coeffs2 -> [String] -> Bool -> IO ()+generalProc2 jstL0 args0 coeffs args lstW2 = do+  let !argMss = take 3 . filter (not . null) . forMultipleMetrices . drop 1 . dropWhile (/= "+M") . takeWhile (/= "-M") $ args0+  if null argMss then do+   let (!numericArgs,!textualArgs) = L.span (all isDigit) $ args+       !xs = concat . take 1 . fLines . unwords . drop 1 $ textualArgs+       !l = length . words $ xs+       !argCs = catMaybes (fmap (readMaybeECG (l - 1)) . (showB l lstW2:) . drop 1 . dropWhile (/= "+A") . takeWhile (/= "-A") $ args0)+       !arg0 = fromMaybe 1 $ (readMaybe (concat . take 1 $ numericArgs)::Maybe Int)+       !numberI = fromMaybe 1 $ (readMaybe (concat . drop 1 . take 2 $ numericArgs)::Maybe Int)+       !choice = concat . take 1 $ textualArgs+       !intervalNmbrs = (\zs -> if null zs then VB.singleton numberI else VB.uniq . VB.fromList $ zs) . L.sort . filter (<= numberI) .+           map (\t -> fromMaybe numberI $ (readMaybe t::Maybe Int)) . drop 2 $ numericArgs+   if compare l 2 == LT then let !frep20 = chooseMax id coeffs choice in print1el jstL0 choice . (:[]) . toResultR frep20 $ xs+   else do+    let !subs = subG " 01-" xs+    if null argCs then let !perms = genPermutationsL l in do+          temp <- generalProcMs coeffs perms subs (intervalNmbrs, arg0, numberI, choice)+          print1el jstL0 choice temp+    else do+     correct <- printWarning xs+     if correct == "n" then putStrLn "You stopped the program, please, if needed, run it again with better arguments. "+     else let !perms = decodeLConstraints argCs . genPermutationsL $ l in do+          temp <- generalProcMs coeffs perms subs (intervalNmbrs, arg0, numberI, choice)+          print1el jstL0 choice temp   else do-   let !subs = subG " 01-" xs-   if null argCs then let !perms = genPermutationsL l in generalProc1 coeffs numericArgs arg0 numberI choice perms subs+   let !choices = map fst argMss+       !numericArgss = map snd argMss+       !arg0s = map (\ts -> fromMaybe 1 $ (readMaybe (concat . take 1 $ ts)::Maybe Int)) numericArgss+       !numberIs = map (\ts -> fromMaybe 1 $ (readMaybe (concat . drop 1 . take 2 $ ts)::Maybe Int)) numericArgss+       !intervalNmbrss = map (\us -> let !numberI = fromMaybe 1 $ (readMaybe (concat . drop 1 . take 2 $ us)::Maybe Int) in+         (\zs -> if null zs then VB.singleton numberI else VB.uniq . VB.fromList $ zs) . L.sort . filter (<= numberI) .+           map (\t -> fromMaybe numberI $ (readMaybe t::Maybe Int)) . drop 2 $ us) $ numericArgss+       !argsZipped = L.zip4 intervalNmbrss arg0s numberIs choices+       !xs = concat . take 1 . fLines . unwords $ args+       !l = length . words $ xs+       !argCs = catMaybes (fmap (readMaybeECG (l - 1)) . (showB l lstW2:) . drop 1 . dropWhile (/= "+A") . takeWhile (/= "-A") $ args0)+   if compare l 2 == LT then let !frep20 = chooseMax id coeffs (concat . take 1 $ choices) in print1el jstL0 (concat . take 1 $ choices) . (:[]) . toResultR frep20 $ xs    else do-    putStr "Please, check whether the line below corresponds and is consistent with the data you have specified between the +A and -A options. "-    putStrLn "If it is inconsistent then enter further \"n\", press Enter and then run the program again with better arguments. "-    putStrLn "If the line is consistent with your input between +A and -A then just press Enter to proceed further. "-    putStrLn xs-    correct <- getLine-    if correct == "n" then putStrLn "You stopped the program, please, if needed, run it again with better arguments. "-    else let !perms = decodeLConstraints argCs . genPermutationsL $ l in generalProc1 coeffs numericArgs arg0 numberI choice perms subs+    let !subs = subG " 01-" xs+    if null argCs then let !perms = genPermutationsL l in generalProcMMs coeffs argsZipped perms subs+    else do+     correct <- printWarning xs+     if correct == "n" then putStrLn "You stopped the program, please, if needed, run it again with better arguments. "+     else let !perms = decodeLConstraints argCs . genPermutationsL $ l in generalProcMMs coeffs argsZipped perms subs -generalProc1 :: Coeffs2 -> [String] -> Int -> Int -> String -> [VB.Vector Int] -> [String] -> IO ()-generalProc1 coeffs numericArgs arg0 numberI choice perms subs = do-  if compare numberI 2 == LT then let !frep2 = chooseMax id coeffs choice in print1el choice . fst . maximumGroupsClassificationR arg0 .+printWarning :: String -> IO String+printWarning xs = do+  putStr "Please, check whether the line below corresponds and is consistent with the constraints you have specified between the +A and -A options. "+  putStr "Check also whether you have specified the \"++B\" or \"++BL\" option(s). "+  putStrLn "If it is inconsistent then enter further \"n\", press Enter and then run the program again with better arguments. "+  putStrLn "If the line is consistent with your input between +A and -A then just press Enter to proceed further. "+  putStrLn xs+  getLine++generalProcMs :: Coeffs2 -> [VB.Vector Int] -> [String] -> (VB.Vector Int,Int,Int,String) -> IO [Result [] Char Float Float]+generalProcMs coeffs perms subs (intervalNmbrs, arg0, numberI, choice) = do+  if compare numberI 2 == LT then let !frep2 = chooseMax id coeffs choice in return . fst . maximumGroupsClassificationR arg0 .     map (toResultR frep2) . uniquenessVariants2GNBL ' ' id id id perms $ subs   else do     let !variants1 = uniquenessVariants2GNBL ' ' id id id perms subs-        !intervalNmbrs = (\zs -> if null zs then VB.singleton numberI else VB.uniq . VB.fromList $ zs) . L.sort . filter (<= numberI) .-           map (\t -> fromMaybe numberI $ (readMaybe t::Maybe Int)) . drop 2 $ numericArgs         !frep20 = chooseMax id coeffs choice         (!minE,!maxE) = minMax11C . map (toMetrices' frep20) $ variants1         !frep2 = chooseMax (unsafeSwapVecIWithMaxI minE maxE numberI intervalNmbrs) coeffs choice-    print1el choice . fst . maximumGroupsClassificationR arg0 . map (toResultR frep2) $ variants1+    return . fst . maximumGroupsClassificationR arg0 . map (toResultR frep2) $ variants1 +generalProcMMs :: Coeffs2 -> [(VB.Vector Int,Int,Int,String)] -> [VB.Vector Int] -> [String] -> IO ()+generalProcMMs coeffs rs perms subs = do+  genVariants <- mapM (generalProcMs coeffs perms subs) rs+  let !lineVs = map (map line) genVariants+      !l3 = length lineVs+  case l3 of+   3 -> mapM_ putStrLn l123+       where Just (!l1,!ls) = L.uncons lineVs+             [!l12,!l13] = map (intersectInterResults l1) ls+             !l123 = intersectInterResults l12 l13+   2 -> mapM_ putStrLn . intersectInterResults l1 $ l3+       where [!l1,!l3] = lineVs+   _ -> putStrLn "You have specified just one variant of the metrices. " >> do+          temp <- generalProcMs coeffs perms subs (head rs)+          mapM_ (putStrLn . line) temp+ fLines :: String -> [String] fLines ys =   let preText = filter (any (\x -> isUkrainianL x && isAlpha x)) . prepareText $ ys@@ -96,8 +161,10 @@       g _ _ = []         in g preText wss -print1el :: String -> [Result [] Char Float Float] -> IO ()-print1el choice (x:xs) = putStrLn (line x) >> putStrLn (showFFloat ch (metrices x) "") >>-  putStrLn (showFFloat ch (transMetrices x) "") >> print1el choice xs-    where !ch = precChoice choice-print1el _ _ = return ()+print1el :: Bool -> String -> [Result [] Char Float Float] -> IO ()+print1el jstlines choice (x:xs)+ | jstlines == True = putStrLn (line x) >> print1el True choice xs+ | otherwise = putStrLn (line x) >> putStrLn (showFFloat ch (metrices x) "") >>+     putStrLn (showFFloat ch (transMetrices x) "") >> print1el False choice xs+       where !ch = precChoice choice+print1el _ _ _ = return ()
phonetic-languages-simplified-lists-examples.cabal view
@@ -2,7 +2,7 @@ -- further documentation, see http://haskell.org/cabal/users-guide/  name:                phonetic-languages-simplified-lists-examples-version:             0.1.0.0+version:             0.2.0.0 synopsis:            Simplified and somewhat optimized version of the phonetic-languages-examples. description:         Is intended to use more functionality of lists and subG package. homepage:            https://hackage.haskell.org/package/phonetic-languages-simplified-lists-examples@@ -17,36 +17,36 @@ cabal-version:       >=1.10  library-  exposed-modules:     Phonetic.Languages.Simplified.Lists.Ukrainian.FuncRep2RelatedG+  exposed-modules:     Phonetic.Languages.Simplified.Lists.Ukrainian.FuncRep2RelatedG, Phonetic.Languages.Simplified.Lists.DeEnCoding   -- other-modules:   other-extensions:    BangPatterns-  build-depends:       base >=4.8 && <4.15, phonetic-languages-simplified-common >=0.3.4 && <1, phonetic-languages-simplified-properties-lists >=0.2 && <1, vector >=0.11 && < 0.14, mmsyn2 >=0.3 && <1, phonetic-languages-constraints >=0.4 && <1+  build-depends:       base >=4.8 && <4.15, phonetic-languages-simplified-common >=0.3.4 && <1, phonetic-languages-simplified-properties-lists >=0.2 && <1, vector >=0.11 && < 0.14, mmsyn2 >=0.3 && <1, phonetic-languages-constraints >=0.4 && <1, heaps >= 0.3.6.1 && <1   -- hs-source-dirs:   default-language:    Haskell2010  executable lineVariantsG2   main-is:             Main.hs-  other-modules:       Phonetic.Languages.Simplified.Lists.Ukrainian.FuncRep2RelatedG+  other-modules:       Phonetic.Languages.Simplified.Lists.Ukrainian.FuncRep2RelatedG, Phonetic.Languages.Simplified.Lists.DeEnCoding   other-extensions:    BangPatterns-  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic >=0.3.1.2 && <1, vector >=0.11 && <0.14, phonetic-languages-simplified-common >=0.3.4 && <1, phonetic-languages-simplified-properties-lists >=0.2 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.3 && <1, uniqueness-periods-vector-filters >=0.3 && <1, vector >=0.11 && <0.14, phonetic-languages-plus >=0.1 && <1, subG >=0.4 && < 1, mmsyn2 >= 0.3 && <1, phonetic-languages-constraints >=0.4 && <1, phonetic-languages-permutations >= 0.2 && <1+  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic >=0.3.1.2 && <1, vector >=0.11 && <0.14, phonetic-languages-simplified-common >=0.3.4 && <1, phonetic-languages-simplified-properties-lists >=0.2 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.3 && <1, uniqueness-periods-vector-filters >=0.3 && <1, vector >=0.11 && <0.14, phonetic-languages-plus >=0.1 && <1, subG >=0.4 && < 1, mmsyn2 >= 0.3 && <1, phonetic-languages-constraints >=0.4 && <1, phonetic-languages-permutations >= 0.2 && <1, heaps >= 0.3.6.1 && <1   ghc-options:         -threaded -rtsopts   hs-source-dirs:      ., Simple   default-language:    Haskell2010  executable rewritePoemG2   main-is:             Main.hs-  other-modules:       Phonetic.Languages.Simplified.Lists.Ukrainian.FuncRep2RelatedG+  other-modules:       Phonetic.Languages.Simplified.Lists.Ukrainian.FuncRep2RelatedG, Phonetic.Languages.Simplified.Lists.DeEnCoding   other-extensions:    BangPatterns-  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic >=0.3.1.2 && <1, vector >=0.11 && <0.14, phonetic-languages-simplified-common >=0.3.4 && <1, phonetic-languages-simplified-properties-lists >=0.2 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.3 && <1, uniqueness-periods-vector-filters >=0.3 && <1, vector >=0.11 && <0.14, phonetic-languages-plus >=0.1 && <1, subG >= 0.4 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, mmsyn2 >=0.3 && <1, phonetic-languages-constraints >=0.4 && <1, phonetic-languages-permutations >= 0.2 && <1+  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic >=0.3.1.2 && <1, vector >=0.11 && <0.14, phonetic-languages-simplified-common >=0.3.4 && <1, phonetic-languages-simplified-properties-lists >=0.2 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.3 && <1, uniqueness-periods-vector-filters >=0.3 && <1, vector >=0.11 && <0.14, phonetic-languages-plus >=0.1 && <1, subG >= 0.4 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, mmsyn2 >=0.3 && <1, phonetic-languages-constraints >=0.4 && <1, phonetic-languages-permutations >= 0.2 && <1, heaps >= 0.3.6.1 && <1   ghc-options:         -threaded -rtsopts   hs-source-dirs:      ., Lines   default-language:    Haskell2010  executable propertiesTextG2   main-is:             Main.hs-  other-modules:       Phonetic.Languages.Simplified.Lists.Ukrainian.FuncRep2RelatedG+  other-modules:       Phonetic.Languages.Simplified.Lists.Ukrainian.FuncRep2RelatedG, Phonetic.Languages.Simplified.Lists.DeEnCoding   other-extensions:    BangPatterns-  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic >=0.3.1.2 && <1, vector >=0.11 && <0.14, phonetic-languages-simplified-common >=0.3.4 && <1, phonetic-languages-simplified-properties-lists >=0.2 && <1, phonetic-languages-ukrainian >=0.3 && <1, uniqueness-periods-vector-filters >=0.3 && <1, uniqueness-periods-vector-stats >=0.1.2 && <1, parallel >=3.2.0.6 && <4, phonetic-languages-plus >=0.1 && <1, subG >= 0.4 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, phonetic-languages-permutations >= 0.2 && <1, mmsyn2 >= 0.3 && < 1+  build-depends:       base >=4.8 && <4.15, ukrainian-phonetics-basic >=0.3.1.2 && <1, vector >=0.11 && <0.14, phonetic-languages-simplified-common >=0.3.4 && <1, phonetic-languages-simplified-properties-lists >=0.2 && <1, phonetic-languages-ukrainian >=0.3 && <1, uniqueness-periods-vector-filters >=0.3 && <1, uniqueness-periods-vector-stats >=0.1.2 && <1, parallel >=3.2.0.6 && <4, phonetic-languages-plus >=0.1 && <1, subG >= 0.4 && < 1, phonetic-languages-rhythmicity >=0.1.2 && <1, phonetic-languages-permutations >= 0.2 && <1, mmsyn2 >= 0.3 && < 1, heaps >= 0.3.6.1 && <1   ghc-options:         -threaded -rtsopts   hs-source-dirs:      ., GetInfo   default-language:    Haskell2010