@@ -6,35 +6,35 @@ module List =
66 let rec private traverseResultM ' ( state : Result < _ , _ >) ( f : _ -> Result < _ , _ >) xs =
77 match xs with
88 | [] -> state
9- | x :: xs ->
9+ | x :: xs ->
1010 let r = result {
1111 let! y = f x
1212 let! ys = state
1313 return ys @ [ y]
14- }
14+ }
1515 match r with
1616 | Ok _ -> traverseResultM' r f xs
1717 | Error _ -> r
1818
1919 let rec private traverseAsyncResultM ' ( state : Async < Result < _ , _ >>) ( f : _ -> Async < Result < _ , _ >>) xs =
2020 match xs with
2121 | [] -> state
22- | x :: xs ->
22+ | x :: xs ->
2323 async {
2424 let! r = asyncResult {
2525 let! ys = state
2626 let! y = f x
2727 return ys @ [ y]
28- }
28+ }
2929 match r with
30- | Ok _ ->
30+ | Ok _ ->
3131 return ! traverseAsyncResultM' ( Async.singleton r) f xs
3232 | Error _ -> return r
3333 }
3434
3535 let traverseResultM f xs =
3636 traverseResultM' ( Ok []) f xs
37-
37+
3838 let sequenceResultM xs =
3939 traverseResultM id xs
4040
@@ -43,20 +43,20 @@ module List =
4343
4444 let sequenceAsyncResultM xs =
4545 traverseAsyncResultM id xs
46-
46+
4747
4848 let rec private traverseResultA ' state f xs =
4949 match xs with
5050 | [] -> state
5151 | x :: xs ->
52- let fR =
52+ let fR =
5353 f x |> Result.mapError List.singleton
5454 match state, fR with
55- | Ok ys, Ok y ->
55+ | Ok ys, Ok y ->
5656 traverseResultA' ( Ok ( ys @ [ y])) f xs
57- | Error errs, Error e ->
57+ | Error errs, Error e ->
5858 traverseResultA' ( Error ( errs @ e)) f xs
59- | Ok _, Error e | Error e , Ok _ ->
59+ | Ok _, Error e | Error e , Ok _ ->
6060 traverseResultA' ( Error e) f xs
6161
6262 let rec private traverseAsyncResultA ' state f xs =
@@ -67,11 +67,11 @@ module List =
6767 let! s = state
6868 let! fR = f x |> AsyncResult.mapError List.singleton
6969 match s, fR with
70- | Ok ys, Ok y ->
70+ | Ok ys, Ok y ->
7171 return ! traverseAsyncResultA' ( AsyncResult.retn ( ys @ [ y])) f xs
72- | Error errs, Error e ->
72+ | Error errs, Error e ->
7373 return ! traverseAsyncResultA' ( AsyncResult.returnError ( errs @ e)) f xs
74- | Ok _, Error e | Error e , Ok _ ->
74+ | Ok _, Error e | Error e , Ok _ ->
7575 return ! traverseAsyncResultA' ( AsyncResult.returnError e) f xs
7676 }
7777
@@ -82,16 +82,19 @@ module List =
8282 traverseResultA id xs
8383
8484 let rec traverseValidationA ' state f xs =
85- match xs with
86- | [] -> state
87- | x :: xs ->
85+ match state, xs with
86+ | Ok items, [] ->
87+ Ok ( List.rev items)
88+ | errors, [] ->
89+ errors
90+ | _, x :: xs ->
8891 let fR = f x
8992 match state, fR with
90- | Ok ys, Ok y ->
91- traverseValidationA' ( Ok ( ys @ [ y ] )) f xs
92- | Error errs1, Error errs2 ->
93+ | Ok ys, Ok y ->
94+ traverseValidationA' ( Ok ( y :: ys )) f xs
95+ | Error errs1, Error errs2 ->
9396 traverseValidationA' ( Error ( errs2 @ errs1)) f xs
94- | Ok _, Error errs | Error errs, Ok _ ->
97+ | Ok _, Error errs | Error errs, Ok _ ->
9598 traverseValidationA' ( Error errs) f xs
9699
97100 let traverseValidationA f xs =
0 commit comments