Haskell hGetContents错误

时间:2017-05-11 08:47:55

标签: haskell

由于延迟评估会导致以下错误吗?

epubParsing :: FilePath -> IO [String]
epubParsing f = do
  h <- openFile f ReadMode
  hSetEncoding h utf8
  content <- hGetContents h
  hClose h
  return . fromJust $ scrapeStringLike content paragraphS

我收到错误:hGetContents: illegal operation (delayed read on closed handle) 为什么呢?

1 个答案:

答案 0 :(得分:2)

调用hGetContents会将句柄置于一个特殊的&#34;半封闭的&#34;州。在此之后,您无法对其执行任何显式操作。特别是,你不要手动关闭它;当您读到字符串的末尾时,它会在后台自动关闭。你可以删除那个hClose,它会起作用。

这是懒惰I / O的缺陷之一,也是人们建议避免它的原因之一;它使你的I / O操作的时间变得不可预测。