2012-12-15 55 views
1

考虑以下几点:在GHCI为什么underconstrained类型有时会给运行时错误?

do putStr "" 
    return $ map read ["2"] 

运行,这给

[*** Exception: Prelude.read: no parse 

我期待一个 “ambigious类型变量” 编译错误,而是这在运行时出现。为什么?

为了便于比较,以下三个例子做给“暧昧类型变量”错误:

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中进行调查时,我因不同的原因收到了相同的例外情况。

+0

Windows行结尾? ('\ r \ n') – 2012-12-15 23:47:38

回答

3

这是因为GHCi的extended default rules。如果您将相同的代码放在没有签名的文件中,则应该看到您预期的错误。

(在这种情况下,它可能是捡()的类型,这就是为什么你会得到一个解析错误。)

+1

感谢您的链接。但是,这并不能解释为什么这发生在我的原始代码中;我编辑了我的帖子来包含它。 –

相关问题