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 +7/−0
- Phonetic/Languages/General/GetInfo/Parsing.hs +19/−24
- Phonetic/Languages/General/GetTextualInfo.hs +8/−6
- Phonetic/Languages/General/Lines.hs +6/−4
- Phonetic/Languages/General/Lines/Parsing.hs +12/−15
- Phonetic/Languages/General/Simple.hs +46/−34
- Phonetic/Languages/General/Simple/Parsing.hs +31/−25
- README.md +4/−0
- phonetic-languages-simplified-generalized-examples-array.cabal +2/−2
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