@@ -26,8 +26,7 @@ let inline traverseResultM'
2626 | Error e -> Error e
2727 | Ok initialSuccesses ->
2828
29- let mutable oks = ArrayCollector()
30- oks.AddMany initialSuccesses
29+ let oks = ResizeArray( initialSuccesses)
3130 let mutable err = Unchecked.defaultof< 'error>
3231 let mutable ok = true
3332 use e = xs.GetEnumerator()
@@ -40,7 +39,7 @@ let inline traverseResultM'
4039 err <- e
4140 ok <- false
4241
43- if ok then Ok( oks.Close ()) else Error err
42+ if ok then Ok( oks.ToArray ()) else Error err
4443
4544/// <summary>
4645/// Applies a function to each element of a sequence and returns a single result
@@ -77,31 +76,29 @@ let inline traverseResultA'
7776
7877 match state with
7978 | Error failuresToDate ->
80- let mutable errs = ArrayCollector()
81- errs.AddMany failuresToDate
79+ let errs = ResizeArray failuresToDate
8280
8381 for x in xs do
8482 match f x with
8583 | Error e -> errs.Add e
8684 | Ok _ -> () // as the initial state was failure, oks are irrelevant
8785
88- Error( errs.Close ())
86+ Error( errs.ToArray ())
8987 | Ok initialSuccesses ->
9088
91- let mutable oks = ArrayCollector()
92- oks.AddMany initialSuccesses
93- let mutable errs = ArrayCollector()
94- let mutable ok = true
89+ let oks = ResizeArray initialSuccesses
90+ let errs = ResizeArray()
9591
9692 for x in xs do
9793 match f x with
98- | Ok r when ok -> oks.Add r
94+ | Ok r when errs.Count = 0 -> oks.Add r
9995 | Ok _ -> () // no point saving results we won't use given the end result will be Error
100- | Error e ->
101- errs.Add e
102- ok <- false
96+ | Error e -> errs.Add e
10397
104- if ok then Ok( oks.Close()) else Error( errs.Close())
98+ if errs.Count = 0 then
99+ Ok( oks.ToArray())
100+ else
101+ Error( errs.ToArray())
105102
106103/// <summary>
107104/// Applies a function to each element of a sequence and returns a single result
@@ -139,8 +136,7 @@ let inline traverseAsyncResultM'
139136 match ! state with
140137 | Error e -> return Error e
141138 | Ok initialSuccesses ->
142- let mutable oks = ArrayCollector()
143- oks.AddMany initialSuccesses
139+ let oks = ResizeArray initialSuccesses
144140 let mutable err = Unchecked.defaultof< 'error>
145141 let mutable ok = true
146142 use e = xs.GetEnumerator()
@@ -153,7 +149,7 @@ let inline traverseAsyncResultM'
153149 err <- e
154150 ok <- false
155151
156- return if ok then Ok( oks.Close ()) else Error err
152+ return if ok then Ok( oks.ToArray ()) else Error err
157153 }
158154
159155/// <summary>
@@ -194,8 +190,7 @@ let inline traverseTaskResultM'
194190 match ! state with
195191 | Error e -> return Error e
196192 | Ok initialSuccesses ->
197- let mutable oks = ArrayCollector()
198- oks.AddMany initialSuccesses
193+ let oks = ResizeArray initialSuccesses
199194 let mutable err = Unchecked.defaultof< 'error>
200195 let mutable ok = true
201196 use e = xs.GetEnumerator()
@@ -208,7 +203,7 @@ let inline traverseTaskResultM'
208203 err <- e
209204 ok <- false
210205
211- return if ok then Ok( oks.Close ()) else Error err
206+ return if ok then Ok( oks.ToArray ()) else Error err
212207 }
213208
214209/// <summary>
@@ -379,8 +374,7 @@ let inline traverseOptionM'
379374 match state with
380375 | None -> None
381376 | Some initialValues ->
382- let mutable values = ArrayCollector()
383- values.AddMany initialValues
377+ let values = ResizeArray initialValues
384378 let mutable ok = true
385379 use enumerator = xs.GetEnumerator()
386380
@@ -390,7 +384,7 @@ let inline traverseOptionM'
390384 | Some value -> values.Add value
391385 | None -> ok <- false
392386
393- if ok then Some( values.Close ()) else None
387+ if ok then Some( values.ToArray ()) else None
394388
395389/// <summary>
396390/// Applies a function to each element of a sequence and returns a single option
@@ -428,8 +422,7 @@ let inline traverseAsyncOptionM'
428422 match ! state with
429423 | None -> return None
430424 | Some initialValues ->
431- let mutable values = ArrayCollector()
432- values.AddMany initialValues
425+ let values = ResizeArray initialValues
433426 let mutable ok = true
434427 use enumerator = xs.GetEnumerator()
435428
@@ -439,7 +432,7 @@ let inline traverseAsyncOptionM'
439432 | Some value -> values.Add value
440433 | None -> ok <- false
441434
442- return if ok then Some( values.Close ()) else None
435+ return if ok then Some( values.ToArray ()) else None
443436 }
444437
445438/// <summary>
0 commit comments