@@ -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>
@@ -249,31 +244,29 @@ let inline traverseAsyncResultA'
249244 async {
250245 match ! state with
251246 | Error failuresToDate ->
252- let mutable errs = ArrayCollector()
253- errs.AddMany failuresToDate
247+ let errs = ResizeArray failuresToDate
254248
255249 for x in xs do
256250 match ! f x with
257251 | Ok _ -> () // as the initial state was failure, oks are irrelevant
258252 | Error e -> errs.Add e
259253
260- return Error( errs.Close ())
254+ return Error( errs.ToArray ())
261255 | Ok initialSuccesses ->
262256
263- let mutable oks = ArrayCollector()
264- oks.AddMany initialSuccesses
265- let mutable ok = true
266- let mutable errs = ArrayCollector()
257+ let oks = ResizeArray initialSuccesses
258+ let errs = ResizeArray()
267259
268260 for x in xs do
269261 match ! f x with
270- | Ok r when ok -> oks.Add r
262+ | Ok r when errs.Count = 0 -> oks.Add r
271263 | Ok _ -> () // no point saving results we won't use given the end result will be Error
272- | Error e ->
273- errs.Add e
274- ok <- false
264+ | Error e -> errs.Add e
275265
276- return if ok then Ok( oks.Close()) else Error( errs.Close())
266+ if errs.Count = 0 then
267+ return Ok( oks.ToArray())
268+ else
269+ return Error( errs.ToArray())
277270 }
278271
279272/// <summary>
@@ -379,8 +372,7 @@ let inline traverseOptionM'
379372 match state with
380373 | None -> None
381374 | Some initialValues ->
382- let mutable values = ArrayCollector()
383- values.AddMany initialValues
375+ let values = ResizeArray initialValues
384376 let mutable ok = true
385377 use enumerator = xs.GetEnumerator()
386378
@@ -390,7 +382,7 @@ let inline traverseOptionM'
390382 | Some value -> values.Add value
391383 | None -> ok <- false
392384
393- if ok then Some( values.Close ()) else None
385+ if ok then Some( values.ToArray ()) else None
394386
395387/// <summary>
396388/// Applies a function to each element of a sequence and returns a single option
@@ -428,8 +420,7 @@ let inline traverseAsyncOptionM'
428420 match ! state with
429421 | None -> return None
430422 | Some initialValues ->
431- let mutable values = ArrayCollector()
432- values.AddMany initialValues
423+ let values = ResizeArray initialValues
433424 let mutable ok = true
434425 use enumerator = xs.GetEnumerator()
435426
@@ -439,7 +430,7 @@ let inline traverseAsyncOptionM'
439430 | Some value -> values.Add value
440431 | None -> ok <- false
441432
442- return if ok then Some( values.Close ()) else None
433+ return if ok then Some( values.ToArray ()) else None
443434 }
444435
445436/// <summary>
0 commit comments