packages feed

phonetic-languages-simplified-generalized-examples-array 0.14.1.0 → 0.15.0.0

raw patch · 9 files changed

+135/−110 lines, 9 filesdep ~phonetic-languages-phonetics-basicsdep ~phonetic-languages-simplified-generalized-examples-commondep ~phonetic-languages-simplified-generalized-properties-arrayPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: phonetic-languages-phonetics-basics, phonetic-languages-simplified-generalized-examples-common, phonetic-languages-simplified-generalized-properties-array

API changes (from Hackage documentation)

- Phonetic.Languages.General.GetInfo.Parsing: files4ArgsProcessment :: PermutationsType -> FilePath -> FilePath -> FilePath -> FilePath -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> [String] -> IO ()
+ Phonetic.Languages.General.GetInfo.Parsing: files4ArgsProcessment :: PermutationsType -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> [String] -> IO ()
- Phonetic.Languages.General.GetTextualInfo: generalProc :: PermutationsType -> (Int, Int) -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> String -> String -> String -> Bool -> [String] -> [String] -> Coeffs2 -> Coeffs2 -> FilePath -> String -> Int -> Int -> String -> IO ()
+ Phonetic.Languages.General.GetTextualInfo: generalProc :: PermutationsType -> (Int, Int) -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> Concatenations -> String -> String -> String -> Bool -> [String] -> [String] -> Coeffs2 -> Coeffs2 -> FilePath -> String -> Int -> Int -> String -> IO ()
- Phonetic.Languages.General.Lines: generalProcessment :: PermutationsType -> (Int, Int) -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> String -> String -> String -> Coeffs2 -> [String] -> [String] -> Int -> FilePath -> IO ()
+ Phonetic.Languages.General.Lines: generalProcessment :: PermutationsType -> (Int, Int) -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> Concatenations -> String -> String -> String -> Coeffs2 -> [String] -> [String] -> Int -> FilePath -> IO ()
- Phonetic.Languages.General.Lines.Parsing: files4Processment :: FilePath -> FilePath -> FilePath -> FilePath -> Int -> [String] -> IO (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification, SegmentRulesG, String, String, Concatenations, String, [String], [String], Int, FilePath)
+ Phonetic.Languages.General.Lines.Parsing: files4Processment :: FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> Int -> [String] -> IO (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification, SegmentRulesG, String, String, Concatenations, Concatenations, String, [String], [String], Int, FilePath)
- Phonetic.Languages.General.Simple: finalProc :: PermutationsType -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> String -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> (a -> String) -> [a] -> [String] -> Bool -> IO String
+ Phonetic.Languages.General.Simple: finalProc :: PermutationsType -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> Concatenations -> String -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> (a -> String) -> [a] -> [String] -> Bool -> IO String
- Phonetic.Languages.General.Simple: generalProc2 :: PermutationsType -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> String -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> [String] -> Bool -> IO String
+ Phonetic.Languages.General.Simple: generalProc2 :: PermutationsType -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> Concatenations -> String -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> [String] -> Bool -> IO String
- Phonetic.Languages.General.Simple: generalProc2G :: PermutationsType -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> String -> FilePath -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> [String] -> Bool -> IO ()
+ Phonetic.Languages.General.Simple: generalProc2G :: PermutationsType -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> Concatenations -> String -> FilePath -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> [String] -> Bool -> IO ()
- Phonetic.Languages.General.Simple: generalProc3G :: PermutationsType -> (String -> Bool) -> [String] -> String -> Int -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> String -> FilePath -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> [String] -> Bool -> IO ()
+ Phonetic.Languages.General.Simple: generalProc3G :: PermutationsType -> (String -> Bool) -> [String] -> String -> Int -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> Concatenations -> String -> FilePath -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> [String] -> Bool -> IO ()
- Phonetic.Languages.General.Simple: generalProcMMs :: PermutationsType -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> String -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> [([Int], Int, Int, String)] -> [Array Int Int] -> [String] -> [String] -> Bool -> IO String
+ Phonetic.Languages.General.Simple: generalProcMMs :: PermutationsType -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> Concatenations -> String -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> [([Int], Int, Int, String)] -> [Array Int Int] -> [String] -> [String] -> Bool -> IO String
- Phonetic.Languages.General.Simple: interactivePrintResultRecursive :: PermutationsType -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> String -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> (a -> String) -> [a] -> [String] -> Bool -> IO String
+ Phonetic.Languages.General.Simple: interactivePrintResultRecursive :: PermutationsType -> GWritingSystemPRPLX -> [(Char, Char)] -> CharPhoneticClassification -> SegmentRulesG -> String -> String -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> Concatenations -> Concatenations -> String -> Bool -> Bool -> Bool -> [String] -> Coeffs2 -> Coeffs2 -> (a -> String) -> [a] -> [String] -> Bool -> IO String
- Phonetic.Languages.General.Simple.Parsing: argsProcessment :: FilePath -> FilePath -> FilePath -> FilePath -> [String] -> IO (String, String, String, String, String, Bool, Bool, [String], Coeffs2, Coeffs2, [String], Bool)
+ Phonetic.Languages.General.Simple.Parsing: argsProcessment :: FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> [String] -> IO (String, String, String, String, String, String, Bool, Bool, [String], Coeffs2, Coeffs2, [String], Bool)
- Phonetic.Languages.General.Simple.Parsing: argsToSimplePrepare4Files :: PermutationsType -> FilePath -> FilePath -> FilePath -> FilePath -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> String -> (String -> Bool) -> [String] -> String -> Int -> IO ()
+ Phonetic.Languages.General.Simple.Parsing: argsToSimplePrepare4Files :: PermutationsType -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> (Double -> String -> [[[PRS]]] -> [[Double]]) -> [[[[PRS]]] -> [[Double]]] -> String -> (String -> Bool) -> [String] -> String -> Int -> IO ()
- Phonetic.Languages.General.Simple.Parsing: innerProcessmentSimple :: String -> String -> String -> String -> (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification, SegmentRulesG, String, String, Concatenations, String)
+ Phonetic.Languages.General.Simple.Parsing: innerProcessmentSimple :: String -> String -> String -> String -> String -> (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification, SegmentRulesG, String, String, Concatenations, Concatenations, String)

Files

