Skip to content

Commit df396c5

Browse files
committed
Fix by adding back takeWhileXXX after rebasing faux pas
1 parent ccd559b commit df396c5

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

src/FSharp.Control.TaskSeq/TaskSeqInternal.fs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ type internal AsyncEnumStatus =
1313

1414
[<Struct>]
1515
type internal WhileKind =
16+
/// The item under test is included even if false
1617
| Inclusive
18+
/// The item under test is always excluded
1719
| Exclusive
1820

1921
[<Struct>]
@@ -610,6 +612,61 @@ module internal TaskSeqInternal =
610612
| true -> yield item
611613
| false -> ()
612614
}
615+
616+
let takeWhile whileKind predicate (source: taskSeq<_>) =
617+
checkNonNull (nameof source) source
618+
619+
taskSeq {
620+
use e = source.GetAsyncEnumerator(CancellationToken())
621+
let! step = e.MoveNextAsync()
622+
let mutable more = step
623+
624+
match whileKind, predicate with
625+
| Exclusive, Predicate predicate ->
626+
while more do
627+
let value = e.Current
628+
more <- predicate value
629+
630+
if more then
631+
yield value
632+
let! ok = e.MoveNextAsync()
633+
more <- ok
634+
635+
| Inclusive, Predicate predicate ->
636+
while more do
637+
let value = e.Current
638+
more <- predicate value
639+
640+
yield value
641+
642+
if more then
643+
let! ok = e.MoveNextAsync()
644+
more <- ok
645+
646+
| Exclusive, PredicateAsync predicate ->
647+
while more do
648+
let value = e.Current
649+
let! passed = predicate value
650+
more <- passed
651+
652+
if more then
653+
yield value
654+
let! ok = e.MoveNextAsync()
655+
more <- ok
656+
657+
| Inclusive, PredicateAsync predicate ->
658+
while more do
659+
let value = e.Current
660+
let! passed = predicate value
661+
more <- passed
662+
663+
yield value
664+
665+
if more then
666+
let! ok = e.MoveNextAsync()
667+
more <- ok
668+
}
669+
613670
// Consider turning using an F# version of this instead?
614671
// https://github.com/i3arnon/ConcurrentHashSet
615672
type ConcurrentHashSet<'T when 'T: equality>(ct) =

0 commit comments

Comments
 (0)