У меня есть два фрагмента кода, которые, как я предполагаю, делают то же самое, но они этого не делают. Почему это так?
Этот работает нормально:
fdup :: String -> IO ()
fdup filename = do
h <- openFile filename ReadMode
c <- hGetContents h
putStr $ unlines $ parse $ lines c
hClose h
Этот возвращает ошибку Couldn't match expected type ‘IO [String]’ with actual type ‘[String]’
:
fdup' :: String -> IO ()
fdup' filename = do
h <- openFile filename ReadMode
c <- hGetContents h
ls <- lines c
putStr $ unlines $ parse $ ls
hClose h
parse :: [String] -> [String]
В чем разница между ними?