Skip to content

Commit

Permalink
Seq.sequenceResultM returns seq
Browse files Browse the repository at this point in the history
  • Loading branch information
TheAngryByrd committed Dec 1, 2021
1 parent 8bdc9b7 commit 425a337
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/FsToolkit.ErrorHandling/Seq.fs
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ namespace FsToolkit.ErrorHandling
[<RequireQualifiedAccess>]
module Seq =

let sequenceResultM (xs: seq<Result<'t, 'e>>) : Result<'t list, 'e> =
let sequenceResultM (xs: seq<Result<'t, 'e>>) : Result<'t seq, 'e> =
let rec loop xs ts =
match Seq.tryHead xs with
| Some x ->
x
|> Result.bind (fun t -> loop (Seq.tail xs) (t :: ts))
| None -> Ok(List.rev ts)
| None -> Ok(List.rev ts |> List.toSeq)

// Seq.cache prevents double evaluation in Seq.tail
loop (Seq.cache xs) []
2 changes: 2 additions & 0 deletions tests/FsToolkit.ErrorHandling.Tests/Seq.fs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ let sequenceResultMTests =

let actual =
Seq.sequenceResultM (Seq.map Tweet.TryCreate tweets)
|> Result.map Seq.toList

Expect.equal actual expected "Should have an empty list of valid tweets"

Expand All @@ -34,6 +35,7 @@ let sequenceResultMTests =

let actual =
Seq.sequenceResultM (Seq.map Tweet.TryCreate tweets)
|> Result.map Seq.toList

Expect.equal actual expected "Should have a list of valid tweets"

Expand Down

0 comments on commit 425a337

Please sign in to comment.