古いコードを から に変更Prelude.catch
したControl.Exception.catch
ところ、あいまいな型エラーが発生しました。「大したことない」と思いました。しかし、よく調べてみると、なぜこれがそのまま機能しないのか正確にはわかりません...
handler :: Exception e => e -> IO x
with_handler :: IO x -> IO x
with_handler act = catch act handler
このコードは機能するはずですが、型システムの主格規則に明らかに違反しているように見えます。(私は何を確信していません。)
タイプチェッカーが不満に思っていることを誰かが正確に説明できますか?