我在GHCI中收到此错误:
*** Exception: <stdin>: hGetLine: illegal operation (handle is semi-closed)
运行此代码后:
main = do
interact $ unlines . fmap proccess . take x . lines
readLn :: IO Int
Run Code Online (Sandbox Code Playgroud)
而且我很确定原因是什么take x.有没有更好的方式来读取仅使用交流输入的X线或者是interact只是一个单独的播放器?
你不想做什么interact.幕后制作interact完全stdin为自己辩护hGetContents.这会使句柄处于"半封闭"状态,从而阻止您在关闭它之后尝试与句柄进行任何进一步的交互,因为它的整个输入已被消耗(懒惰).
尝试阅读有限数量的行 -
import Control.Monad (replicateM)
getLines :: Int -> IO [String]
getLines n = replicateM n getLine
Run Code Online (Sandbox Code Playgroud)