1

次のことを考慮してください。

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

GHCIで実行すると、

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

「あいまいな型変数」のコンパイルエラーが予想されましたが、代わりに実行時に発生します。なんで?

比較のために、次の3つの例では「あいまいな型変数」エラーが発生します。

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 に答える