Когда я открываю файл для чтения в Haskell, я обнаружил, что не могу использовать содержимое файла после его закрытия. Например, эта программа напечатает содержимое файла:
main = do inFile <- openFile "foo" ReadMode
contents <- hGetContents inFile
putStr contents
hClose inFile
Я ожидал, что замена строки putStr
строкой hClose
не даст никакого эффекта, но эта программа ничего не печатает:
main = do inFile <- openFile "foo" ReadMode
contents <- hGetContents inFile
hClose inFile
putStr contents
Почему это происходит? Я предполагаю, что это как-то связано с ленивой оценкой, но я думал, что эти выражения будут упорядочены, поэтому проблем не будет. Как бы вы реализовали такую функцию, как readFile
?