packages feed

phonetic-languages-examples (empty) → 0.1.0.0

raw patch · 8 files changed

+425/−0 lines, 8 filesdep +basedep +paralleldep +phonetic-languages-commonsetup-changed

Dependencies added: base, parallel, phonetic-languages-common, phonetic-languages-general, phonetic-languages-plus, phonetic-languages-properties, phonetic-languages-ukrainian, phonetic-languages-vector, print-info, subG, ukrainian-phonetics-basic, uniqueness-periods-vector-filters, uniqueness-periods-vector-stats, vector

Files

+ CHANGELOG.md view
@@ -0,0 +1,5 @@+# Revision history for phonetic-languages-examples++## 0.1.0.0 -- 2020-10-30++* First version. Released on an unsuspecting world.
+ GetInfo/Main.hs view
@@ -0,0 +1,118 @@+-- |+-- Module      :  Main+-- Copyright   :  (c) OleksandrZhabenko 2020+-- License     :  MIT+-- Stability   :  Experimental+-- Maintainer  :  olexandr543@yahoo.com+--+-- 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 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:+--+-- >    --   --   --+-- >   /  \_/  \_/  \+--+-- To enable parallel computations (potentially, they can speed up the work), please, run the @propertiesText@ executable with+-- @+RTS -threaded -RTS@ command line options with possibly @-N@ option inside.+--++{-# OPTIONS_GHC -threaded -rtsopts #-}++{-# LANGUAGE BangPatterns, FlexibleContexts #-}++module Main where+++import Data.SubG+import System.IO+import Control.Concurrent+import Control.Exception+import Control.Parallel.Strategies+import Data.Maybe (fromMaybe)+import Text.Read (readMaybe)+import qualified Data.Vector as VB+import Languages.UniquenessPeriods.Vector.General.DebugG hiding (newLineEnding)+import Languages.UniquenessPeriods.Vector.PropertiesG+import Melodics.ByteString.Ukrainian+import System.Environment+import Languages.Phonetic.Ukrainian.PrepareText+import Languages.UniquenessPeriods.Vector.DataG+import Languages.UniquenessPeriods.Vector.AuxiliaryG+import Languages.UniquenessPeriods.Vector.StrictVG+import Numeric (showFFloat)+import Languages.UniquenessPeriods.Vector.Filters+import Data.Char (isAlpha)+import Data.Statistics.RulesIntervals+import Languages.UniquenessPeriods.Vector.FuncRepRelatedG++main :: IO ()+main = do+  args <- getArgs+  let !file = concat . take 1 $ args  -- The first command line arguments except those ones that are RTS arguments+      !gzS = concat . take 1 . drop 1 $ args -- The second command line argument that controls the choice of the number of intervals+      !printLine = fromMaybe 0 (readMaybe (concat . take 1 . drop 2 $ args)::(Maybe Int)) -- The third command line argument except those ones that are RTS arguments. Set to 1 if you would like to print the current line within the information+      !toOneLine = fromMaybe 0 (readMaybe (concat . take 1 . drop 3 $ args)::(Maybe Int)) -- The fourth command line argument except those ones that are RTS arguments. Set to 1 if you would like to convert the text into one single line before applying to it the processment (it can be more conceptually consistent in such a case)+      !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.+      !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 gzS printLine choice flines+  else let tau !k = (let !flines1 = fLines k contents in innerProc gzS printLine choice flines1) in+    case twoInParallel of+     1 -> ($|) sequence_ rpar (map tau [1, 0])+     _ -> mapM_ tau [1, 0]++innerProc :: String -> Int -> String -> VB.Vector (VB.Vector Char) -> IO ()+innerProc gzS printLine choice flInes = getData3 (getIntervalsN gzS flInes) printLine choice flInes++getIntervalsN :: String -> VB.Vector (VB.Vector Char) -> Int+getIntervalsN xs yss+  | xs == "s" = sturgesH (VB.length yss)+  | xs == "l" = levynskyiMod (VB.length yss)+  | otherwise = fromMaybe 9 (readMaybe xs::(Maybe Int))+{-# INLINE getIntervalsN #-}++getData3 :: Int -> Int -> String -> VB.Vector (VB.Vector Char) -> IO ()+getData3 gz printLine choice v4 = do+ let !permsV = genPermutationsV+ VB.mapM_ (\v -> bracket (do+  myThread <- forkIO (+   let !whspss = VB.fromList " 01-"+       !v2 = subG whspss v+       !l2 = (subtract 2) . VB.length $ v2+       (!maxE,!minE,!data2)+          | compare l2 0 /= LT = runEval (parTuple3 rpar rpar rpar ((\k -> if k == 0.0 then 1.0 else k) . (\ls -> if null ls then 0.0 else head ls) .+              firstFrom3 . maximumElBy 1 (VB.singleton oneProperty) $+                UL2 (VB.empty,uniquenessVariants2GNB ' ' id id id (VB.unsafeIndex permsV l2) (VB.singleton oneProperty) (chooseMax choice) v2),+                  (\k -> if k == 0.0 then 1.0 else k) . abs . (\ls -> if null ls then 0.0 else head ls) .+                     firstFrom3 . maximumElBy 1 (VB.singleton oneProperty) $+                       UL2 (VB.empty,uniquenessVariants2GNB ' ' id id id (VB.unsafeIndex permsV l2) (VB.singleton oneProperty) (chooseMin choice) v2),+                         (\k -> if k == 0.0 then 1.0 else k) . head . getAC (chooseMax choice) $ v))+          | otherwise = let !mono = (\k -> if k == 0.0 then 1.0 else k) . head . getAC (chooseMax choice) $ v in (mono,mono,mono)+       (!wordsN,!intervalN)+         | maxE == 1.0 = (0, 0)+         | otherwise = runEval (parTuple2 rpar rpar (l2 + 2, intervalNRealFrac minE maxE gz data2))+       !ratio = if maxE == 1.0 then 0.0 else 2.0 * data2 / (minE + maxE) in do+         hPutStr stdout . showFFloat (precChoice choice) minE $ "\t"+         hPutStr stdout . showFFloat (precChoice choice) data2 $ "\t"+         hPutStr stdout . showFFloat (precChoice choice) maxE $ "\t"+         hPutStr stdout . showFFloat (Just 4) (data2 / minE) $ "\t"+         hPutStr stdout . showFFloat (Just 4) (maxE / data2) $ "\t"+         hPutStr stdout . showFFloat (Just 4) (maxE / data2) $ "\t"+         hPutStr stdout . showFFloat Nothing ratio $ "\t"+         hPutStr stdout ('\t':show (wordsN::Int))+         hPutStr stdout ('\t':show (intervalN::Int))+         hPutStrLn stdout (if printLine == 1 then '\t':(VB.toList v) else ""))+  return myThread) (\myThread -> killThread myThread) (\_ -> hPutStr stdout "")) v4+{-# INLINABLE getData3 #-}++fLines :: Int -> String -> VB.Vector (VB.Vector Char)+fLines !toOneLine = VB.map VB.fromList . VB.fromList . filter (any (\x -> isUkrainianL x && isAlpha x)) . prepareText .+  (\z -> if toOneLine == 1 then unwords . words $ z else z)+{-# INLINE fLines #-}
+ LICENSE view
@@ -0,0 +1,20 @@+Copyright (c) 2020 OleksandrZhabenko++Permission is hereby granted, free of charge, to any person obtaining+a copy of this software and associated documentation files (the+"Software"), to deal in the Software without restriction, including+without limitation the rights to use, copy, modify, merge, publish,+distribute, sublicense, and/or sell copies of the Software, and to+permit persons to whom the Software is furnished to do so, subject to+the following conditions:++The above copyright notice and this permission notice shall be included+in all copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ Languages/UniquenessPeriods/Vector/FuncRepRelatedG.hs view
@@ -0,0 +1,37 @@+-- |+-- Module      :  Languages.UniquenessPeriods.Vector.FuncRepRelatedG+-- Copyright   :  (c) OleksandrZhabenko 2020+-- License     :  MIT+-- Stability   :  Experimental+-- Maintainer  :  olexandr543@yahoo.com+--+-- Functions to choose from the 'FuncRep' variants.++module Languages.UniquenessPeriods.Vector.FuncRepRelatedG where++import qualified Data.Vector as VB+import Languages.UniquenessPeriods.Vector.DataG+import String.Languages.UniquenessPeriods.VectorG+import Languages.UniquenessPeriods.Vector.PropertiesFuncRepG++-- | Allows to choose the variant of the computations in case of usual processment.+chooseMax :: String -> FuncRep (VB.Vector Char) (UniquenessGeneral2 Char) [Float]+chooseMax xs+  | xs == "y0" = procDiverse2F+  | xs == "0y" = procRhythmicity23F+  | xs == "y" = procBothF+  | otherwise = procBothInvF++-- | Allows to choose the variant of the computations in case of minimum lookup. Uses @-neg@ variants.+chooseMin :: String -> FuncRep (VB.Vector Char) (UniquenessGeneral2 Char) [Float]+chooseMin xs+  | xs == "y0" = procDiverse2Fneg+  | xs == "0y" = procRhythmicity23Fneg+  | xs == "y" = procBothFneg+  | otherwise = procBothInvFneg++-- | Allows to choose precision in the Numeric.showFFloat function being given a choice parameter.+precChoice :: String -> Maybe Int+precChoice xs+  | xs == "y0" || xs == "y" || xs == "0y" = Just 0+  | otherwise = Just 4
+ Lines/Main.hs view
@@ -0,0 +1,123 @@+-- |+-- Module      :  Main+-- Copyright   :  (c) OleksandrZhabenko 2020+-- License     :  MIT+-- Stability   :  Experimental+-- Maintainer  :  olexandr543@yahoo.com+--+-- Inspired by: https://functional-art.org/2020/papers/Poetry-OleksandrZhabenko.pdf from the https://functional-art.org/2020/performances ;+-- Allows to rewrite the given text (usually a poetical one).++{-# OPTIONS_GHC -threaded -rtsopts #-}++{-# LANGUAGE BangPatterns, FlexibleContexts #-}++module Main where++import Data.SubG+import Control.Parallel.Strategies+import qualified Data.Vector as VB+import Data.List (sort)+import Languages.UniquenessPeriods.Vector.PropertiesG+import Languages.UniquenessPeriods.Vector.General.DebugG+import Languages.UniquenessPeriods.Vector.StrictVG+import Languages.UniquenessPeriods.Vector.Filters (unsafeSwapVecIWithMaxI)+import Text.Read (readMaybe)+import Data.Maybe (fromMaybe)+import System.Environment+import Languages.Phonetic.Ukrainian.PrepareText+import Languages.UniquenessPeriods.Vector.DataG+import Languages.UniquenessPeriods.Vector.AuxiliaryG+import Data.Char (isDigit)+import Languages.UniquenessPeriods.Vector.FuncRepRelatedG++-- | 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 its position, and the rest of the line is rearranged using the specified other command line+-- arguments. They are general for the whole program. The first command line argument is a FilePath to the file with a Ukrainian text to be rewritten.+-- The second one is a variant of the metrics (\"properties\") used to evaluate the variants.+-- 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'+--+main :: IO ()+main = do+  args <- getArgs+  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+      !permsV = VB.force genPermutationsV+  contents <- readFile file+  let !flines = prepareText contents+      !lasts = map (\ts -> if null . words $ ts then [] else last . words $ ts) flines+      !l = (subtract 3) . length . words . concat . take 1 $ flines+      !whspss = VB.fromList " 01-"+  if compare numberI 2 == LT then do+    let !zs = if compare l 0 == LT then concat . take 1 $ flines else VB.toList . lastFrom3 . headU2 . fst . get22 .+               uniqNProperties2GN ' ' whspss id id id (VB.unsafeIndex permsV l) (PA VB.empty (VB.fromList . concat . take 1 $ lasts)) 1 1 (VB.singleton oneProperty) (chooseMax choice) . VB.fromList . unwords . init . words . concat . take 1 $ flines+    toFileStr (file ++ ".new.txt") (zs:(noDoubleWords . circle2 permsV (concat . take 1 $ lasts) choice [] . drop 1 $ flines))+  else do+    let !intervalNmbrs = (\vs -> if null vs then VB.singleton numberI else VB.uniq . VB.fromList $ vs) . sort . filter (<= numberI) .+           map (\t -> fromMaybe numberI (readMaybe t::Maybe Int)) . drop 2 $ numericArgs+        !us = words . concat . take 1 $ flines+        !l2 = (subtract 3) . length $ us+    if compare l2 0 /= LT then do+      let !perms2 = VB.force . VB.unsafeIndex permsV $ l2+          !v = if compare l2 0 == LT then VB.empty else VB.fromList . unwords . init $ us+          !v2 = subG whspss v+          (!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 (VB.singleton oneProperty) $ UL2 (VB.empty,uniquenessVariants2GNB ' ' id id id perms2 (VB.singleton oneProperty) (chooseMax  choice) $ v2), (\k -> if k == 0.0 then 1.0 else k) . abs .+              (\rs -> if null rs then 0.0 else head rs) . firstFrom3 . maximumElBy 1 (VB.singleton oneProperty) $+              UL2 (VB.empty,uniquenessVariants2GNB ' ' id id id perms2 (VB.singleton oneProperty) (chooseMin choice) $ v2)))+          !zs = if compare l2 0 == LT then concat . take 1 $ flines else VB.toList . lastFrom3 . headU2 . fst . get22 .+            uniqNProperties2GN ' ' whspss id id id perms2 (PA VB.empty (VB.fromList . concat . take 1 $ lasts)) 1 1 (VB.singleton (unsafeSwapVecIWithMaxI minE maxE numberI intervalNmbrs . oneProperty)) (chooseMax choice) $ v+      toFile (file ++ ".new.txt") (zs:(noDoubleWords . circle2I permsV whspss (concat . take 1 $ lasts) choice [] numberI intervalNmbrs minE maxE . drop 1 $ flines))+    else toFileStr (file ++ ".new.txt") ((concat . take 1 $ flines):(noDoubleWords . circle2I permsV whspss (concat . take 1 $ lasts) choice [] numberI intervalNmbrs 0.0 0.0 . drop 1 $ flines))+++-- | Processment without rearrangements.+circle2 :: VB.Vector (VB.Vector (VB.Vector Int)) -> String -> String -> [String] -> [String] -> [String]+circle2 permsG1 xs choice yss xss+ | null xss = yss+ | otherwise = circle2 permsG1 (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 VB.toList . lastFrom3 . headU2 . fst . get22 .+                    uniqNProperties2GN ' ' (VB.fromList " 01-") id id id (VB.unsafeIndex permsG1 $ length rs - 3) (PA (VB.fromList xs) (VB.fromList . last $ rs)) 1 1 (VB.singleton oneProperty) (chooseMax choice) . VB.fromList . unwords . init $ rs++-- | Processment with rearrangements.+circle2I :: VB.Vector (VB.Vector (VB.Vector Int)) -> VB.Vector Char -> String -> String -> [String] -> Int -> VB.Vector Int -> Float -> Float -> [String] -> [String]+circle2I permsG1 whspss xs choice yss numberI vI minE maxE xss+ | null xss = yss+ | otherwise = circle2I permsG1 whspss (if null rs then [] else last rs) choice (ws:yss) numberI vI minE1 maxE1 tss+      where (!zss,!tss) = splitAt 1 xss+            !w2s = words . concat . take 1 $ tss+            !l3 = (subtract 3) . length $ w2s+            !rs = words . concat $ zss+            !ws = if compare (length rs) 3 == LT then unwords (xs:rs) else VB.toList . lastFrom3 . headU2 . fst . get22 .+                    uniqNProperties2GN ' ' (VB.fromList " 01-") id id id (VB.unsafeIndex permsG1 $ length rs - 3) (PA (VB.fromList xs) (VB.fromList . last $ rs)) 1 1 (VB.singleton (unsafeSwapVecIWithMaxI minE maxE numberI vI .+                      oneProperty)) (chooseMax choice) . VB.fromList . unwords . init $ rs+            (!maxE1,!minE1)+             | compare l3 0 /= LT =+              let !perms3 = VB.force . VB.unsafeIndex permsG1 $ l3+                  !v3 = VB.fromList . unwords . init $ w2s+                  !v4 = subG whspss v3 in runEval (parTuple2 rpar rpar ((\k -> if k == 0.0 then 1.0 else k) . (\ls -> if null ls then 0.0 else head ls) .+                         firstFrom3 . maximumElBy 1 (VB.singleton oneProperty) $ UL2 (VB.empty,+                           uniquenessVariants2GNB ' ' id id id perms3 (VB.singleton oneProperty) (chooseMax  choice) $ v4),+                             (\k -> if k == 0.0 then 1.0 else k) . abs . (\ls -> if null ls then 0.0 else head ls) . firstFrom3 .+                               maximumElBy 1 (VB.singleton oneProperty) $+                                 UL2 (VB.empty,uniquenessVariants2GNB ' ' id id id perms3 (VB.singleton oneProperty) (chooseMin choice) $ v4)))+             | otherwise = (0.0,0.0)++headU2+  :: (Foldable t, Foldable t2, InsertLeft t a, Monoid (t a), Monoid (t (t a)), Monoid (t2 b)) => VB.Vector (UniquenessG1T2 t t2 a b)+  -> UniquenessG1T2 t t2 a b+headU2 v+ | VB.null v = (mempty, VB.empty,mempty)+ | otherwise = VB.unsafeIndex v 0+{-# INLINE headU2 #-}++noDoubleWords :: [String] -> [String]+noDoubleWords = map (unwords . drop 1 . words)+{-# INLINE noDoubleWords #-}
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ Simple/Main.hs view
@@ -0,0 +1,68 @@+-- |+-- Module      :  Main+-- Copyright   :  (c) OleksandrZhabenko 2020+-- License     :  MIT+-- Stability   :  Experimental+-- Maintainer  :  olexandr543@yahoo.com+--+-- Prints the rearrangements with the \"property\" information for the Ukrainian language text.+-- The most interesting is the first line of the output. But other ones also are noteworthy.++{-# OPTIONS_GHC -threaded -rtsopts #-}++{-# LANGUAGE BangPatterns #-}++module Main where++import Control.Parallel.Strategies+import qualified Data.Vector as VB+import Data.Print.Info+import Languages.UniquenessPeriods.Vector.General.DebugG+import Languages.UniquenessPeriods.Vector.AuxiliaryG+import Languages.UniquenessPeriods.Vector.PropertiesG+import Languages.UniquenessPeriods.Vector.Filters+import Languages.UniquenessPeriods.Vector.StrictVG+import Languages.Phonetic.Ukrainian.PrepareText+import Languages.UniquenessPeriods.Vector.DataG+import Data.Char (isDigit)+import qualified Data.List  as L (span,sort,permutations)+import Languages.UniquenessPeriods.Vector.FuncRepRelatedG+import Data.SubG+import System.Environment+import Data.Maybe+import Text.Read (readMaybe)+++-- | 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 first textual command line argument should be in the form either \"y0\",+-- or \"0y\", or \"yy\", or \"y\" 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 ()+main = do+  args <- getArgs+  let (!numericArgs,!textualArgs) = L.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)+      !choice = concat . take 1 $ textualArgs+      !xs = concat . take 1 . prepareText . unwords . drop 1 $ textualArgs+      !l = length . words $ xs+      !v = VB.fromList xs+      !whspss = VB.fromList " 01-"+      !perms = genPermutations l+      !subs = subG whspss v+  if compare numberI 2 == LT then printUniquenessG1VChar (I1 H) . fst . get22 . uniqNProperties2GN ' ' (VB.fromList " 01-") id id id perms K arg0 1 (VB.singleton (oneProperty))+    (chooseMax choice) $ v+  else do+    let !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+        (!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 (VB.singleton (oneProperty)) $ UL2 (VB.empty,uniquenessVariants2GNB ' ' id id id perms (VB.singleton (oneProperty)) (chooseMax choice) $ subs), (\k -> if k == 0.0 then 1.0 else k) . abs . (\rs -> if null rs then 0.0 else head rs) .+              firstFrom3 . maximumElBy 1 (VB.singleton (oneProperty)) $ UL2 (VB.empty,uniquenessVariants2GNB ' ' id id id perms (VB.singleton (oneProperty))+                (chooseMin choice) $ subs)))+    printUniquenessG1VChar (I1 H) . fst . get22 . uniqNProperties2GN ' ' (VB.fromList " 01-") id id id perms K arg0 1 (VB.singleton (unsafeSwapVecIWithMaxI minE maxE numberI intervalNmbrs .+      oneProperty)) (chooseMax choice) $ v+
+ phonetic-languages-examples.cabal view
@@ -0,0 +1,52 @@+-- Initial phonetic-languages-examples.cabal generated by cabal init.  For+-- further documentation, see http://haskell.org/cabal/users-guide/++name:                phonetic-languages-examples+version:             0.1.0.0+synopsis:            A generalization of the uniqueness-periods-vector-examples functionality.+description:         Is intended to use more functionality of the Data.Vector, Data.Foldable, Data.Monoid and Data.SubG modules.+homepage:            https://hackage.haskell.org/package/phonetic-languages-examples+license:             MIT+license-file:        LICENSE+author:              OleksandrZhabenko+maintainer:          olexandr543@yahoo.com+copyright:           (c) 2020 Oleksandr Zhabenko+category:            Language, Math, Game+build-type:          Simple+extra-source-files:  CHANGELOG.md+cabal-version:       >=1.10++library+  exposed-modules:     Languages.UniquenessPeriods.Vector.FuncRepRelatedG+  -- other-modules:+  other-extensions:    BangPatterns+  build-depends:       base >=4.7 && <4.15, phonetic-languages-vector >=0.1 && <1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.1 && <1, vector >=0.11 && < 0.14+  -- hs-source-dirs:+  default-language:    Haskell2010++executable lineVariantsG+  main-is:             Main.hs+  other-modules:       Languages.UniquenessPeriods.Vector.FuncRepRelatedG+  other-extensions:    BangPatterns+  build-depends:       base >=4.7 && <4.15, ukrainian-phonetics-basic >=0.1.7 && <1, vector >=0.11 && <0.14, phonetic-languages-vector >=0.1 && <1, phonetic-languages-general >=0.1 && < 1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.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, vector >=0.11 && <0.14, phonetic-languages-plus >=0.1 && <1, subG >=0.1.1.1 && < 1+  ghc-options:         -threaded -rtsopts+  hs-source-dirs:      ., Simple+  default-language:    Haskell2010++executable rewritePoemG+  main-is:             Main.hs+  other-modules:       Languages.UniquenessPeriods.Vector.FuncRepRelatedG+  other-extensions:    BangPatterns+  build-depends:       base >=4.7 && <4.15, ukrainian-phonetics-basic >=0.1.7 && <1, vector >=0.11 && <0.14, phonetic-languages-vector >=0.1 && <1, phonetic-languages-general >=0.1 && < 1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.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, vector >=0.11 && <0.14, phonetic-languages-plus >=0.1 && <1, subG >= 0.1.1.1 && < 1+  ghc-options:         -threaded -rtsopts+  hs-source-dirs:      ., Lines+  default-language:    Haskell2010++executable propertiesTextG+  main-is:             Main.hs+  other-modules:       Languages.UniquenessPeriods.Vector.FuncRepRelatedG+  other-extensions:    BangPatterns+  build-depends:       base >=4.7 && <4.15, ukrainian-phonetics-basic >=0.1.7 && <1, vector >=0.11 && <0.14, phonetic-languages-vector >=0.1 && <1, phonetic-languages-general >=0.1 && < 1, phonetic-languages-common >=0.1.1 && <1, phonetic-languages-properties >=0.1 && <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, phonetic-languages-plus >=0.1 && <1, subG >= 0.1.1.1 && < 1+  ghc-options:         -threaded -rtsopts+  hs-source-dirs:      ., GetInfo+  default-language:    Haskell2010