由于延迟评估会导致以下错误吗?
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)
为什么呢?
答案 0 :(得分:2)
调用hGetContents
会将句柄置于一个特殊的&#34;半封闭的&#34;州。在此之后,您无法对其执行任何显式操作。特别是,你不要手动关闭它;当您读到字符串的末尾时,它会在后台自动关闭。你可以删除那个hClose
,它会起作用。
这是懒惰I / O的缺陷之一,也是人们建议避免它的原因之一;它使你的I / O操作的时间变得不可预测。