考虑以下:
do putStr ""
return $ map read ["2"]
在 GHCI 中运行,这给出了
[*** Exception: Prelude.read: no parse
我预计会出现“模棱两可的类型变量”编译错误,但这会在运行时出现。为什么?
为了比较,以下三个示例确实给出了“模糊类型变量”错误:
map read ["2"]
do putStr ""
return $ read "2"
do [1]
return $ map read ["2"]
顺便说一句,这是我遇到的原始代码。
readInts :: String -> IO [Integer]
readInts f = do s <- readFile f
return $ map read $ splitOneOf " \n" s
这已解决。我的原始代码试图从列表末尾的“”中读取。当我在 GHCI 进行调查时,出于不同的原因,我收到了同样的异常。