次のことを考慮してください。
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で調査したときに、別の理由で同じ例外を受け取りました。