我正在 Tasty 中为 GitHub 的自动评分器对以下 Haskell 函数进行单元测试:
countLetters :: IO [Int]
countLetters = do
putStr "First entry: "
x <- getLine
putStr "Second entry: "
y <- getLine
putStr "Third entry: "
z <- getLine
return [length x, length y, length z]
使用以下自动评分代码:
testCase "test_countLetters" $ do
h <- openFile "/dev/null" ReadMode
hDuplicateTo h stdin
hPutStrLn stdin "Haskell Is Fun"
result <- countLetters
hClose h
assertEqual "Count Letters" [7,2,3] result
我将该文件添加到“autograding.json”文件中,现在收到以下错误:
Exception: <stdin>: hPutStr: illegal operation (handle is not open for writing)
根据我(新手)的理解,关闭句柄意味着文件无法接受输入或输出,因此会出错。我将“ReadMode”切换为“WriteMode”,这也给出了一个错误,由于未打开句柄进行读取,因此无法调用 hGetLine。
您正在尝试写入
stdin
,这是一个输入流,因此您无法写入它。