ChangeLog.md view
@@ -168,3 +168,10 @@  * The fourteenth version revised A. Added information about the related suggested package html-presentation-text to the package description.++## 0.15.0.0 -- 2022-02-09++The fifteenth version. Fixed the long existing issues with not working prepending needed concatenations for the text in the+module Data.Phonetic.Languages.PrepareText of the dependency. Added also the possibility to not only prepend needed words,+but also append. This introduces breaking changes, so please, check the code that uses library functions afterwards.+Fixed also issue with innerProcessment function.
Phonetic/Languages/General/GetInfo/Parsing.hs view
@@ -18,34 +18,27 @@ import Data.Maybe (fromMaybe) import Text.Read (readMaybe) import System.Environment (getArgs)-import Data.Monoid (mappend) import Phonetic.Languages.General.Common-import Phonetic.Languages.General.Lines-import Data.Phonetic.Languages.PrepareText-import Data.List (sort)-import GHC.Arr-import Data.Phonetic.Languages.Base import Data.Phonetic.Languages.Syllables-import Data.Phonetic.Languages.SpecificationsRead import Phonetic.Languages.General.Simple.Parsing (innerProcessmentSimple) import Phonetic.Languages.Array.General.PropertiesSyllablesG2-import Phonetic.Languages.General.Simple-import Data.Phonetic.Languages.SpecificationsRead import CLI.Arguments import CLI.Arguments.Parsing import CLI.Arguments.Get import qualified Phonetic.Languages.Permutations.Represent as R  --- | The first 4 arguments are the file names with the specifications.+-- | The first 5 arguments are the file names with the specifications. -- 1) with the 'GWritingSystemPRPLX' specifications only (see the gwrsysExample.txt file in the @phonetic-languages-phonetics-basics@ package as a schema); -- -- 2) with the 5 meaningful lines that are delimited with the \'~\' line one from another with the specifications for the possible allophones (if any), 'CharPhoneticClassification', white spaces information (two 'String's) and the 'String' of all the possible 'PLL' 'Char's; -- -- 3) with the 'SegmentRulesG' specifications only; ----- 4) with the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's).+-- 4) with the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be prepended to the next word. --+-- 5) with the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be appended to the previous word.+-- argsToGetInfoProcessment   :: (Double -> String -> ([[[PRS]]] -> [[Double]])) -- ^ The function that is needed in the 'procRhythmicity23F' function.  -- Specifies a way how the syllables represented in the phonetic language approach transforms into their durations and@@ -56,19 +49,20 @@   -- exact one and, therefore, the default one.  -> IO () argsToGetInfoProcessment h qs = do- args50 <- getArgs- let (pPs,args40) = takeBsR [("+p",1)] args50+ args500 <- getArgs+ let (pPs,args50) = takeBsR [("+p",1)] args500      pairwisePermutations = R.bTransform2Perms . getB "+p" $ pPs-     (!args14,!args000) = splitAt 4 args40-     [fileGWrSys, controlFile, segmentRulesFile, concatenationsFileP] = args14- files4ArgsProcessment pairwisePermutations fileGWrSys controlFile segmentRulesFile concatenationsFileP h qs args000+     (!args15,!args000) = splitAt 5 args50+     [fileGWrSys, controlFile, segmentRulesFile, concatenationsFileP, concatenationsFileA] = args15+ files4ArgsProcessment pairwisePermutations fileGWrSys controlFile segmentRulesFile concatenationsFileP concatenationsFileA h qs args000  files4ArgsProcessment   :: R.PermutationsType -- ^ Whether to use just one of the express permutations, or the full universal set.   -> FilePath -- ^ With the 'GWritingSystemPRPLX' specifications only (see the gwrsysExample.txt file in the @phonetic-languages-phonetics-basics@ package as a schema);   -> FilePath -- ^ With the 5 meaningful lines that are delimited with the \'~\' line one from another with the specifications for the possible allophones (if any), 'CharPhoneticClassification', white spaces information (two 'String's) and the 'String' of all the possible 'PLL' 'Char's;   -> FilePath -- ^ With the 'SegmentRulesG' specifications only;-  -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's).+  -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These ones are to be prepended to the next word after them.+  -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These ones are to be prepended to the next word after them.   -> (Double -> String -> ([[[PRS]]] -> [[Double]])) -- ^ The function that is needed in the 'procRhythmicity23F' function.   -- Specifies a way how the syllables represented in the phonetic language approach transforms into their durations and   -- depends on two parameters. Is specific for every phonetic language and every representation, so must be provided@@ -78,8 +72,9 @@   -- exact one and, therefore, the default one.   -> [String] -- ^ List of other command line arguments   -> IO ()-files4ArgsProcessment pairwisePermutations !fileGWrSys !controlFile !segmentRulesFile !concatenationsFileP h qs args000 = do- let (argsA,argsB,argsC1,argss) = args2Args31R fstCharsM specs1 args000+files4ArgsProcessment pairwisePermutations !fileGWrSys !controlFile !segmentRulesFile !concatenationsFileP !concatenationsFileA h qs args000 = do+ [fileGWrSys1, controlFile1, segmentRulesFile1, concatenationsFileP1, concatenationsFileA1] <- mapM readFile [fileGWrSys, controlFile, segmentRulesFile, concatenationsFileP, concatenationsFileA]+ let (argsA,argsB,argsC1,_) = args2Args31R fstCharsM specs1 args000      !args00 = snd . takeAsR [("+b",0)] . snd . takeBsR [("+x",1),("+g",1)] $ args000      !growing = concat . getB "+g" $ argsB      (!gr1,!gr2)@@ -97,7 +92,7 @@      !coeffsWX = readCF . concat . getB "+x" $ argsB      !lInes = filter (any (== ':')) args0      !numbersJustPrint =  filter (== "@n") args0-     (!wrs, !ks, !arr, !gs, !js, !vs, !ysss, !xs) = innerProcessmentSimple fileGWrSys controlFile segmentRulesFile concatenationsFileP+     (!wrs, !ks, !arr, !gs, !js, !vs, !ysss, !zzzsss, !xs) = innerProcessmentSimple fileGWrSys1 controlFile1 segmentRulesFile1 concatenationsFileP1 concatenationsFileA1  if isPair coeffs then do   let !file = concat . drop 1 . take 2 $ args   if null numbersJustPrint then do@@ -105,10 +100,10 @@        !printLine = fromMaybe 0 (readMaybe (concat . take 1 . drop 3 $ args)::(Maybe Int))        !toOneLine = fromMaybe 0 (readMaybe (concat . take 1 . drop 4 $ args)::(Maybe Int))        !choice = concat . drop 5 . take 6 $ args-   generalProc pairwisePermutations (gr1,gr2) wrs ks arr gs h qs ysss xs js vs {- the old arguments follow -} lstW multiples lInes coeffs coeffsWX file gzS printLine toOneLine choice+   generalProc pairwisePermutations (gr1,gr2) wrs ks arr gs h qs ysss zzzsss xs js vs {- the old arguments follow -} lstW multiples lInes coeffs coeffsWX file gzS printLine toOneLine choice   else do    contents <- readFile file-   fLinesNIO (if pairwisePermutations /= R.P 0 then 10 else 7) ysss xs js vs contents+   fLinesNIO (if pairwisePermutations /= R.P 0 then 10 else 7) ysss zzzsss xs js vs contents  else do   let !file = concat . take 1 $ args   if null numbersJustPrint then do@@ -116,10 +111,10 @@        !printLine = fromMaybe 0 (readMaybe (concat . take 1 . drop 2 $ args)::(Maybe Int))        !toOneLine = fromMaybe 0 (readMaybe (concat . take 1 . drop 3 $ args)::(Maybe Int))        !choice = concat . drop 4 . take 5 $ args-   generalProc pairwisePermutations (gr1,gr2) wrs ks arr gs h qs ysss xs js vs {- the old arguments follow -} lstW multiples lInes coeffs coeffsWX file gzS printLine toOneLine choice+   generalProc pairwisePermutations (gr1,gr2) wrs ks arr gs h qs ysss zzzsss xs js vs {- the old arguments follow -} lstW multiples lInes coeffs coeffsWX file gzS printLine toOneLine choice   else do    contents <- readFile file-   fLinesNIO (if pairwisePermutations /= R.P 0 then 10 else 7) ysss xs js vs contents+   fLinesNIO (if pairwisePermutations /= R.P 0 then 10 else 7) ysss zzzsss xs js vs contents  aSpecs :: CLSpecifications aSpecs = [("+b",0)]
Phonetic/Languages/General/GetTextualInfo.hs view
@@ -67,8 +67,10 @@  -> [([[[PRS]]] -> [[Double]])] -- ^ A list of 4 different functions that specifies the syllables durations, analogues of the   -- syllableDurationsD functions from the @ukrainian-phonetics-basics-array@ package. The last one must be probably the most   -- exact one and, therefore, the default one.- -> Concatenations -- ^ Data used to concatenate the basic grammar preserving words and word sequences to the next word to+ -> Concatenations -- ^ Data used to concatenate (prepend) the basic grammar preserving words and word sequences to the next word to  -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.+ -> Concatenations -- ^ Data used to concatenate (append) the basic grammar preserving words and word sequences to the next word to+ -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.  -> String  -> String  -> String@@ -92,18 +94,18 @@  -- Besides there are new lines of the arguments for the 'String' argument that can begin with \"c\", \"s\", \"t\",  -- \"u\", \"v\" letters. For more information, please, refer to the 'Phonetic.Languages.Array.Ukrainian.PropertiesSyllablesG2.rhythmicity'.  -> IO ()-generalProc pairwisePermutations (gr1,gr2) wrs ks arr gs h rs ysss xs js vs lstW multiples2 lInes coeffs coeffsWX file gzS printLine toOneLine choice+generalProc pairwisePermutations (gr1,gr2) wrs ks arr gs h rs ysss zzzsss xs js vs lstW multiples2 lInes coeffs coeffsWX file gzS printLine toOneLine choice  | null lInes = do     contents <- readFile file     let !flines-           | gr1 == 0 = fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss xs js vs toOneLine contents-           | otherwise = prepareGrowTextMN gr1 gr2 ysss xs . unlines . fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss xs js vs toOneLine $ contents+           | gr1 == 0 = fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss zzzsss xs js vs toOneLine contents+           | otherwise = prepareGrowTextMN gr1 gr2 ysss zzzsss xs . unlines . fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss zzzsss xs js vs toOneLine $ contents     getData3 pairwisePermutations wrs ks arr gs js vs h rs lstW coeffs coeffsWX (getIntervalsNS lstW gzS flines) printLine choice multiples2 flines  | otherwise = do     contents <- readFile file     let !flines-           | gr1 == 0 = fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss xs js vs toOneLine . unlines . linesFromArgsG lInes . fLines ysss xs js vs 0 $ contents-           | otherwise = prepareGrowTextMN gr1 gr2 ysss xs . unlines . fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss xs js vs toOneLine . unlines . linesFromArgsG lInes . fLines ysss xs js vs 0 $ contents+           | gr1 == 0 = fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss zzzsss xs js vs toOneLine . unlines . linesFromArgsG lInes . fLines ysss zzzsss xs js vs 0 $ contents+           | otherwise = prepareGrowTextMN gr1 gr2 ysss zzzsss xs . unlines . fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss zzzsss xs js vs toOneLine . unlines . linesFromArgsG lInes . fLines ysss zzzsss xs js vs 0 $ contents     getData3 pairwisePermutations wrs ks arr gs js vs h rs lstW coeffs coeffsWX (getIntervalsNS lstW gzS flines) printLine choice multiples2 flines  linesFromArgs1
Phonetic/Languages/General/Lines.hs view
@@ -62,8 +62,10 @@  -> [([[[PRS]]] -> [[Double]])] -- ^ A list of 4 different functions that specifies the syllables durations, analogues of the   -- syllableDurationsD functions from the @ukrainian-phonetics-basics-array@ package. The last one must be probably the most   -- exact one and, therefore, the default one.- -> Concatenations -- ^ Data used to concatenate the basic grammar preserving words and word sequences to the next word to+ -> Concatenations -- ^ Data used to concatenate (prepend) the basic grammar preserving words and word sequences to the next word to  -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.+ -> Concatenations -- ^ Data used to concatenate (append) the basic grammar preserving words and word sequences to the next word to+ -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.  -> String  -> String  -> String@@ -73,15 +75,15 @@  -> Int  -> FilePath  -> IO ()-generalProcessment pairwisePermutations (gr1,gr2) wrs ks arr gs h rs ysss xs js vs coeffs numericArgs choices numberI file = do+generalProcessment pairwisePermutations (gr1,gr2) wrs ks arr gs h rs ysss zzzsss xs js vs coeffs numericArgs choices numberI file = do   contents <- readFile file   let !permsV         | pairwisePermutations == R.P 2 = genPairwisePermutationsArrLN 10         | pairwisePermutations == R.P 1 = genElementaryPermutationsArrLN1 10         | otherwise = genPermutationsArrL       !flines-        | gr1 == 0 = fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss xs js vs 0 contents-        | otherwise = prepareGrowTextMN gr1 gr2 ysss xs . unlines . fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss xs js vs 0 $ contents+        | gr1 == 0 = fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss zzzsss xs js vs 0 contents+        | otherwise = prepareGrowTextMN gr1 gr2 ysss zzzsss xs . unlines . fLinesN (if pairwisePermutations /= R.P 0 then 10 else 7) ysss zzzsss xs js vs 0 $ contents       !lasts = map (\ts -> if null . words $ ts then [] else last . words $ ts) flines   if compare numberI 2 == LT then     mapM_ (\choice -> toFileStr (choice ++ "." ++ file ++ ".new.txt") (circle2 wrs ks arr gs js vs h rs coeffs permsV choice [] $ flines)) choices
Phonetic/Languages/General/Lines/Parsing.hs view
@@ -19,15 +19,11 @@ import Data.Maybe (fromMaybe) import System.Environment (getArgs) import Data.Char (isDigit)-import Phonetic.Languages.General.Common import Phonetic.Languages.General.Lines import Data.Phonetic.Languages.PrepareText-import Phonetic.Languages.General.Lines-import Data.List (sort,nub)-import GHC.Arr+import Data.List (nub) import Data.Phonetic.Languages.Base import Data.Phonetic.Languages.Syllables-import Data.Phonetic.Languages.SpecificationsRead import Phonetic.Languages.General.Simple.Parsing (innerProcessmentSimple) import CLI.Arguments import CLI.Arguments.Parsing@@ -63,7 +59,7 @@  -> IO () argsToLinePrepare h qs = do  args50 <- getArgs- let (argsA,argsB,argsC1,argss) = args2Args31R fstCharsM specs1 args50+ let (argsA,argsB,argsC1,_) = args2Args31R fstCharsM specs1 args50      (prWP,args000) = takeBsR [("+p",1)] args50      pairwisePermutations = R.bTransform2Perms . getB "+p" $ prWP      multiple@@ -92,9 +88,9 @@                                   (Just n4,Just m4) -> if (m4 `rem` 7) < (n4 `rem` 7) then (n4 `rem` 7 + 1, m4 `rem` 7 + 1) else (0,0)                                   _ -> (0,0)       args0 = drop 5 args000-      [fileGWrSys, controlFile, segmentRulesFile, concatenationsFileP] = drop 1 . take 5 $ args00 -- To get the valid 'Concatenations' data.-  (wrs, ks, arr, gs, js, vs, ysss, xs, numericArgs, choices, numberI, file) <- files4Processment fileGWrSys controlFile segmentRulesFile concatenationsFileP multiple args0-  generalProcessment pairwisePermutations (gr1,gr2) wrs ks arr gs h qs ysss xs js vs {- the old arguments afterwards -} coeffs numericArgs choices numberI file+      [fileGWrSys, controlFile, segmentRulesFile, concatenationsFileP, concatenationsFileA] = drop 1 . take 6 $ args00 -- To get the valid 'Concatenations' data.+  (wrs, ks, arr, gs, js, vs, ysss, zzzsss, xs, numericArgs, choices, numberI, file) <- files4Processment fileGWrSys controlFile segmentRulesFile concatenationsFileP concatenationsFileA multiple args0+  generalProcessment pairwisePermutations (gr1,gr2) wrs ks arr gs h qs ysss zzzsss xs js vs {- the old arguments afterwards -} coeffs numericArgs choices numberI file  -- | Is used internally in the 'argsToLinePrepare'. Nevertheless, can be used independently if the semantics -- of the arguments and their structure are preserved.@@ -102,12 +98,13 @@   :: FilePath -- ^ With the 'GWritingSystemPRPLX' specifications only (see the gwrsysExample.txt file in the @phonetic-languages-phonetics-basics@ package as a schema);   -> FilePath -- ^ With the 5 meaningful lines that are delimited with the \'~\' line one from another with the specifications for the possible allophones (if any), 'CharPhoneticClassification', white spaces information (two 'String's) and the 'String' of all the possible 'PLL' 'Char's;   -> FilePath -- ^ With the 'SegmentRulesG' specifications only;-  -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's).+  -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be prepended to the next word.+  -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be appended to the previous word.   -> Int -- ^ If equal to 1, then the function is intended to be used in the multiple properties mode, else it is intended to be used in the single property mode.   -> [String] -- ^ List of other command line arguments-  -> IO (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification, SegmentRulesG, String, String, Concatenations, String, [String], [String], Int, FilePath)-files4Processment fileGWrSys controlFile segmentRulesFile concatenationsFileP multiple args0 = do-  [controlConts, gwrsCnts, segmentData, concatenationsFile] <- mapM readFile [controlFile, fileGWrSys, segmentRulesFile, concatenationsFileP]+  -> IO (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification, SegmentRulesG, String, String, Concatenations, Concatenations, String, [String], [String], Int, FilePath)+files4Processment fileGWrSys controlFile segmentRulesFile concatenationsFileP concatenationsFileA multiple args0 = do+  [controlConts, gwrsCnts, segmentData, concatenationsFileP1, concatenationsFileA1] <- mapM readFile [controlFile, fileGWrSys, segmentRulesFile, concatenationsFileP, concatenationsFileA]   let (choices,args00)        | multiple == 1 = (\(rs,js) -> (getC "+m" rs,js)) . takeCs1R fstCharsM cSpecs1 $ args0        | otherwise = (drop 1 . take 2 . snd . takeBsR [("+g",1)] $ args0,args0)@@ -115,8 +112,8 @@       !numericArgs = filter (all isDigit) args1       !numberI = fromMaybe 1 (readMaybe (concat . take 1 $ numericArgs)::Maybe Int)       !file = concat . take 1 $ args0-      (wrs, ks, arr, gs, js, vs, ysss, xs) = innerProcessmentSimple gwrsCnts controlConts segmentData concatenationsFile-        in return (wrs, ks, arr, gs, js, vs, ysss, xs, numericArgs, choices, numberI, file)+      (wrs, ks, arr, gs, js, vs, ysss, zzzsss, xs) = innerProcessmentSimple gwrsCnts controlConts segmentData concatenationsFileP1 concatenationsFileA1+        in return (wrs, ks, arr, gs, js, vs, ysss, zzzsss, xs, numericArgs, choices, numberI, file)  aSpecs :: CLSpecifications aSpecs = [("+c",0)]
Phonetic/Languages/General/Simple.hs view
@@ -74,8 +74,10 @@  -> [([[[PRS]]] -> [[Double]])] -- ^ A list of 4 different functions that specifies the syllables durations, analogues of the   -- syllableDurationsD functions from the @ukrainian-phonetics-basics-array@ package. The last one must be probably the most   -- exact one and, therefore, the default one.- -> Concatenations -- ^ Data used to concatenate the basic grammar preserving words and word sequences to the next word to+ -> Concatenations -- ^ Data used to concatenate (prepend) the basic grammar preserving words and word sequences to the next word to  -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.+ -> Concatenations -- ^ Data used to concatenate (append) the basic grammar preserving words and word sequences to the next word to+ -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.  -> String  -> FilePath  -> Bool -- ^ Whether to run in the recursive mode.@@ -87,12 +89,12 @@  -> [String]  -> Bool  -> IO ()-generalProc3G pairwisePermutations p textProcessmentFss textProcessment0 textProcessment1 wrs ks arr gs js vs h qs ysss ws toFile1 recursiveMode interactive jstL0 args0 coeffs coeffsWX args lstW2- | null textProcessment0 = generalProc2G pairwisePermutations wrs ks arr gs js vs h qs ysss ws toFile1 recursiveMode interactive jstL0 args0 coeffs coeffsWX args lstW2+generalProc3G pairwisePermutations p textProcessmentFss textProcessment0 textProcessment1 wrs ks arr gs js vs h qs ysss zzzsss ws toFile1 recursiveMode interactive jstL0 args0 coeffs coeffsWX args lstW2+ | null textProcessment0 = generalProc2G pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws toFile1 recursiveMode interactive jstL0 args0 coeffs coeffsWX args lstW2  | null textProcessmentFss = mapM_ (\_ -> do  -- interactive training mode     putStrLn . messageInfo $ 7     lineA <- getLine-    generalProc2G pairwisePermutations wrs ks arr gs js vs h qs ysss ws toFile1 recursiveMode interactive jstL0+    generalProc2G pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws toFile1 recursiveMode interactive jstL0       (fullArgsConvertTextualSimple p lineA args0) coeffs coeffsWX (fullArgsConvertTextualSimple p lineA args)       lstW2) [0..]  | otherwise =@@ -101,15 +103,15 @@         if pairwisePermutations /= R.P 0 then do           let !wss                 | textProcessment1 `elem` [10,20,30,40,50,60,70,80,90] = kss-                | otherwise = prepareTuneTextMN m 1 ysss ws . unwords $ kss-          mapM_ (\tss -> generalProc2G pairwisePermutations wrs ks arr gs js vs h qs ysss ws toFile1 recursiveMode+                | otherwise = prepareTuneTextMN m 1 ysss zzzsss ws . unwords $ kss+          mapM_ (\tss -> generalProc2G pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws toFile1 recursiveMode                  interactive jstL0 (fullArgsConvertTextualSimple p tss args0) coeffs coeffsWX                   (fullArgsConvertTextualSimple p tss args) lstW2) wss         else do           let !wss                | textProcessment1 `elem` [20,30,40,50,60,70] = kss-               | otherwise = prepareTuneTextMN (if textProcessment1 `elem` [21,31,41,51,61] then m else 7) 1 ysss ws . unwords $ kss-          mapM_ (\tss -> generalProc2G pairwisePermutations wrs ks arr gs js vs h qs ysss ws toFile1 recursiveMode interactive jstL0+               | otherwise = prepareTuneTextMN (if textProcessment1 `elem` [21,31,41,51,61] then m else 7) 1 ysss zzzsss ws . unwords $ kss+          mapM_ (\tss -> generalProc2G pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws toFile1 recursiveMode interactive jstL0                  (fullArgsConvertTextualSimple p tss args0) coeffs coeffsWX                   (fullArgsConvertTextualSimple p tss args) lstW2) wss) textProcessmentFss      where m = if textProcessment1 == 10 || textProcessment1 == 11 then 10 else quot textProcessment1 10@@ -131,8 +133,10 @@  -> [([[[PRS]]] -> [[Double]])] -- ^ A list of 4 different functions that specifies the syllables durations, analogues of the   -- syllableDurationsD functions from the @ukrainian-phonetics-basics-array@ package. The last one must be probably the most   -- exact one and, therefore, the default one.- -> Concatenations -- ^ Data used to concatenate the basic grammar preserving words and word sequences to the next word to+ -> Concatenations -- ^ Data used to concatenate (prepend) the basic grammar preserving words and word sequences to the next word to  -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.+ -> Concatenations -- ^ Data used to concatenate (append) the basic grammar preserving words and word sequences to the next word to+ -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.  -> String  -> FilePath  -> Bool -- ^ Whether to run in the recursive mode.@@ -144,17 +148,17 @@  -> [String]  -> Bool  -> IO ()-generalProc2G pairwisePermutations wrs ks arr gs js vs h qs ysss ws toFile1 recursiveMode interactive jstL0 args0 coeffs coeffsWX args lstW2+generalProc2G pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws toFile1 recursiveMode interactive jstL0 args0 coeffs coeffsWX args lstW2  | variations args = do     let !zsss = transformToVariations args     print zsss-    variantsG <- mapM (\xss -> generalProc2 pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX xss lstW2) zsss-    (if recursiveMode then interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX id variantsG args lstW2+    variantsG <- mapM (\xss -> generalProc2 pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX xss lstW2) zsss+    (if recursiveMode then interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX id variantsG args lstW2      else interactivePrintResult id variantsG) >>= \rs ->       case toFile1 of        "" -> return ()        ~fileName -> appendFile fileName (rs `mappend` newLineEnding)- | otherwise = generalProc2 pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX args lstW2 >>= \rs ->+ | otherwise = generalProc2 pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX args lstW2 >>= \rs ->       case toFile1 of        "" -> return ()        ~fileName -> appendFile fileName (rs `mappend` newLineEnding)@@ -176,8 +180,10 @@   -> [([[[PRS]]] -> [[Double]])] -- ^ A list of 4 different functions that specifies the syllables durations, analogues of the   -- syllableDurationsD functions from the @ukrainian-phonetics-basics-array@ package. The last one must be probably the most   -- exact one and, therefore, the default one.-  -> Concatenations -- ^ Data used to concatenate the basic grammar preserving words and word sequences to the next word to- -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.+  -> Concatenations -- ^ Data used to concatenate (prepend) the basic grammar preserving words and word sequences to the next word to+  -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.+  -> Concatenations -- ^ Data used to concatenate (append) the basic grammar preserving words and word sequences to the next word to+  -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.   -> String   -> Bool -- ^ Whether to run in the recursive mode.   -> Bool@@ -188,11 +194,11 @@   -> [String]   -> Bool   -> IO String-generalProc2 pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX args lstW2 = do+generalProc2 pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX args lstW2 = do   let !argMss = take 5 . filter (not . null) . forMultiplePropertiesF . drop 1 . dropWhile (/= "+m") . takeWhile (/= "-m") $ args0   if null argMss then do    let (!numericArgs,!textualArgs) = L.span (all isDigit) $ args-       !xs = concat . take 1 . prepareTuneTextMN (if pairwisePermutations /= R.P 0 then 10 else 7) 1 ysss ws . unwords . drop 1 $ textualArgs+       !xs = concat . take 1 . prepareTuneTextMN (if pairwisePermutations /= R.P 0 then 10 else 7) 1 ysss zzzsss ws . unwords . drop 1 $ textualArgs        !l = length . words $ xs        !argCs = catMaybes (fmap (readMaybeECG (l - 1)) . (showB l lstW2:) . drop 1 . dropWhile (/= "+a") .           takeWhile (/= "-a") $ args0)@@ -202,20 +208,20 @@        !intervalNmbrs = (\zs -> if null zs then [numberI] else L.nub 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 wrs ks arr gs js vs id h coeffs qs choice in let !wwss = (:[]) . toResultR frep20 $ xs in-    if recursiveMode then interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX line wwss args lstW2+    if recursiveMode then interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX line wwss args lstW2     else if interactive then interactivePrintResult line wwss else print1el jstL0 choice wwss    else do     let !subs = subG (' ':js `mappend` vs) xs     if null argCs then let !perms = genPermutationsL l in do           temp <- generalProcMs wrs ks arr gs js vs h qs coeffs coeffsWX perms subs (intervalNmbrs, arg0, numberI, choice)-          if recursiveMode then interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX line temp args lstW2+          if recursiveMode then interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX line temp args lstW2           else if interactive then interactivePrintResult line temp else print1el jstL0 choice temp     else do      correct <- printWarning xs      if correct == "n" then putStrLn (messageInfo 1) >> return "" -- for the multiple variations mode (with curly brackets and slash in the text) the program does not stop here, but the variation is made empty and is proposed further as a variant.      else let !perms = decodeLConstraints argCs . genPermutationsL $ l in do           temp <- generalProcMs wrs ks arr gs js vs h qs coeffs coeffsWX perms subs (intervalNmbrs, arg0, numberI, choice)-          if recursiveMode then interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX line temp args lstW2+          if recursiveMode then interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX line temp args lstW2           else if interactive then interactivePrintResult line temp else print1el jstL0 choice temp   else do    let !choices = map fst argMss@@ -226,13 +232,13 @@          (\zs -> if null zs then [numberI] else L.nub 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 . prepareTuneTextMN (if pairwisePermutations /= R.P 0 then 10 else 7) 1 ysss ws . unwords $ args+       !xs = concat . take 1 . prepareTuneTextMN (if pairwisePermutations /= R.P 0 then 10 else 7) 1 ysss zzzsss ws . 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 wrs ks arr gs js vs id h coeffs qs (concat . take 1 $ choices) in     let !wwss = (:[]) . toResultR frep20 $ xs in-       if recursiveMode then interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX line wwss args lstW2+       if recursiveMode then interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX line wwss args lstW2        else if interactive then interactivePrintResult line wwss             else print1el jstL0 (concat . take 1 $ choices) wwss    else do@@ -241,12 +247,12 @@                              | pairwisePermutations == R.P 2 = genPairwisePermutationsLN l                              | pairwisePermutations == R.P 1 = genElementaryPermutationsLN1 l                              | otherwise = genPermutationsL l in-      generalProcMMs pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX argsZipped perms subs args lstW2+      generalProcMMs pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX argsZipped perms subs args lstW2     else do      correct <- printWarning xs      if correct == "n" then putStrLn (messageInfo 1) >> return "" -- for the multiple variations mode (with curly brackets and slash in the text) the program does not stop here, but the variation is made empty and is proposed further as a variant.      else let !perms = decodeLConstraints argCs . (case pairwisePermutations of {R.P 2 -> genPairwisePermutationsLN ; R.P 1 -> genElementaryPermutationsLN1 ; ~rrr -> genPermutationsL}) $ l in-            generalProcMMs pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX argsZipped perms subs args lstW2+            generalProcMMs pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX argsZipped perms subs args lstW2  -- | Function provides message information. messageInfo :: Int -> String@@ -293,8 +299,10 @@  -> [([[[PRS]]] -> [[Double]])] -- ^ A list of 4 different functions that specifies the syllables durations, analogues of the  -- syllableDurationsD functions from the @ukrainian-phonetics-basics-array@ package. The last one must be probably the most  -- exact one and, therefore, the default one.- -> Concatenations -- ^ Data used to concatenate the basic grammar preserving words and word sequences to the next word to+ -> Concatenations -- ^ Data used to concatenate (prepend) the basic grammar preserving words and word sequences to the next word to  -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.+ -> Concatenations -- ^ Data used to concatenate (append) the basic grammar preserving words and word sequences to the next word to+ -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.  -> String  -> Bool -- ^ Whether to run in the recursive mode.  -> Bool@@ -307,7 +315,7 @@  -> [String]  -> Bool  -> IO String-interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX f xss args lstW2+interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX f xss args lstW2   | null xss = (putStrLn . messageInfo $ 5) >> return ""   | otherwise = do      let !datas = map (\(idx,str) -> show idx `mappend` ('\t' : str)) . trans232 . map f $ xss@@ -329,7 +337,7 @@            mStr <- getLine            let m = fromMaybe 10 (readMaybe mStr::Maybe Int) in return . take m . words $ strIntrpr          else return . take 7 . words $ strIntrpr-       generalProc2 pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX (firstArgs `mappend` wordsNN) lstW2+       generalProc2 pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX (firstArgs `mappend` wordsNN) lstW2  printWarning :: String -> IO String printWarning xs = do@@ -398,8 +406,10 @@  -> [([[[PRS]]] -> [[Double]])] -- ^ A list of 4 different functions that specifies the syllables durations, analogues of the   -- syllableDurationsD functions from the @ukrainian-phonetics-basics-array@ package. The last one must be probably the most   -- exact one and, therefore, the default one.- -> Concatenations -- ^ Data used to concatenate the basic grammar preserving words and word sequences to the next word to+ -> Concatenations -- ^ Data used to concatenate (prepend) the basic grammar preserving words and word sequences to the next word to  -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.+ -> Concatenations -- ^ Data used to concatenate (append) the basic grammar preserving words and word sequences to the next word to+ -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.  -> String  -> Bool -- ^ Whether to run in the recursive mode.  -> Bool@@ -419,15 +429,15 @@  -> [String]  -> Bool  -> IO String-generalProcMMs pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactiveMM jstL0 args0 coeffs coeffsWX rs perms subs args lstW2 =+generalProcMMs pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactiveMM jstL0 args0 coeffs coeffsWX rs perms subs args lstW2 =  case length rs of   0 -> putStrLn (messageInfo 4) >> return ""   1 -> putStrLn (messageInfo 5) >> do         temp <- generalProcMs wrs ks arr gs js vs h qs coeffs coeffsWX perms subs (head rs)-        finalProc pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactiveMM jstL0 args0 coeffs coeffsWX line temp args lstW2+        finalProc pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactiveMM jstL0 args0 coeffs coeffsWX line temp args lstW2   _ -> do          genVariants <- mapM (generalProcMs wrs ks arr gs js vs h qs coeffs coeffsWX perms subs) rs-         finalProc pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactiveMM jstL0 args0 coeffs coeffsWX id (foldlI . map (map line) $ genVariants) args lstW2+         finalProc pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactiveMM jstL0 args0 coeffs coeffsWX id (foldlI . map (map line) $ genVariants) args lstW2  foldlI :: [[String]] -> [String] foldlI (xs:ys:xss) = foldlI (intersectInterResults xs ys : xss)@@ -451,8 +461,10 @@  -> [([[[PRS]]] -> [[Double]])] -- ^ A list of 4 different functions that specifies the syllables durations, analogues of the   -- syllableDurationsD functions from the @ukrainian-phonetics-basics-array@ package. The last one must be probably the most   -- exact one and, therefore, the default one.- -> Concatenations -- ^ Data used to concatenate the basic grammar preserving words and word sequences to the next word to+ -> Concatenations -- ^ Data used to concatenate (prepend) the basic grammar preserving words and word sequences to the next word to  -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.+ -> Concatenations -- ^ Data used to concatenate (append) the basic grammar preserving words and word sequences to the next word to+ -- leave the most of the meaning (semantics) of the text available to easy understanding while reading and listening to.  -> String  -> Bool -- ^ Whether to run in the recursive mode.  -> Bool@@ -465,8 +477,8 @@  -> [String]  -> Bool  -> IO String-finalProc  pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX f xss args lstW2- | recursiveMode = interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX f xss args lstW2+finalProc  pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX f xss args lstW2+ | recursiveMode = interactivePrintResultRecursive pairwisePermutations wrs ks arr gs js vs h qs ysss zzzsss ws recursiveMode interactive jstL0 args0 coeffs coeffsWX f xss args lstW2  | otherwise = if interactive then interactivePrintResult f xss else putStrLn ts >> return ts   where ts = concatMap (\t -> f t `mappend` newLineEnding) xss 
Phonetic/Languages/General/Simple/Parsing.hs view
@@ -34,15 +34,17 @@ -- | Prints the rearrangements with the \"property\" information for the phonetic language text. -- Most of the arguments are obtained from the 'getArgs' function. -- While used, it distinguishes between two groups of command line arguments: the first four ones and the others afterwards.--- The first 4 arguments are the file names with the specifications.+-- The first 5 arguments are the file names with the specifications. -- 1) with the 'GWritingSystemPRPLX' specifications only (see the gwrsysExample.txt file in the @phonetic-languages-phonetics-basics@ package as a schema); -- -- 2) with the 5 meaningful lines that are delimited with the \'~\' line one from another with the specifications for the possible allophones (if any), 'CharPhoneticClassification', white spaces information (two 'String's) and the 'String' of all the possible 'PLL' 'Char's; -- -- 3) with the 'SegmentRulesG' specifications only; ----- 4) with the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's).+-- 4) with the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be prepended to the next word. --+-- 5) with the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be appended to the previous word.+-- -- Afterwards, the meaning of the command line arguments are as follows (from the left to the right). -- -- The first next command line argument must be a@@ -79,14 +81,14 @@      textProcessment1 = fromMaybe 70 (readMaybe (drop 2 textProcessment0)::Maybe Int)      (rcrs,args000) = takeAsR [("+r",0)] . filter (not . null) $ args0000F      recursiveMode = oneA "+r" rcrs -- Specifies whether to use the interactive recursive mode-     (!args14,!args00) = splitAt 4 args000-     [fileGWrSys, controlFile, segmentRulesFile, concatenationsFileP] = args14- (gwrsCnts, controlConts, segmentData, concatenationsFile, toFileMode1, interactiveP, jstL0, args0, coeffs, coeffsWX, args, lstW) <- argsProcessment fileGWrSys controlFile segmentRulesFile concatenationsFileP args00- let (wrs, ks, arr, gs, js, vs, ysss, ws) = innerProcessmentSimple gwrsCnts controlConts segmentData concatenationsFile+     (!args15,!args00) = splitAt 5 args000+     [fileGWrSys, controlFile, segmentRulesFile, concatenationsFileP,concatenationsFileA] = args15+ (gwrsCnts, controlConts, segmentData, concatenationsFileP1, concatenationsFileA1, toFileMode1, interactiveP, jstL0, args0, coeffs, coeffsWX, args, lstW) <- argsProcessment fileGWrSys controlFile segmentRulesFile concatenationsFileP concatenationsFileA args00+ let (wrs, ks, arr, gs, js, vs, ysss, zzzsss, ws) = innerProcessmentSimple gwrsCnts controlConts segmentData concatenationsFileP1 concatenationsFileA1  textProcessmentFss0 <- mapM (readFileIfAny) textProcessmentFssFs  let textProcessmentFss = filter (not . null) textProcessmentFss0- if isPair coeffs then generalProc3G pairwisePermutations p textProcessmentFss textProcessment0 textProcessment1 wrs ks arr gs js vs h qs ysss ws {- old arguments follow -} toFileMode1 recursiveMode interactiveP jstL0 args0 coeffs coeffsWX (drop 1 args) lstW- else generalProc3G pairwisePermutations p textProcessmentFss textProcessment0 textProcessment1 wrs ks arr gs js vs h qs ysss ws toFileMode1 recursiveMode interactiveP jstL0 args0 coeffs coeffsWX args lstW+ if isPair coeffs then generalProc3G pairwisePermutations p textProcessmentFss textProcessment0 textProcessment1 wrs ks arr gs js vs h qs ysss zzzsss ws {- old arguments follow -} toFileMode1 recursiveMode interactiveP jstL0 args0 coeffs coeffsWX (drop 1 args) lstW+ else generalProc3G pairwisePermutations p textProcessmentFss textProcessment0 textProcessment1 wrs ks arr gs js vs h qs ysss zzzsss ws toFileMode1 recursiveMode interactiveP jstL0 args0 coeffs coeffsWX args lstW  -- | Similar to the 'argsToSimplePrepare' function, but takes explicitly the four 'FilePath's for the files -- respectively and the last argument the 'String' with all the other specifications. If it is not proper,@@ -96,7 +98,8 @@  -> FilePath -- ^ With the 'GWritingSystemPRPLX' specifications only (see the gwrsysExample.txt file in the @phonetic-languages-phonetics-basics@ package as a schema);  -> FilePath -- ^ With the 5 meaningful lines that are delimited with the \'~\' line one from another with the specifications for the possible allophones (if any), 'CharPhoneticClassification', white spaces information (two 'String's) and the 'String' of all the possible 'PLL' 'Char's;  -> FilePath -- ^ With the 'SegmentRulesG' specifications only;- -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's).+ -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be prepended to the next word.+ -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be appended to the previous word.  -> (Double -> String -> ([[[PRS]]] -> [[Double]])) -- ^ The function that is needed in the 'procRhythmicity23F' function.  -- Specifies a way how the syllables represented in the phonetic language approach transforms into their durations and  -- depends on two parameters. Is specific for every phonetic language and every representation, so must be provided@@ -110,32 +113,34 @@  -> String -- ^ If empty, the function is just 'generalProc2G' with the arguments starting from the first 'Bool' here.  -> Int  -> IO ()-argsToSimplePrepare4Files pairwisePermutations fileGWrSys controlFile segmentRulesFile concatenationsFileP h qs other_args p textProcessmentFss textProcessment0 textProcessment1 = do- let args000 = drop 4 . words $ other_args+argsToSimplePrepare4Files pairwisePermutations fileGWrSys controlFile segmentRulesFile concatenationsFileP concatenationsFileA h qs other_args p textProcessmentFss textProcessment0 textProcessment1 = do+ let args000 = drop 5 . words $ other_args      (rcs,args00) = takeAsR [("+r",0)] args000      recursiveMode = oneA "+r" rcs -- Specifies whether to use the interactive recursive mode- (gwrsCnts, controlConts, segmentData, concatenationsFile, toFileMode1, interactiveP, jstL0, args0, coeffs, coeffsWX, args, lstW) <- argsProcessment fileGWrSys controlFile segmentRulesFile concatenationsFileP args00- let (wrs, ks, arr, gs, js, vs, ysss, ws) = innerProcessmentSimple gwrsCnts controlConts segmentData concatenationsFile- if isPair coeffs then generalProc3G pairwisePermutations p textProcessmentFss textProcessment0 textProcessment1 wrs ks arr gs js vs h qs ysss ws {- old arguments follow -} toFileMode1 recursiveMode interactiveP jstL0 args0 coeffs coeffsWX (drop 1 args) lstW- else generalProc3G pairwisePermutations p textProcessmentFss textProcessment0 textProcessment1 wrs ks arr gs js vs h qs ysss ws toFileMode1 recursiveMode interactiveP jstL0 args0 coeffs coeffsWX args lstW+ (gwrsCnts, controlConts, segmentData, concatenationsFileP1, concatenationsFileA1, toFileMode1, interactiveP, jstL0, args0, coeffs, coeffsWX, args, lstW) <- argsProcessment fileGWrSys controlFile segmentRulesFile concatenationsFileP concatenationsFileA args00+ let (wrs, ks, arr, gs, js, vs, ysss, zzzsss, ws) = innerProcessmentSimple gwrsCnts controlConts segmentData concatenationsFileP1 concatenationsFileA1+ if isPair coeffs then generalProc3G pairwisePermutations p textProcessmentFss textProcessment0 textProcessment1 wrs ks arr gs js vs h qs ysss zzzsss ws {- old arguments follow -} toFileMode1 recursiveMode interactiveP jstL0 args0 coeffs coeffsWX (drop 1 args) lstW+ else generalProc3G pairwisePermutations p textProcessmentFss textProcessment0 textProcessment1 wrs ks arr gs js vs h qs ysss zzzsss ws toFileMode1 recursiveMode interactiveP jstL0 args0 coeffs coeffsWX args lstW  innerProcessmentSimple   :: String -- ^ Must be a valid 'GWritingSystemPRPLX' specifications 'String' representation only (see the gwrsysExample.txt file in the @phonetic-languages-phonetics-basics@ package as a schema);   -> String -- ^ Must be a 'String' with the 5 meaningful lines that are delimited with the \'~\' line one from another with the specifications for the possible allophones (if any), 'CharPhoneticClassification', white spaces information (two 'String's) and the 'String' of all the possible 'PLL' 'Char's;   -> String -- ^ Must be a 'String' with the 'SegmentRulesG' specifications only;-  -> String -- ^ Must be a 'String' with the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's).-  -> (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification, SegmentRulesG, String, String, Concatenations, String)-innerProcessmentSimple gwrsCnts controlConts segmentData concatenationsFile =+  -> String -- ^ Must be a 'String' with the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be prepended to the next word.+  -> String -- ^ Must be a 'String' with the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be appended to the previous word.+  -> (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification, SegmentRulesG, String, String, Concatenations, Concatenations, String)+innerProcessmentSimple gwrsCnts controlConts segmentData concatenationsFileP concatenationsFileA =  let [allophonesGs, charClfs, jss, vss, wss] = groupBetweenChars '~' . lines $ controlConts      wrs = getGWritingSystem '~' gwrsCnts      ks = sort . fromMaybe [] $ (readMaybe (unwords allophonesGs)::Maybe [(Char, Char)])      arr = read (unwords charClfs)::Array Int PRS -- The 'Array' must be previously sorted in the ascending order.      gs = read segmentData::SegmentRulesG-     ysss = sort2Concat . fromMaybe [] $ (readMaybe segmentData::Maybe [[String]])+     ysss = sort2Concat . fromMaybe [] $ (readMaybe concatenationsFileP::Maybe [[String]])+     zzzsss = sort2Concat . fromMaybe [] $ (readMaybe concatenationsFileA::Maybe [[String]])      js = concat jss      vs = concat vss      ws = sort . concat $ wss-       in (wrs, ks, arr, gs, js, vs, ysss, ws)+       in (wrs, ks, arr, gs, js, vs, ysss, zzzsss, ws)  {-| @ since 0.5.0.0 The function also can process \"w\" and \"x\" lines so returns two 'Coeffs2' values.@@ -144,10 +149,11 @@  :: FilePath -- ^ With the 'GWritingSystemPRPLX' specifications only (see the gwrsysExample.txt file in the @phonetic-languages-phonetics-basics@ package as a schema);  -> FilePath -- ^ With the 5 meaningful lines that are delimited with the \'~\' line one from another with the specifications for the possible allophones (if any), 'CharPhoneticClassification', white spaces information (two 'String's) and the 'String' of all the possible 'PLL' 'Char's;  -> FilePath -- ^ With the 'SegmentRulesG' specifications only;- -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's).+ -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be prepended to the next word.+ -> FilePath -- ^ With the 'Concatenations' specifications only (see the data in the EnglishConcatenated.txt file in the @phonetic-languages-phonetics-basics@ package as a list of English equivalents of the needed 'String's). These are to be appended to the previous word.  -> [String] -- ^ List of other args afterwards.- -> IO (String, String, String, String, String, Bool, Bool, [String], Coeffs2, Coeffs2, [String], Bool)-argsProcessment fileGWrSys controlFile segmentRulesFile concatenationsFileP args00 = do+ -> IO (String, String, String, String, String, String, Bool, Bool, [String], Coeffs2, Coeffs2, [String], Bool)+argsProcessment fileGWrSys controlFile segmentRulesFile concatenationsFileP concatenationsFileA args00 = do  let args0 = snd . takeBsR [("+x",1)] . snd . takeAsR (zip ["+b","+l","+bl","+i"] . cycle $ [0]) $ args00      lstW = any (\x -> x == "+b" || x == "+bl") args00 -- If one of the command line options is \"+b\" or \"+bl\" then the last word of the line will remain the last one.      jstL0 = any (\x -> x == "+l" || x == "+bl") args00 -- If one of the command line options is \"+l\" or \"+bl\" then the program outputs just lines without metrices values.@@ -160,8 +166,8 @@      args = snd . takeCs1R fstCharsMA [("+m",-1)] $ args02      coeffs = readCF . concat . take 1 $ args      coeffsWX = readCF . concat . getB "+x" . fst . takeBsR [("+x",1)] $ args00- [controlConts, gwrsCnts, segmentData, concatenationsFile] <- mapM readFile [controlFile, fileGWrSys, segmentRulesFile, concatenationsFileP]- return (gwrsCnts, controlConts, segmentData, concatenationsFile, toFileMode1, interactiveP, jstL0, args0, coeffs, coeffsWX, args, lstW)+ [controlConts, gwrsCnts, segmentData, concatenationsFileP1, concatenationsFileA1] <- mapM readFile [controlFile, fileGWrSys, segmentRulesFile, concatenationsFileP, concatenationsFileA]+ return (gwrsCnts, controlConts, segmentData, concatenationsFileP1, concatenationsFileA1, toFileMode1, interactiveP, jstL0, args0, coeffs, coeffsWX, args, lstW)  aSpecs :: CLSpecifications aSpecs = zip ["+r","+b","+l","+bl","+i"] . cycle $ [0]
README.md view
@@ -1,3 +1,7 @@+The version 0.15.0.0 fixed the long existing issues with not working prepending needed concatenations for the text in the+module Data.Phonetic.Languages.PrepareText. Added also the possibility to not only prepend needed words, but also append.+This introduces breaking changes, so please, check the code that uses library functions afterwards.+ The version 0.2.0.0 is prepared to the Day of the Saints Cyril and Methodius, the 'Apostles to the Slavs', and to the Day of Slavic writing systems and culture. 
phonetic-languages-simplified-generalized-examples-array.cabal view
@@ -3,7 +3,7 @@ -- http://haskell.org/cabal/users-guide/  name:                phonetic-languages-simplified-generalized-examples-array-version:             0.14.1.0+version:             0.15.0.0 synopsis:            Helps to create texts with the given phonetic properties (e. g. poetic). description:         Is rewritten from the modules of the @phonetic-languages-simplified-examples-array@ package. Can be used not only for Ukrainian, but also for other languages. To present the created text you can use e. g. html-presentation-text package: https://hackage.haskell.org/package/html-presentation-text . homepage:            https://hackage.haskell.org/package/phonetic-languages-simplified-generalized-examples-array@@ -21,6 +21,6 @@   exposed-modules:     Phonetic.Languages.General.Lines, Phonetic.Languages.General.Parsing, Phonetic.Languages.General.Simple, Phonetic.Languages.General.GetTextualInfo, Phonetic.Languages.Simplified.Array.General.FuncRep2RelatedG2, Phonetic.Languages.General.Simple.Parsing, Phonetic.Languages.General.Lines.Parsing, Phonetic.Languages.General.GetInfo.Parsing, EspeakNG_IPA   -- other-modules:   other-extensions:    BangPatterns, FlexibleContexts-  build-depends:       base >=4.8 && <5, phonetic-languages-simplified-generalized-examples-common >=0.3 && <1, subG >=0.4.2 && <1, phonetic-languages-simplified-generalized-properties-array >=0.8.5 && <1, phonetic-languages-simplified-base >=0.4.5 && <1, phonetic-languages-permutations-array >=0.3.3 && <1, phonetic-languages-filters-array >=0.1 && <1, phonetic-languages-phonetics-basics >=0.8.4 && <1, phonetic-languages-constraints-array >=0.1 && <1, parallel >=3.2.0.6 && <4, phonetic-languages-plus >=0.5.1 && <1, mmsyn2-array >=0.1.3 && <1, heaps >=0.3.6.1 && <1, mmsyn3 >=0.1.5 && <1, process >= 1.6.2 && <2, string-interpreter >=0.5.4.1 && <1, cli-arguments >=0.6 && <1+  build-depends:       base >=4.8 && <5, phonetic-languages-simplified-generalized-examples-common >=0.4 && <1, subG >=0.4.2 && <1, phonetic-languages-simplified-generalized-properties-array >=0.9 && <1, phonetic-languages-simplified-base >=0.4.5 && <1, phonetic-languages-permutations-array >=0.3.3 && <1, phonetic-languages-filters-array >=0.1 && <1, phonetic-languages-phonetics-basics >=0.9 && <1, phonetic-languages-constraints-array >=0.1 && <1, parallel >=3.2.0.6 && <4, phonetic-languages-plus >=0.5.1 && <1, mmsyn2-array >=0.1.3 && <1, heaps >=0.3.6.1 && <1, mmsyn3 >=0.1.5 && <1, process >= 1.6.2 && <2, string-interpreter >=0.5.4.1 && <1, cli-arguments >=0.6 && <1   -- hs-source-dirs:   default-language:    Haskell2010