Skip to content

RillOptionOps<A>

extension RillOptionOps<A> on Rill<Option<A>>

Properties

unNone extension no setter

Rill<A> get unNone

Available on Rill<O>, provided by the RillOptionOps<A> extension

Implementation
dart
Rill<A> get unNone => collect(identity);

unNoneTerminate extension no setter

Rill<A> get unNoneTerminate

Available on Rill<O>, provided by the RillOptionOps<A> extension

Implementation
dart
Rill<A> get unNoneTerminate {
  Pull<A, Unit> loop(Pull<Option<A>, Unit> p) {
    return p.uncons.flatMap((hdtl) {
      return hdtl.foldN(
        () => Pull.done,
        (hd, tl) => hd
            .indexWhere((opt) => opt.isEmpty)
            .fold(
              () => Pull.output(hd.map(_getopt)).append(() => loop(tl)),
              (idx) => idx == 0 ? Pull.done : Pull.output(hd.take(idx).map(_getopt)),
            ),
      );
    });
  }

  return loop(underlying).rillNoScope;
}