import List import Char kotus = "sanat.xxmmll" main = do ss <- readFile kotus >>= return . lines let ws = map analyse ss mapM putStrLn $ treat ws treat = map mkRule . paradigms mkRule ((pa,ex),nu) = " " ++ pos ++ pa ++ " : Str -> " ++ poss ++ "Forms -- " ++ show nu ++ " " ++ ex ++ "\n = \\s -> ;" where (pos,poss) = if read (take 2 pa) < 52 then ("d","N") else ("c","V") paradigms = map info . groupByFst . sort info x = (last x, length x) --info = last groupByFst = groupBy (\ x y -> fst x == fst y) -- aaloe3 -- vuoksi17 -- visiitti5C analyse s = let rest = drop 7 s (word,end) = span (/='<') rest lst = drop 6 $ dropWhile (/='t') end (num,gr) = span isDigit lst para = (replicate (2 - length num) '0' ++ num) ++ ['A' | isPrefixOf "av" (drop 6 gr)] in (para,word) sub cs s = isPrefixOf cs s || isPrefixOf cs (drop 1 s)