2012-12-15 74 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

感謝您的鏈接。但是,這並不能解釋爲什麼這發生在我的原始代碼中;我編輯了我的帖子來包含它。 –

相關問題