packages feed

uniqueness-periods-vector-examples 0.11.0.0 → 0.12.0.0

raw patch · 7 files changed

+147/−78 lines, 7 filesdep ~uniqueness-periods-vector-properties

Dependency ranges changed: uniqueness-periods-vector-properties

Files

ChangeLog.md view
@@ -113,3 +113,14 @@ ## 0.10.0.0 -- 2020-10-07  * Tenth version. Changed the behaviour of the lineVariants and rewritePoem executables. Now you can introspect the inner structure of the variants of the line or for the whole text. Added build dependencies to it (they are already included for other executables). Updated the versions because of better printing output.++## 0.11.0.0 -- 2020-10-09++* Eleventh version. Switched to the new versions of the uniqueness-periods-common and related packages, so that it can be more flexible in the future.+The breaking change. Please, update the packages to the latest version available.++## 0.12.0.0 -- 2020-10-10++* Twelfth version. Updated dependencies, switched to the [Float] only versions of the FuncRep and inner functions. Introduced a new textual command line+argument that allows to choose which metrices (called \"properties\") to use from uniqueness-periods-vector-properties package. Made a package+containing also two libraries which shares the common functions.
+ Data/Statistics/RulesIntervals.hs view
@@ -0,0 +1,39 @@+-- |+-- Module      :  Data.Statistics.RulesIntervals+-- Copyright   :  (c) OleksandrZhabenko 2020+-- License     :  MIT+-- Stability   :  Experimental+-- Maintainer  :  olexandr543@yahoo.com+--+-- Additional statistic rules to choose the number of the intervals.++{-# LANGUAGE BangPatterns #-}++module Data.Statistics.RulesIntervals where++import Data.Lists.FLines (newLineEnding)+import GHC.Real (ceiling)+import GHC.Float (int2Float)++sturgesH :: Int -> Int+sturgesH n+  | compare n 0 == GT = ceiling (logBase 2 (int2Float n))+  | otherwise = error $ "sturgesH: undefined for the argument " ++ show n ++ newLineEnding+{-# INLINE sturgesH #-}++-- | According to @В. П. Левинський@ (V. P. Levynskyi) from @Опря А. Т. Статистика (модульний варіант з програмованою формою контролю знань).+-- Навч. посіб. --- К.: Центр учбової літератури, 2012. --- 448 с. ISBN 978-611-01-0266-7@) page 60. Always return odd values.+levynskyiMod :: Int -> Int+levynskyiMod n+  | compare n 100 == LT = g n+  | compare n 200 == LT = 11+  | compare n 300 == LT = 13+  | compare n 400 == LT = 15+  | compare n 500 == LT = 17+  | otherwise = let !k = sturgesH n in if even k then k + 7 else k + 8+       where g n+              | compare n 60 == GT = 9+              | compare n 40 == GT = 7+              | compare n 20 == GT = 5+              | otherwise = 3+{-# INLINABLE levynskyiMod #-}
+ Languages/UniquenessPeriods/Vector/FuncRepRelated.hs view
@@ -0,0 +1,29 @@+-- |+-- Module      :  Languages.UniquenessPeriods.Vector.FuncRepRelated+-- Copyright   :  (c) OleksandrZhabenko 2020+-- License     :  MIT+-- Stability   :  Experimental+-- Maintainer  :  olexandr543@yahoo.com+--+-- Functions to choose from the 'FuncRep' variants.++module Languages.UniquenessPeriods.Vector.FuncRepRelated where++import Languages.UniquenessPeriods.Vector.Data+import String.Languages.UniquenessPeriods.Vector+import Languages.UniquenessPeriods.Vector.PropertiesFuncRep++-- | Allows to choose the variant of the computations in case of usual processment.+chooseMax :: String -> FuncRep String (UniquenessGeneral2 Char) [Float]+chooseMax xs+  | xs == "y0" = procDiverse2F+  | xs == "0y" = procRhythmicity23F+  | otherwise = procBothF++-- | Allows to choose the variant of the computations in case of minimum lookup. Uses @-neg@ variants.+chooseMin :: String -> FuncRep String (UniquenessGeneral2 Char) [Float]+chooseMin xs+  | xs == "y0" = procDiverse2Fneg+  | xs == "0y" = procRhythmicity23Fneg+  | otherwise = procBothFneg+
Lines/Main.hs view
@@ -31,18 +31,20 @@ import Languages.UniquenessPeriods.Vector.Auxiliary import GHC.Float (int2Float) import Data.Char (isDigit)+import Languages.UniquenessPeriods.Vector.FuncRepRelated  -- | The function allows to rewrite the Ukrainian text in the file given as the first command line argument to a new file. In between, it is rewritten -- so that every last word on the lines is preserved at theirs position, and the rest of the line is rearranged using the specified other command line -- arguments. They are general for the whole program. The further command line arguments are: the number of the intervals and the numbers of the intervals -- that are swapped with the maximum one so that they are available for further usage by the program. See documentation for @uniqueness-periods-vector-filters@ -- package--- https://hackage.haskell.org/package/uniqueness-periods-vector-filters+-- 'https://hackage.haskell.org/package/uniqueness-periods-vector-filters' -- main :: IO () main = do   args <- getArgs-  let !numericArgs = filter (all isDigit) . drop 1 $ args+  let !numericArgs = filter (all isDigit) . drop 2 $ args+      !choice = concat . drop 1 . take 2 $ args       !numberI = fromMaybe 1 $ (readMaybe (concat . take 1 $ numericArgs)::Maybe Int)       !file = concat . take 1 $ args   contents <- readFile file@@ -50,43 +52,43 @@       !lasts = map (\ts -> if null . words $ ts then [] else last . words $ ts) flines   if compare numberI 2 == LT then do     let !zs = if compare (length . words . concat . take 1 $ flines) 3 == LT then concat . take 1 $ flines else lastFrom3 . headU2 . fst . get22 .-               uniqNProperties2GN " 01-" (PA [] (concat . take 1 $ lasts)) 1 1 (V.singleton (oneProperty)) (procDiverse2I) . unwords . init . words . concat . take 1 $ flines-    toFile (file ++ "new.txt") (zs:(noDoubleWords . circle2 (concat . take 1 $ lasts) [] . drop 1 $ flines))+               uniqNProperties2GN " 01-" (PA [] (concat . take 1 $ lasts)) 1 1 (V.singleton (oneProperty)) (chooseMax choice) . unwords . init . words . concat . take 1 $ flines+    toFile (file ++ "new.txt") (zs:(noDoubleWords . circle2 (concat . take 1 $ lasts) choice [] . drop 1 $ flines))   else do     let !intervalNmbrs = (\vs -> if null vs then V.singleton numberI else V.uniq . V.fromList $ vs) . sort . filter (<= numberI) .            map (\t -> fromMaybe numberI $ (readMaybe t::Maybe Int)) . drop 2 $ numericArgs         !us = words . concat . take 1 $ flines         !xs = if compare (length us) 2 == LT then [] else unwords . init $ us-        (!maxE,!minE) = runEval ((parTuple2 rpar rpar) ((\k -> if k == 0 then 1.0 else int2Float k) . (\rs -> if null rs then 0 else head rs) . firstFrom3 .-          maximumElBy 1 (V.singleton (oneProperty)) $ UL2 ([],uniquenessVariants2GN " 01-" (V.singleton (oneProperty)) (procDiverse2I) $ xs), (\k -> if k == 0 then 1.0 else int2Float k) . abs . (\rs -> if null rs then 0 else head rs) .+        (!maxE,!minE) = runEval ((parTuple2 rpar rpar) ((\k -> if k == 0.0 then 1.0 else k) . (\rs -> if null rs then 0.0 else head rs) . firstFrom3 .+          maximumElBy 1 (V.singleton (oneProperty)) $ UL2 ([],uniquenessVariants2GN " 01-" (V.singleton (oneProperty)) (chooseMax choice) $ xs), (\k -> if k == 0.0 then 1.0 else k) . abs . (\rs -> if null rs then 0.0 else head rs) .               firstFrom3 . maximumElBy 1 (V.singleton (oneProperty)) $ UL2 ([],uniquenessVariants2GN " 01-" (V.singleton (oneProperty))-                (procDiverse2Ineg) $ xs)))+                (chooseMin choice) $ xs)))         !zs = if compare (length . words . concat . take 1 $ flines) 3 == LT then concat . take 1 $ flines else lastFrom3 . headU2 . fst . get22 .           uniqNProperties2GN " 01-" (PA [] (concat . take 1 $ lasts)) 1 1 (V.singleton (unsafeSwapVecIWithMaxI minE maxE numberI intervalNmbrs .-            oneProperty)) (procDiverse2F) .+            oneProperty)) (chooseMax choice) .                unwords . init . words . concat . take 1 $ flines-    toFile (file ++ "new.txt") (zs:(noDoubleWords . circle2I (concat . take 1 $ lasts) [] numberI intervalNmbrs minE maxE . drop 1 $ flines))+    toFile (file ++ "new.txt") (zs:(noDoubleWords . circle2I (concat . take 1 $ lasts) choice [] numberI intervalNmbrs minE maxE . drop 1 $ flines))  -- | Processment without rearrangements.-circle2 :: String -> [String] -> [String] -> [String]-circle2 xs yss xss+circle2 :: String -> String -> [String] -> [String] -> [String]+circle2 xs choice yss xss  | null xss = yss- | otherwise = circle2 (if null rs then [] else last rs) (ws:yss) tss+ | otherwise = circle2 (if null rs then [] else last rs) choice (ws:yss) tss       where (!zss,!tss) = splitAt 1 xss             !rs = words . concat $ zss             !ws = if compare (length rs) 3 == LT then unwords (xs:rs) else lastFrom3 . headU2 . fst . get22 .-                    uniqNProperties2GN " 01-" (PA xs (if null rs then [] else last rs)) 1 1 (V.singleton (oneProperty)) (procDiverse2I) . unwords . init $ rs+                    uniqNProperties2GN " 01-" (PA xs (if null rs then [] else last rs)) 1 1 (V.singleton (oneProperty)) (chooseMax choice) . unwords . init $ rs  -- | Processment with rearrangements.-circle2I :: String -> [String] -> Int -> V.Vector Int -> Float -> Float -> [String] -> [String]-circle2I xs yss numberI vI minE maxE xss+circle2I :: String -> String -> [String] -> Int -> V.Vector Int -> Float -> Float -> [String] -> [String]+circle2I xs choice yss numberI vI minE maxE xss  | null xss = yss- | otherwise = circle2I (if null rs then [] else last rs) (ws:yss) numberI vI minE maxE tss+ | otherwise = circle2I (if null rs then [] else last rs) choice (ws:yss) numberI vI minE maxE tss       where (!zss,!tss) = splitAt 1 xss             !rs = words . concat $ zss             !ws = if compare (length rs) 3 == LT then unwords (xs:rs) else lastFrom3 . headU2 . fst . get22 .                     uniqNProperties2GN " 01-" (PA xs (if null rs then [] else last rs)) 1 1 (V.singleton (unsafeSwapVecIWithMaxI minE maxE numberI vI .-                      oneProperty)) (procDiverse2F) . unwords . init $ rs+                      oneProperty)) (chooseMax choice) . unwords . init $ rs  headU2 :: [UniquenessG1 a b] -> UniquenessG1 a b headU2 zs
Proportion/Main.hs view
@@ -8,7 +8,8 @@ -- Analyzes a poetic text in Ukrainian, for every line prints statistic data and -- then for the whole poem prints the hypothesis evaluation information. Since the 0.4.0.0 version -- the program tries to be more accurate in cases of the lines consisting entirely of the words--- which are unique in phonetic meaning alongside the line. Another hypothesis is that the distribution+-- which are unique in phonetic meaning alongside the line. Another hypothesis is for the seventh command line+-- argument (since the 0.12.0.0 version) equal to \"y0\" that the distribution -- of the placement of the actual poetic text in Ukrainian is not one of the standard distributions. -- It can probably have approximately a form of and is different for different authors: --@@ -53,6 +54,8 @@ import Data.Char (isAlpha) import Numeric.Stats import Data.Lists.FLines hiding (mconcat)+import Data.Statistics.RulesIntervals+import Languages.UniquenessPeriods.Vector.FuncRepRelated #ifdef __GLASGOW_HASKELL__ #if __GLASGOW_HASKELL__==708 /* code that applies only to GHC 7.8.* */@@ -74,19 +77,20 @@       !compareMode = fromMaybe 0 (readMaybe (concat . take 1 . drop 4 $ args)::(Maybe Int)) -- The fifth command line argument except those ones that are RTS arguments. Set to 1 if you would like to print the original version and the concatenated one's (into one line) analyses.       !gzS = concat . take 1 . drop 1 $ args       !twoInParallel = fromMaybe 1 (readMaybe (concat . take 1 . drop 5 $ args)::(Maybe Int)) -- The sixth command line argument that controls whether if the fifth command line argument is set to \"1\" then the evaluation is done in parallel or not (set to \"1\" --- the default one --- if you would like to evaluate in parallel, otherwise --- just usual sequential evaluation).+      !choice = concat . drop 6 . take 7 $ args -- The seventh command line argument that controls what properties are used.   contents <- readFile file   if compareMode == 0 then do    let !flines = fLines toOneLine contents-   innerProc printLine flines gzS-  else let tau !k = (let !flines1 = fLines k contents in innerProc printLine flines1 gzS) in+   innerProc printLine choice flines gzS+  else let tau !k = (let !flines1 = fLines k contents in innerProc printLine choice flines1 gzS) in     case twoInParallel of      1 -> ($|) (mapM_ id) rpar (map tau [1, 0])      _ -> mapM_ tau [1, 0] -innerProc :: Int -> [String] -> String -> IO ()-innerProc printLine flInes gzS = do+innerProc :: Int -> String -> [String] -> String -> IO ()+innerProc printLine choice flInes gzS = do     let !gz = getIntervalsN gzS flInes -- Obtained from the second command line argument except those ones that are for RTS-        (!data31,!wordsCnt0_data32) = unzip . getData3 printLine gz $ flInes+        (!data31,!wordsCnt0_data32) = unzip . getData3 printLine gz choice $ flInes         !data4 = filter (/= 0) . map fst $ data31     if null data4 then putStrLn (replicate 102 '-') >> putStrLn "1.000+-0.000\tALL!" >> putStrLn (replicate 102 '=') -- Well, this means that all the text consists of the unique (in phonetic meaning) words alongside every line. A rather rare occurrence.     else do@@ -106,42 +110,19 @@   | otherwise = fromMaybe 9 (readMaybe xs::(Maybe Int)) {-# INLINE getIntervalsN #-} -sturgesH :: Int -> Int-sturgesH n-  | compare n 0 == GT = ceiling (logBase 2 (int2Float n))-  | otherwise = error $ "sturgesH: undefined for the argument " ++ show n ++ newLineEnding-{-# INLINE sturgesH #-}---- | According to @В. П. Левинський@ (V. P. Levynskyi) from @Опря А. Т. Статистика (модульний варіант з програмованою формою контролю знань).--- Навч. посіб. --- К.: Центр учбової літератури, 2012. --- 448 с. ISBN 978-611-01-0266-7@) page 60. Always return odd values.-levynskyiMod :: Int -> Int-levynskyiMod n-  | compare n 100 == LT = g n-  | compare n 200 == LT = 11-  | compare n 300 == LT = 13-  | compare n 400 == LT = 15-  | compare n 500 == LT = 17-  | otherwise = let !k = sturgesH n in if even k then k + 7 else k + 8-       where g n-              | compare n 60 == GT = 9-              | compare n 40 == GT = 7-              | compare n 20 == GT = 5-              | otherwise = 3-{-# INLINABLE levynskyiMod #-}--getData3 :: Int -> Int -> [String] -> [((Float,String),(Int,Int))]-getData3 printLine gz = parMap rseq (\ts ->-  let (!maxE,!minE,!data2) = runEval ((parTuple3 rpar rseq rseq) ((\k -> if k == 0 then 1 else k) . (\rs -> if null rs then 0 else head rs) . firstFrom3 .-         maximumElBy 1 (V.singleton (oneProperty)) $ UL2 ([],uniquenessVariants2GN " 01-" (V.singleton (oneProperty)) (procDiverse2I) $ ts), (\k -> if k == 0 then 1 else k) . abs . (\rs -> if null rs then 0 else head rs) .+getData3 :: Int -> Int -> String -> [String] -> [((Float,String),(Int,Int))]+getData3 printLine gz choice = parMap rseq (\ts ->+  let (!maxE,!minE,!data2) = runEval ((parTuple3 rpar rseq rseq) ((\k -> if k == 0.0 then 1.0 else k) . (\rs -> if null rs then 0.0 else head rs) . firstFrom3 .+         maximumElBy 1 (V.singleton (oneProperty)) $ UL2 ([],uniquenessVariants2GN " 01-" (V.singleton (oneProperty)) (chooseMax choice) $ ts), (\k -> if k == 0.0 then 1.0 else k) . abs . (\rs -> if null rs then 0.0 else head rs) .               firstFrom3 . maximumElBy 1 (V.singleton (oneProperty)) $ UL2 ([],uniquenessVariants2GN " 01-" (V.singleton (oneProperty))-                (procDiverse2Ineg) $ ts),-                  (\k -> if k == 0 then 1 else k) . diverse2 . uniquenessPeriodsVector3 " 01-" . aux0 . convertToProperUkrainian $ ts))+                (chooseMin choice) $ ts),+                  (\k -> if k == 0.0 then 1.0 else k) . head . getAC (chooseMax choice) $ ts))       (!wordsN,!intervalN)          | maxE == 1 = (0, 0)-         | otherwise = runEval ((parTuple2 rpar rpar) (length . words $ ts, intervalNRealFrac (int2Float minE) (int2Float maxE) gz (int2Float data2)))-      (!ratio,!printedLine) = (if maxE == 1 then 0.0 else 2.0 * fromIntegral data2 / fromIntegral (minE + maxE), mconcat [show $ (minE::Int),-        '\t':show (data2::Int), '\t':show (maxE::Int), '\t':showFFloat (Just 4) (fromIntegral data2 / fromIntegral minE) "\t",-           showFFloat (Just 4) (fromIntegral maxE / fromIntegral data2) "\t", showFFloat (Just 4) ratio "\t", '\t':show (wordsN::Int),+         | otherwise = runEval ((parTuple2 rpar rpar) (length . words $ ts, intervalNRealFrac minE maxE gz data2))+      (!ratio,!printedLine) = (if maxE == 1 then 0.0 else 2.0 * data2 / (minE + maxE), mconcat [showFFloat (Just 4) minE $ "\t",+        showFFloat (Just 4) data2 "\t", showFFloat (Just 4) maxE "\t", showFFloat (Just 4) (data2 / minE) "\t",+           showFFloat (Just 4) (maxE / data2) "\t", showFFloat (Just 4) ratio "\t", '\t':show (wordsN::Int),              '\t':show (intervalN::Int), if printLine == 1 then '\t':ts else ""]) in ((ratio,printedLine),(wordsN,intervalN))) {-# INLINABLE getData3 #-} @@ -159,6 +140,3 @@            '\t':show (length data31)], newLineEnding, mconcat . map (\r -> show r ++ "\t") $ [2..7], newLineEnding, mconcat .               map (\r ->  (show . length . takeWhile (== r) . dropWhile (/= r) . map fst $ pairs) ++ "\t") $ [2..7], newLineEnding, replicate 102 '*'] {-# INLINE generalInfo1 #-}---
Simple/Main.hs view
@@ -31,14 +31,15 @@ import Languages.UniquenessPeriods.Vector.Data import Data.Char (isDigit) import Data.List (span,sort)-import GHC.Float (int2Float)-+--import GHC.Float (int2Float)+import Languages.UniquenessPeriods.Vector.FuncRepRelated  -- | Prints the rearrangements with the \"property\" information for the Ukrainian language text. The first command line argument must be a -- positive 'Int' number and is a number of printed variants for the line (if they are present, otherwise just all possible variants are printed). -- The second one is the number of the intervals into which the all range of possible metrics values are divided. The next numeric arguments that must be -- 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 rest of the command line arguments is the Ukrainian text.+-- 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\" and specifies, which property or properties is or are evaluated. The rest of the command line arguments is the Ukrainian text. -- -- The most interesting is the first line of the output. But other ones also are noteworthy. main :: IO ()@@ -47,14 +48,15 @@   let (!numericArgs,!textualArgs) = span (all isDigit) args       !arg0 = fromMaybe 1 $ (readMaybe (concat . take 1 $ numericArgs)::Maybe Int)       !numberI = fromMaybe 1 $ (readMaybe (concat . drop 1 . take 2 $ numericArgs)::Maybe Int)-      !xs = concat . take 1 . prepareText . unwords $ textualArgs+      !choice = concat . take 1 . prepareText . unwords $ textualArgs+      !xs = concat . drop 1 . take 2 . prepareText . unwords $ textualArgs   if compare numberI 2 == LT then printUniquenessG1ListStr (I1 H) . fst . get22 . uniqNProperties2GN " 01-" K arg0 1 (V.singleton (oneProperty))-    (procDiverse2I) . unwords . prepareText $ xs+    (chooseMax choice) . unwords . prepareText $ xs   else do     let !intervalNmbrs = (\zs -> if null zs then V.singleton numberI else V.uniq . V.fromList $ zs) . sort . filter (<= numberI) . map (\t -> fromMaybe numberI $ (readMaybe t::Maybe Int)) . drop 2 $ numericArgs-        (!maxE,!minE) = runEval ((parTuple2 rpar rpar) ((\k -> if k == 0 then 1.0 else int2Float k) . (\rs -> if null rs then 0 else head rs) . firstFrom3 .-         maximumElBy 1 (V.singleton (oneProperty)) $ UL2 ([],uniquenessVariants2GN " 01-" (V.singleton (oneProperty)) (procDiverse2I) $ xs), (\k -> if k == 0 then 1.0 else int2Float k) . abs . (\rs -> if null rs then 0 else head rs) .+        (!maxE,!minE) = runEval ((parTuple2 rpar rpar) ((\k -> if k == 0.0 then 1.0 else k) . (\rs -> if null rs then 0.0 else head rs) . firstFrom3 .+         maximumElBy 1 (V.singleton (oneProperty)) $ UL2 ([],uniquenessVariants2GN " 01-" (V.singleton (oneProperty)) (chooseMax choice) $ xs), (\k -> if k == 0.0 then 1.0 else k) . abs . (\rs -> if null rs then 0.0 else head rs) .               firstFrom3 . maximumElBy 1 (V.singleton (oneProperty)) $ UL2 ([],uniquenessVariants2GN " 01-" (V.singleton (oneProperty))-                (procDiverse2Ineg) $ xs)))+                (chooseMin choice) $ xs)))     printUniquenessG1ListStr (I1 H) . fst . get22 . uniqNProperties2GN " 01-" K arg0 1 (V.singleton (unsafeSwapVecIWithMaxI minE maxE numberI intervalNmbrs .-      oneProperty)) (procDiverse2F) $ xs+      oneProperty)) (chooseMax choice) $ xs
uniqueness-periods-vector-examples.cabal view
@@ -3,7 +3,7 @@ -- http://haskell.org/cabal/users-guide/  name:                uniqueness-periods-vector-examples-version:             0.11.0.0+version:             0.12.0.0 synopsis:            Usage examples for the uniqueness-periods-vector series of packages description:         Usage examples for the uniqueness-periods-vector series of packages. Several executables are planned to demonstrate the libraries work. homepage:            https://hackage.haskell.org/package/uniqueness-periods-vector-examples@@ -17,29 +17,37 @@ extra-source-files:  ChangeLog.md, README.md cabal-version:       >=1.10 +library+  exposed-modules:     Languages.UniquenessPeriods.Vector.FuncRepRelated, Data.Statistics.RulesIntervals+  -- other-modules:+  other-extensions:    BangPatterns+  build-depends:       base >=4.7 && <4.15, uniqueness-periods-vector >=0.3 && <1, uniqueness-periods-vector-common >=0.5 && <1, uniqueness-periods-vector-properties >=0.5.3 && <1, lists-flines >=0.1.1 && <1+  -- hs-source-dirs:+  default-language:    Haskell2010+ executable lineVariants   main-is:             Main.hs-  -- other-modules:+  other-modules:       Languages.UniquenessPeriods.Vector.FuncRepRelated   other-extensions:    BangPatterns-  build-depends:       base >=4.7 && <4.15, mmsyn6ukr >=0.8.1 && <1, vector >=0.11 && <0.14, uniqueness-periods-vector >=0.3 && <1, uniqueness-periods-vector-general >=0.5 && < 1, uniqueness-periods-vector-common >=0.5 && <1, uniqueness-periods-vector-properties >=0.5.1 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, parallel >=3.2.0.6 && <4, uniqueness-periods-vector-filters >=0.3 && <1+  build-depends:       base >=4.7 && <4.15, mmsyn6ukr >=0.8.1 && <1, vector >=0.11 && <0.14, uniqueness-periods-vector >=0.3 && <1, uniqueness-periods-vector-general >=0.5 && < 1, uniqueness-periods-vector-common >=0.5 && <1, uniqueness-periods-vector-properties >=0.5.3 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, parallel >=3.2.0.6 && <4, uniqueness-periods-vector-filters >=0.3 && <1   ghc-options:         -threaded -rtsopts-  hs-source-dirs:      Simple+  hs-source-dirs:      ., Simple   default-language:    Haskell2010  executable rewritePoem   main-is:             Main.hs-  -- other-modules:+  other-modules:       Languages.UniquenessPeriods.Vector.FuncRepRelated   other-extensions:    BangPatterns-  build-depends:       base >=4.7 && <4.15, mmsyn6ukr >=0.8.1 && <1, vector >=0.11 && <0.14, uniqueness-periods-vector >=0.3 && <1, uniqueness-periods-vector-general >=0.5 && < 1, uniqueness-periods-vector-common >=0.5 && <1, uniqueness-periods-vector-properties >=0.5.1 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, parallel >=3.2.0.6 && <4, uniqueness-periods-vector-filters >=0.3 && <1+  build-depends:       base >=4.7 && <4.15, mmsyn6ukr >=0.8.1 && <1, vector >=0.11 && <0.14, uniqueness-periods-vector >=0.3 && <1, uniqueness-periods-vector-general >=0.5 && < 1, uniqueness-periods-vector-common >=0.5 && <1, uniqueness-periods-vector-properties >=0.5.3 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, parallel >=3.2.0.6 && <4, uniqueness-periods-vector-filters >=0.3 && <1   ghc-options:         -threaded -rtsopts-  hs-source-dirs:      Lines+  hs-source-dirs:      ., Lines   default-language:    Haskell2010  executable processText   main-is:             Main.hs-  -- other-modules:+  other-modules:       Languages.UniquenessPeriods.Vector.FuncRepRelated, Data.Statistics.RulesIntervals   other-extensions:    CPP, BangPatterns, FlexibleInstances, MultiParamTypeClasses-  build-depends:       base >=4.7 && <4.15, mmsyn6ukr >=0.8.1 && <1, vector >=0.11 && <0.14, uniqueness-periods-vector >=0.3 && <1, uniqueness-periods-vector-general >=0.5 && < 1, uniqueness-periods-vector-common >=0.5 && <1, uniqueness-periods-vector-properties >=0.5.1 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, uniqueness-periods-vector-filters >=0.3 && <1, uniqueness-periods-vector-stats >=0.1.2 && <1, parallel >=3.2.0.6 && <4, lists-flines >=0.1.1 && <1+  build-depends:       base >=4.7 && <4.15, mmsyn6ukr >=0.8.1 && <1, vector >=0.11 && <0.14, uniqueness-periods-vector >=0.3 && <1, uniqueness-periods-vector-general >=0.5 && < 1, uniqueness-periods-vector-common >=0.5 && <1, uniqueness-periods-vector-properties >=0.5.3 && <1, print-info >=0.1.3 && <1, phonetic-languages-ukrainian >=0.2.3 && <1, uniqueness-periods-vector-filters >=0.3 && <1, uniqueness-periods-vector-stats >=0.1.2 && <1, parallel >=3.2.0.6 && <4, lists-flines >=0.1.1 && <1   ghc-options:         -threaded -rtsopts-  hs-source-dirs:      Proportion+  hs-source-dirs:      ., Proportion   default-language:    Haskell2010