Эта программа производит вывод, который я ожидаю, когда задан входной файл текста, ограниченный \n:
import System.IO
main :: IO ()
main = do h <- openFile "test.txt" ReadMode
xs <- getlines h
sequence_ $ map putStrLn xs
getlines :: Handle -> IO [String]
getlines h = hGetContents h >>= return . lines
Подставляя File для openFile и слегка переставляя
import System.IO
main :: IO ()
main = do xs <- withFile "test.txt" ReadMode getlines
sequence_ $ map putStrLn xs
getlines :: Handle -> IO [String]
getlines h = hGetContents h >>= return . lines
Мне не удается получить никакого вывода. Я в тупике.
Редактирование: больше не зацикливается: благодаря одному и тому же задумчивым и заставляющим задуматься ответам. Я немного больше читал в документации и узнал, что withFile можно понимать как частичное приложение скобки.
Вот что я закончил:
import System.IO
main :: IO ()
main = withFile "test.txt" ReadMode $ \h -> getlines h >>= mapM_ putStrLn
getlines :: Handle -> IO [String]
getlines h = lines `fmap` hGetContents h