Когда я открываю файл для чтения в 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
?