次のようなコードがあります。
retryOnTimeout :: IO a -> IO a
retryOnTimeout action = catch action $ \ResponseTimeout ->
do putStrLn "Timed out. Trying again."
threadDelay 5000000
action
問題は、HttpException のコンストラクターが他にもたくさんあることです。エラーが正確に何であるかに関係なく、通常は再試行を続けたいと思います。次に置き換えるResponseTimeout
と_
、例外のタイプを推測できないため、コンパイル エラーが発生します。
例外ハンドラにも型シグネチャを提供したくありません。
あまり重複していないことはわかってい_
ますが、「例外が ResponseTimeout の場合は x を実行し、例外がそれ以外の場合はまったく同じことを実行する」と言っているようなものなので、ケースを追加するのは間違っていると感じます。ワイルドカードを使用する簡潔な方法はありますが、それがどのタイプであるかをコンパイラに知らせますか?