Skip to content

Commit 46378d6

Browse files
committed
Add VOption to Fold
1 parent 74d596f commit 46378d6

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

src/FSharpPlus/Control/Foldable.fs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,15 @@ type Fold =
158158

159159
static member inline FromFoldMap f z t = let (f: _Dual<_Endo<'t>>) = FoldMap.Invoke (_Dual << _Endo << flip f) t in f.Value.Value z
160160

161-
static member inline Fold (x , f, z, [<Optional>]_impl: Default2) = Seq.fold f z (ToSeq.Invoke x)
161+
static member inline Fold (x , f, z, [<Optional>]_impl: Default2) =
162+
#if TEST_TRACE
163+
Traces.add "Fold Default"
164+
#endif
165+
Seq.fold f z (ToSeq.Invoke x)
166+
162167
static member inline Fold (x: 'F , f: 'b->'a->'b, z: 'b, [<Optional>]_impl: Default1) = (^F : (static member Fold : ^F -> _ -> _-> ^b) x, f, z)
163168
static member Fold (x: option<_>, f, z , [<Optional>]_impl: Fold ) = match x with Some x -> f z x | _ -> z
169+
static member Fold (x: voption<_>, f, z , [<Optional>]_impl: Fold ) = match x with ValueSome x -> f z x | _ -> z
164170
static member Fold (x: Id<_> , f, z , [<Optional>]_impl: Fold ) = f z x.getValue
165171
static member Fold (x: seq<_> , f, z , [<Optional>]_impl: Fold ) = Seq.fold f z x
166172
static member Fold (x: list<_> , f, z , [<Optional>]_impl: Fold ) = List.fold f z x

tests/FSharpPlus.Tests/Folds.fs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ module Folds =
2626
let r1 = set [1..3] |> fold (+) 0
2727
let r2 = set [1..3] |> toSeq
2828
let r3 = ValueSome 1 |> toSeq
29+
let r4 = ValueSome 1 |> fold (+) 0
2930
Assert.AreEqual (6, r1)
3031
CollectionAssert.AreEqual ([1; 2; 3], r2)
3132
CollectionAssert.AreEqual ([1], r3)
33+
Assert.AreEqual (1, r4)
3234
#if TEST_TRACE
3335
CollectionAssert.AreEqual (["ToSeq seq"], Traces.get())
3436
#endif

0 commit comments

Comments
 (0)