From 1970fea586efd24adf22f0d5e4a486dd5e8a6399 Mon Sep 17 00:00:00 2001 From: Gustavo Leon <1261319+gusty@users.noreply.github.com> Date: Wed, 8 Nov 2023 12:04:01 +0100 Subject: [PATCH] + Result.Sequence (#562) --- src/FSharpPlus/Extensions/Extensions.fs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/FSharpPlus/Extensions/Extensions.fs b/src/FSharpPlus/Extensions/Extensions.fs index 88b6ca7b8..7f6ab1ba7 100644 --- a/src/FSharpPlus/Extensions/Extensions.fs +++ b/src/FSharpPlus/Extensions/Extensions.fs @@ -135,6 +135,7 @@ module Extensions = | Some v -> yield v | None -> ok <- false }) if ok then Some (Array.toSeq res) else None + type ValueOption<'t> with /// Returns None if it contains a None element, otherwise a list of all elements @@ -146,4 +147,19 @@ module Extensions = match e.Current with | ValueSome v -> yield v | ValueNone -> ok <- false }) - if ok then ValueSome (Array.toSeq res) else ValueNone \ No newline at end of file + if ok then ValueSome (Array.toSeq res) else ValueNone + + type Result<'t, 'error> with + + /// Returns the first Error if it contains an Error element, otherwise a list of all elements + static member Sequence (t: seq>) = + let mutable bad = None + let res = Seq.toArray (seq { + use e = t.GetEnumerator () + while e.MoveNext () && bad.IsNone do + match e.Current with + | Ok v -> yield v + | Error x -> bad <- Some x }) + match bad with + | None-> Ok (Array.toSeq res) + | Some x -> Error x