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 +13/−0
- Phonetic/Languages/Simplified/Lists/DeEnCoding.hs +71/−0
- README.md +1/−1
- Simple/Main.hs +104/−37
- phonetic-languages-simplified-lists-examples.cabal +9/−9
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