1

考虑以下:

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 进行调查时,出于不同的原因,我收到了同样的异常。

4

1 回答 1

3

这是因为 GHCi 的扩展默认规则。如果您将相同的代码放入没有签名的文件中,您应该会看到预期的错误。

(在这种情况下,它可能()被选为类型,这就是您收到解析错误的原因。)

于 2012-12-15T21:53:56.623 回答