Skip to content

Commit 27b32f4

Browse files
committed
Fix traversals
1 parent 165a4d1 commit 27b32f4

File tree

3 files changed

+20
-27
lines changed

3 files changed

+20
-27
lines changed

src/FSharpPlus/Control/Traversable.fs

Lines changed: 17 additions & 17 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

src/FSharpPlus/Data/NonEmptySeq.fs

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

9292
#if !FABLE_COMPILER
9393

94-
static member inline Traverse (t: _ seq, f) =
95-
#if TEST_TRACE
96-
Traces.add "Traverse NonEmptySeq: Seq, 'T -> Functor<'U>"
97-
#endif
98-
let cons_f x ys = Map.Invoke (Seq.cons: 'a -> seq<_> -> seq<_>) (f x) <*> ys
99-
Map.Invoke NonEmptySeq<_>.unsafeOfSeq (Seq.foldBack cons_f t (result Seq.empty))
100-
101-
static member inline Traverse (t: NonEmptySeq<'T>, f: 'T -> '``Functor<'U>``) =
94+
static member inline Traverse (t: NonEmptySeq<'T>, f: 'T -> '``Functor<'U>``, [<Optional>]_output: '``Functor<NonEmptySeq<'U>>``, [<Optional>]_impl: Default2) : '``Functor<NonEmptySeq<'U>>`` =
10295
#if TEST_TRACE
10396
Traces.add "Traverse NonEmptySeq: NonEmptySeq, 'T -> Functor<'U>"
10497
#endif
10598
let mapped = NonEmptySeq<_>.map f t
106-
Sequence.ForInfiniteSequences (mapped, IsLeftZero.Invoke, NonEmptySeq<_>.ofList, Return.Invoke) : '``Functor<NonEmptySeq<'U>>``
99+
Sequence.ForInfiniteSequences (mapped, IsLeftZero.Invoke, NonEmptySeq<_>.ofList, Return.Invoke)
107100

108101
static member Traverse (t: 'T NonEmptySeq, f: 'T -> Async<'U>) : Async<NonEmptySeq<_>> =
109102
#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)