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

use*_*847 2 io haskell lazy-evaluation

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

readHandle <- openFile fileName ReadMode
hSetBuffering readHandle $ BlockBuffering (Just 2048)
fileText <- hGetContents readHandle
hFlush readHandle
hClose readHandle
Run Code Online (Sandbox Code Playgroud)

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

有人可以帮我理解发生了什么

Tho*_*son 6

你的期望是错误的.通常,除了显式关闭句柄之外,在hGetContents调用之后你不应该使用句柄.从黑线鳕:

计算hGetContents hdl返回对应于由hdl管理的通道或文件的未读部分的字符列表,其被置于中间状态,半封闭.在这种状态下,hdl实际上是关闭的,但是项目是根据需要从hdl读取并累积在返回的特殊列表中hGetContents hdl.