私は、これらのルールに従ってResult<'T, 'E> list
シングルにしたいを持っています:Result<'T list, 'E>
- いずれか
Result
が のError
場合、結果はError
- 結果が の場合、リスト
Error
の最初にある必要がありますError
- すべての結果が である場合
OK
、結果は でOk
あり、リストの順序を維持する必要があります
だから私は行って、これを次のように実装しました:
let all xs =
let folder = fun state next ->
match (state, next) with
| (Result.Ok ys, Result.Ok y) -> ys |> List.append [ y ] |> Result.Ok
| (Result.Error e, _) -> Result.Error e
| (_, Result.Error e) -> Result.Error e
Seq.fold folder (Result.Ok []) xs
ただし、これは標準ライブラリに既に実装されている可能性があるもののようです。ありますか?
Result
次に、次のような計算式があります。
type ResultBuilder () =
member this.Bind(x, f) =
match x with
| Result.Ok o -> f o
| Result.Error e -> Result.Error e
member this.Return(value) = Result.Ok value
member this.ReturnFrom(value) = value
let result = new ResultBuilder()
all
内部で使用できますresult { ... }
が、さらに統合することは可能ですか? たとえば、ResultBuilder.For
?