Skip to content

Commit ba1d4ff

Browse files
committed
Fix traversals
1 parent 917b669 commit ba1d4ff

File tree

3 files changed

+29
-36
lines changed

3 files changed

+29
-36
lines changed

src/FSharpPlus/Control/Traversable.fs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -32,52 +32,52 @@ type Traverse =
3232
inherit Default1
3333
static member inline InvokeOnInstance f (t: ^a) = (^a : (static member Traverse : _ * _ -> 'R) t, f)
3434

35-
static member inline Traverse (t: '``Traversable<'T>``, f: 'T -> '``Functor<'U>``, [<Optional>]_output: '``Functor<'Traversable<'U>>``, [<Optional>]_impl: Default4) =
35+
static member inline Traverse (t: '``Traversable<'T>``, f: 'T -> '``Functor<'U>``, [<Optional>]_output: '``Functor<'Traversable<'U>>``, [<Optional>]_impl: Default5) =
3636
#if TEST_TRACE
3737
Traces.add "Traverse 'Traversable, 'T -> Functor<'U>"
3838
#endif
3939
let mapped = Map.Invoke f t : '``Traversable<'Functor<'U>>``
4040
(^``Traversable<'T>`` : (static member Sequence : _ -> _) mapped) : '``Functor<'Traversable<'U>>``
4141

42-
static member inline Traverse (t: Id<_>, f, [<Optional>]_output: 'R, [<Optional>]_impl: Default3) =
42+
static member inline Traverse (t: Id<_>, f, [<Optional>]_output: 'R, [<Optional>]_impl: Default4) =
4343
#if TEST_TRACE
4444
Traces.add "Traverse Id"
4545
#endif
4646
Map.Invoke Id.create (f (Id.run t))
4747

48-
static member inline Traverse (t: _ seq, f, [<Optional>]_output: 'R, [<Optional>]_impl: Default3) =
48+
static member inline Traverse (t: _ seq, f, [<Optional>]_output: 'R, [<Optional>]_impl: Default4) =
4949
#if TEST_TRACE
5050
Traces.add "Traverse seq"
5151
#endif
5252
let cons_f x ys = Map.Invoke (Seq.cons: 'a -> seq<_> -> seq<_>) (f x) <*> ys
5353
Seq.foldBack cons_f t (result Seq.empty)
5454

55-
static member inline Traverse (t: seq<'T>, f: 'T -> '``Functor<'U>``, [<Optional>]_output: '``Functor<seq<'U>>``, [<Optional>]_impl: Default2) =
55+
static member inline Traverse (t: seq<'T>, f: 'T -> '``Functor<'U>``, [<Optional>]_output: '``Functor<seq<'U>>``, [<Optional>]_impl: Default3) =
5656
#if TEST_TRACE
5757
Traces.add "Traverse seq, 'T -> Functor<'U>"
5858
#endif
5959
let mapped = Seq.map f t
6060
Sequence.ForInfiniteSequences (mapped, IsLeftZero.Invoke, List.toSeq, Return.Invoke) : '``Functor<seq<'U>>``
6161

62+
#if !FABLE_COMPILER
63+
static member Traverse (t: 't seq, f: 't -> Async<'u>, [<Optional>]_output: Async<seq<'u>>, [<Optional>]_impl: Default2) : Async<seq<_>> =
64+
#if TEST_TRACE
65+
Traces.add "Traverse 't seq, 't -> Async<'u>"
66+
#endif
67+
async {
68+
let! ct = Async.CancellationToken
69+
return seq {
70+
use enum = t.GetEnumerator ()
71+
while enum.MoveNext() do
72+
yield Async.AsTask(f enum.Current, cancellationToken = ct).Result }}
73+
#endif
74+
6275
static member inline Traverse (t: ^a, f, [<Optional>]_output: 'R, [<Optional>]_impl: Default1) : 'R =
6376
#if TEST_TRACE
6477
Traces.add "Traverse ^a"
6578
#endif
6679
Traverse.InvokeOnInstance f t
6780
static member inline Traverse (_: ^a when ^a : null and ^a :struct, _, _: 'R, _impl: Default1) = id
68-
69-
#if !FABLE_COMPILER
70-
static member Traverse (t: 't seq, f: 't -> Async<'u>, [<Optional>]_output: Async<seq<'u>>, [<Optional>]_impl: Traverse) : Async<seq<_>> = async {
71-
#if TEST_TRACE
72-
Traces.add "Traverse 't seq, 't -> Async<'u>"
73-
#endif
74-
75-
let! ct = Async.CancellationToken
76-
return seq {
77-
use enum = t.GetEnumerator ()
78-
while enum.MoveNext() do
79-
yield Async.AsTask(f enum.Current, cancellationToken = ct).Result }}
80-
#endif
8181

8282
static member Traverse (t: Id<'t>, f: 't -> option<'u>, [<Optional>]_output: option<Id<'u>>, [<Optional>]_impl: Traverse) =
8383
#if TEST_TRACE
@@ -256,17 +256,10 @@ type Gather =
256256
let cons_f x ys = Map.Invoke (cons: 'a -> seq<_> -> seq<_>) (f x) <.> ys
257257
Seq.foldBack cons_f t (Pure.Invoke Seq.empty)
258258

259-
260259

261-
static member inline Gather (t: ^a, f, [<Optional>]_output: 'R, [<Optional>]_impl: Default1) : 'R =
262-
#if TEST_TRACE
263-
Traces.add "Gather ^a"
264-
#endif
265-
Gather.InvokeOnInstance f t
266-
static member inline Gather (_: ^a when ^a : null and ^a :struct, _, _: 'R, _impl: Default1) = id
267260

268261
#if !FABLE_COMPILER
269-
static member Gather (t: 't seq, f: 't -> Async<'u>, [<Optional>]_output: Async<seq<'u>>, [<Optional>]_impl: Gather) : Async<seq<_>> =
262+
static member Gather (t: 't seq, f: 't -> Async<'u>, [<Optional>]_output: Async<seq<'u>>, [<Optional>]_impl: Default2) : Async<seq<_>> =
270263
#if TEST_TRACE
271264
Traces.add "Gather 't seq, 't -> Async<'u>"
272265
#endif
@@ -277,6 +270,13 @@ type Gather =
277270
while enum.MoveNext() do
278271
yield Async.AsTask(f enum.Current, cancellationToken = ct).Result } }
279272
#endif
273+
274+
static member inline Gather (t: ^a, f, [<Optional>]_output: 'R, [<Optional>]_impl: Default1) : 'R =
275+
#if TEST_TRACE
276+
Traces.add "Gather ^a"
277+
#endif
278+
Gather.InvokeOnInstance f t
279+
static member inline Gather (_: ^a when ^a : null and ^a :struct, _, _: 'R, _impl: Default1) = id
280280

281281

282282
static member Gather (t: Id<'t>, f: 't -> option<'u>, [<Optional>]_output: option<Id<'u>>, [<Optional>]_impl: Gather) =
@@ -406,4 +406,4 @@ type Transpose with
406406
let inline call (a: 'a, b: 'b) = call_3 (a, b, Unchecked.defaultof<'R>) : 'R
407407
call (Unchecked.defaultof<Transpose>, t)
408408

409-
#endif
409+
#endif

src/FSharpPlus/Data/NonEmptySeq.fs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,19 +95,12 @@ type NonEmptySeq<'t> =
9595

9696
#if !FABLE_COMPILER
9797

98-
static member inline Traverse (t: _ seq, f) =
99-
#if TEST_TRACE
100-
Traces.add "Traverse NonEmptySeq: Seq, 'T -> Functor<'U>"
101-
#endif
102-
let cons_f x ys = Map.Invoke (Seq.cons: 'a -> seq<_> -> seq<_>) (f x) <*> ys
103-
Map.Invoke NonEmptySeq<_>.unsafeOfSeq (Seq.foldBack cons_f t (result Seq.empty))
104-
105-
static member inline Traverse (t: NonEmptySeq<'T>, f: 'T -> '``Functor<'U>``) =
98+
static member inline Traverse (t: NonEmptySeq<'T>, f: 'T -> '``Functor<'U>``, [<Optional>]_output: '``Functor<NonEmptySeq<'U>>``, [<Optional>]_impl: Default2) : '``Functor<NonEmptySeq<'U>>`` =
10699
#if TEST_TRACE
107100
Traces.add "Traverse NonEmptySeq: NonEmptySeq, 'T -> Functor<'U>"
108101
#endif
109102
let mapped = NonEmptySeq<_>.map f t
110-
Sequence.ForInfiniteSequences (mapped, IsLeftZero.Invoke, NonEmptySeq<_>.ofList, Return.Invoke) : '``Functor<NonEmptySeq<'U>>``
103+
Sequence.ForInfiniteSequences (mapped, IsLeftZero.Invoke, NonEmptySeq<_>.ofList, Return.Invoke)
111104

112105
static member Traverse (t: 'T NonEmptySeq, f: 'T -> Async<'U>) : Async<NonEmptySeq<_>> =
113106
#if TEST_TRACE

tests/FSharpPlus.Tests/Traversals.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ module Traversable =
291291
Assert.AreEqual(None, r3)
292292
Assert.IsInstanceOf<Option<NonEmptySeq<int> option>> (Some r3)
293293
#if TEST_TRACE
294-
CollectionAssert.AreEqual (["Traverse ^a"; "Traverse NonEmptySeq: NonEmptySeq, 'T -> Functor<'U>"], Traces.get())
294+
CollectionAssert.AreEqual (["Traverse NonEmptySeq: NonEmptySeq, 'T -> Functor<'U>"], Traces.get())
295295
#endif
296296

297297
#if TEST_TRACE

0 commit comments

Comments
 (0)