haskell hFlush没有像我期待的那样工作

时间:2013-05-16 02:01:32

标签: haskell io lazy-evaluation

我正在尝试使用hFlush来读取整个文件的程序,以避免我遇到的与懒惰IO有关的问题。

readHandle <- openFile fileName ReadMode
hSetBuffering readHandle $ BlockBuffering (Just 2048)
fileText <- hGetContents readHandle
hFlush readHandle
hClose readHandle

这只是给我错误:hFlush:非法操作(句柄关闭)

有人可以帮助我了解正在发生的事情

1 个答案:

答案 0 :(得分:6)

你的期望是错误的。通常,除了明确关闭句柄之外,在hGetContents调用后,您不应使用句柄。来自黑线鳕:

  

计算hGetContents hdl返回字符列表   对应于由其管理的频道或文件的未读部分   hdl,处于中间状态,半封闭。在这   state,hdl实际上是关闭的,但是项目是从hdl上读取的   需求并累积在hGetContents hdl返回的特殊列表中。