我在 GHCI 中收到此错误:
*** Exception: <stdin>: hGetLine: illegal operation (handle is semi-closed)
运行此代码后:
main = do
interact $ unlines . fmap proccess . take x . lines
readLn :: IO Int
我很确定原因是take x
。有没有更好的阅读方式only使用交互输入 x 行or is interact
只是一个独奏玩家?
你想要做的事情是不可能的interact
。幕后花絮interact
声称全部stdin
为自己与hGetContents http://hackage.haskell.org/package/base-4.9.0.0/docs/System-IO.html#v:hGetContents。这会将句柄置于“半关闭”状态,阻止您除了关闭句柄之外尝试与句柄进行任何进一步的交互,因为它的全部输入已经被消耗(惰性地)。
尝试使用以下命令读取有限行数:
import Control.Monad (replicateM)
getLines :: Int -> IO [String]
getLines n = replicateM n getLine
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)