diff --git a/src/FSharpPlus/Control/Traversable.fs b/src/FSharpPlus/Control/Traversable.fs index 570ebd082..b53ecad88 100644 --- a/src/FSharpPlus/Control/Traversable.fs +++ b/src/FSharpPlus/Control/Traversable.fs @@ -33,56 +33,49 @@ type Traverse = inherit Default1 static member inline InvokeOnInstance f (t: ^a) = (^a : (static member Traverse : _ * _ -> 'R) t, f) - static member inline Traverse (t: '``Traversable<'T>``, f: 'T -> '``Functor<'U>``, []_output: '``Functor<'Traversable<'U>>``, []_impl: Default4) = + static member inline Traverse (t: '``Traversable<'T>``, f: 'T -> '``Functor<'U>``, []_output: '``Functor<'Traversable<'U>>``, []_impl: Default5) = #if TEST_TRACE Traces.add "Traverse 'Traversable, 'T -> Functor<'U>" #endif let mapped = Map.Invoke f t : '``Traversable<'Functor<'U>>`` (^``Traversable<'T>`` : (static member Sequence : _ -> _) mapped) : '``Functor<'Traversable<'U>>`` - static member inline Traverse (t: Id<_>, f, []_output: 'R, []_impl: Default3) = + static member inline Traverse (t: Id<_>, f, []_output: 'R, []_impl: Default4) = #if TEST_TRACE Traces.add "Traverse Id" #endif Map.Invoke Id.create (f (Id.run t)) - static member inline Traverse (t: _ seq, f, []_output: 'R, []_impl: Default3) = + static member inline Traverse (t: _ seq, f, []_output: 'R, []_impl: Default4) = #if TEST_TRACE Traces.add "Traverse seq" #endif let cons_f x ys = Map.Invoke (Seq.cons: 'a -> seq<_> -> seq<_>) (f x) <*> ys Seq.foldBack cons_f t (result Seq.empty) - static member inline Traverse (t: _ NonEmptySeq, f, []_output: 'R, []_impl: Default3) = + static member inline Traverse (t: _ NonEmptySeq, f, []_output: 'R, []_impl: Default4) = #if TEST_TRACE Traces.add "Traverse NonEmptySeq" #endif let cons_f x ys = Map.Invoke (Seq.cons: 'a -> seq<_> -> seq<_>) (f x) <*> ys Map.Invoke NonEmptySeq.ofSeq (Seq.foldBack cons_f t (result Seq.empty)) - static member inline Traverse (t: seq<'T>, f: 'T -> '``Functor<'U>``, []_output: '``Functor>``, []_impl: Default2) = + static member inline Traverse (t: seq<'T>, f: 'T -> '``Functor<'U>``, []_output: '``Functor>``, []_impl: Default3) = #if TEST_TRACE Traces.add "Traverse seq, 'T -> Functor<'U>" #endif let mapped = Seq.map f t Sequence.ForInfiniteSequences (mapped, IsLeftZero.Invoke, List.toSeq, Return.Invoke) : '``Functor>`` - static member inline Traverse (t: NonEmptySeq<'T>, f: 'T -> '``Functor<'U>``, []_output: '``Functor>``, []_impl: Default2) = + static member inline Traverse (t: NonEmptySeq<'T>, f: 'T -> '``Functor<'U>``, []_output: '``Functor>``, []_impl: Default3) = #if TEST_TRACE Traces.add "Traverse NonEmptySeq, 'T -> Functor<'U>" #endif let mapped = NonEmptySeq.map f t Sequence.ForInfiniteSequences (mapped, IsLeftZero.Invoke, NonEmptySeq.ofList, Return.Invoke) : '``Functor>`` - static member inline Traverse (t: ^a, f, []_output: 'R, []_impl: Default1) : 'R = - #if TEST_TRACE - Traces.add "Traverse ^a" - #endif - Traverse.InvokeOnInstance f t - static member inline Traverse (_: ^a when ^a : null and ^a :struct, _, _: 'R, _impl: Default1) = id - #if !FABLE_COMPILER - static member Traverse (t: 't seq, f: 't -> Async<'u>, []_output: Async>, []_impl: Traverse) : Async> = async { + static member Traverse (t: 't seq, f: 't -> Async<'u>, []_output: Async>, []_impl: Default2) : Async> = async { #if TEST_TRACE Traces.add "Traverse 't seq, 't -> Async<'u>" #endif @@ -94,6 +87,14 @@ type Traverse = yield Async.AsTask(f enum.Current, cancellationToken = ct).Result }} #endif + static member inline Traverse (t: ^a, f, []_output: 'R, []_impl: Default1) : 'R = + #if TEST_TRACE + Traces.add "Traverse ^a" + #endif + Traverse.InvokeOnInstance f t + + static member inline Traverse (_: ^a when ^a : null and ^a :struct, _, _: 'R, _impl: Default1) = id + #if !FABLE_COMPILER static member Traverse (t: 't NonEmptySeq, f: 't -> Async<'u>, []_output: Async>, []_impl: Traverse) : Async> = async { #if TEST_TRACE @@ -484,4 +485,4 @@ type Transpose with let inline call (a: 'a, b: 'b) = call_3 (a, b, Unchecked.defaultof<'R>) : 'R call (Unchecked.defaultof, t) -#endif \ No newline at end of file +#endif