Skip to content

Commit fdda2a7

Browse files
committed
Reuse cons
1 parent 1f020f4 commit fdda2a7

File tree

2 files changed

+9
-15
lines changed

2 files changed

+9
-15
lines changed

src/FSharpPlus/Control/Traversable.fs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,14 @@ type Traverse =
5050
#if TEST_TRACE
5151
Traces.add "Traverse seq"
5252
#endif
53-
let cons x y = seq {yield x; yield! y}
54-
let cons_f x ys = Map.Invoke (cons: 'a -> seq<_> -> seq<_>) (f x) <*> ys
53+
let cons_f x ys = Map.Invoke (Seq.cons: 'a -> seq<_> -> seq<_>) (f x) <*> ys
5554
Seq.foldBack cons_f t (result Seq.empty)
5655

5756
static member inline Traverse (t: _ NonEmptySeq, f, [<Optional>]_output: 'R, [<Optional>]_impl: Default3) =
5857
#if TEST_TRACE
5958
Traces.add "Traverse NonEmptySeq"
6059
#endif
61-
let cons x y = seq {yield x; yield! y}
62-
let cons_f x ys = Map.Invoke (cons: 'a -> seq<_> -> seq<_>) (f x) <*> ys
60+
let cons_f x ys = Map.Invoke (Seq.cons: 'a -> seq<_> -> seq<_>) (f x) <*> ys
6361
Map.Invoke NonEmptySeq.ofSeq (Seq.foldBack cons_f t (result Seq.empty))
6462

6563
static member inline Traverse (t: seq<'T>, f: 'T -> '``Functor<'U>``, [<Optional>]_output: '``Functor<seq<'U>>``, [<Optional>]_impl: Default2) =
@@ -166,14 +164,13 @@ type Traverse =
166164
#if TEST_TRACE
167165
Traces.add "Traverse []"
168166
#endif
169-
let cons x y = Array.append [|x|] y
170167
let rec loop acc = function
171168
| [||] -> acc
172169
| xxs ->
173170
let x, xs = Array.head xxs, Array.tail xxs
174171
let v = f x
175-
loop (cons v acc) xs
176-
let cons_f x xs = Map.Invoke cons xs <*> x
172+
loop (Array.cons v acc) xs
173+
let cons_f x xs = Map.Invoke Array.cons xs <*> x
177174
Array.fold cons_f (result [||]) (loop [||] t)
178175

179176
static member inline Invoke (f: 'T -> '``Functor<'U>``) (t: '``Traversable<'T>``) : '``Functor<'Traversable<'U>>`` =
@@ -185,8 +182,7 @@ type Traverse =
185182
type Sequence with
186183

187184
static member inline Sequence (t: _ seq, [<Optional>]_output: 'R, [<Optional>]_impl: Default5) : 'R =
188-
let cons x y = seq { yield x; yield! y }
189-
let cons_f x ys = Map.Invoke (cons: 'a -> seq<_> -> seq<_>) x <*> ys
185+
let cons_f x ys = Map.Invoke (Seq.cons: 'a -> seq<_> -> seq<_>) x <*> ys
190186
Seq.foldBack cons_f t (result Seq.empty)
191187

192188
static member inline Sequence (t: seq<'``Applicative<'T>``>, [<Optional>]_output: '``Applicative<seq<'T>>`` , [<Optional>]_impl: Default4) : '``Applicative<seq<'T>>`` =
@@ -409,14 +405,13 @@ type Gather =
409405
#if TEST_TRACE
410406
Traces.add "Gather []"
411407
#endif
412-
let cons x y = Array.append [|x|] y
413408
let rec loop acc = function
414409
| [||] -> acc
415410
| xxs ->
416411
let x, xs = Array.head xxs, Array.tail xxs
417412
let v = f x
418-
loop (cons v acc) xs
419-
let cons_f x xs = Map.Invoke cons xs <.> x
413+
loop (Array.cons v acc) xs
414+
let cons_f x xs = Map.Invoke Array.cons xs <.> x
420415
Array.fold cons_f (Pure.Invoke [||]) (loop [||] t)
421416

422417
static member inline Invoke (f: 'T -> '``Functor<'U>``) (t: '``Traversable<'T>``) : '``Functor<'Traversable<'U>>`` =
@@ -428,8 +423,7 @@ type Gather =
428423
type Transpose with
429424

430425
static member inline Transpose (t: _ seq, [<Optional>]_output: 'R, [<Optional>]_impl: Default5) : 'R =
431-
let cons x y = seq { yield x; yield! y }
432-
let cons_f x ys = Map.Invoke (cons: 'a -> seq<_> -> seq<_>) x <.> ys
426+
let cons_f x ys = Map.Invoke (Seq.cons: 'a -> seq<_> -> seq<_>) x <.> ys
433427
Seq.foldBack cons_f t (Pure.Invoke Seq.empty)
434428

435429
static member inline Transpose (t: seq<'``Applicative<'T>``>, [<Optional>]_output: '``Applicative<seq<'T>>`` , [<Optional>]_impl: Default4) : '``Applicative<seq<'T>>`` =

src/FSharpPlus/Lens.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ module Lens =
186186
let foldlOf l f z = (flip Endo.run z << Dual.run) << foldMapOf l (Dual << Endo << flip f)
187187

188188
/// Extract a list of the targets of a Fold. See also (^..).
189-
let toListOf l = let cons x y = x :: y in foldrOf l cons []
189+
let toListOf l = foldrOf l List.cons []
190190

191191
/// Get the largest target of a Fold.
192192
let maximumOf l =

0 commit comments

Comments
 (0)