例外がスローされた場合に操作を再試行できる計算式を F# で記述できるようにしたいと考えています。現在、私のコードは次のようになっています。
let x = retry (fun() -> GetResourceX())
let y = retry (fun() -> GetResourceY())
let z = retry (fun() -> DoThis(x, y))
etc. (this is obviously an astract representation of the actual code)
各関数を設定した回数だけ再試行できるようにする必要があります。これは別の場所で定義しています。
ここで計算式が役立つと考えていましたが、各右辺を Retryable<'T> に明示的にラップすることを削除するのにどのように役立つかわかりません
計算式は次のようになります。
let! x = Retryable( fun() -> GetResourceX())
etc.
モナドは大雑把に言えばラッパー型であることは理解していますが、これを回避する方法を望んでいました。演算子をオーバーロードし、操作を Retryable<'T> に変換するための非常に簡潔な構文を使用できることはわかっていますが、それは繰り返し/ラッピングをより簡潔にするだけです。それはまだそこにあります。各関数を Retryable<'T> にラップすることもできますが、繰り返しになりますが、投稿の上部で行われたことを実行することに価値はありません (各操作で再試行を呼び出します。少なくとも非常に明示的です)。
計算式はここでは間違った抽象化かもしれませんが、よくわかりません。ここで何ができるかについてのアイデアはありますか?