Здравствуйте. Делаю задание по Haskell. Вот код
{-# OPTIONS_GHC -Wall #-}
module Main where
import System.IO()
import System.Environment
main :: IO ()
main = do args <- getArgs
if (length args > 0) then do
f <- readFile $ head args
putStrLn $ seqWord f
else do
f <- getContents
putStrLn $ seqWord f
seqWord :: String -> String
seqWord [] = []
seqWord s = show $ unlines (map (unwords . filterWord . words) (lines s))
filterWord :: [String] -> [String]
filterWord [] = []
filterWord (x:xs) = x : filterWord (filter(/=x) xs)
Программа принимает на вход или имя файла и считывает его или текст stdin. Суть программы удалить уже встречавшиеся слова в строчке. Программа работает, но есть проблемы с выводом. Если вывести так:
seqWord s = show $ unlines (map (unwords . filterWord . words) (lines s))
то виведется что, то такое
"\"111111 1 11\"\n\"5555 5 55\"\n"
Если вывести так
seqWord s = unlines (map (unwords . filterWord . words) (lines s))
то в случаи с фалом, результат будет такой
1 12 5 8 13 145 85
546 822 1 12 58 8 9
444 4 44
Но если вводить вручную через консоль, то при нажатии на Enter будет сразу выводится результат, но он должен вывестись после Ctrl C.
Может кто знает как исправить эту проблему. Спасибо