バグではないと思いますが、なぜうまくいかないのか少し不思議です。おまけの質問は、なぜ変数 e に言及しているのかということです。変数 e はありません。
前奏曲> :m +Control.Exception プレリュード Control.Exception> handle (\_-> return "err") undefined <インタラクティブ>:1:0: 制約内のあいまいな型変数「e」: 「例外 e」 <interactive>:1:0-35 での「ハンドル」の使用に起因する 考えられる修正: これらの型変数を修正する型シグネチャを追加します。 Prelude Control.Exception>
どうやら ghci 6.8 で問題なく動作するようです。私は 6.10.1 を使用しています。
編集:コードを最小化しました。6.8と6.10の両方で同じ結果になると思います
class C a
foo :: C a => (a -> Int)-> Int
foo _ = 1
arg :: C a => a -> Int
arg _ = 2
bar :: Int
bar = foo arg
それをコンパイルしようとしています:
[1/1] Main のコンパイル ( /tmp/foo.hs、解釈済み ) /tmp/foo.hs:12:10: 制約内のあいまいな型変数「a」: /tmp/foo.hs:12:10-12 での「arg」の使用による「C a」 考えられる修正: これらの型変数を修正する型シグネチャを追加します。 失敗しました。モジュールがロードされました: なし。 Prelude Control.Exception>