All files / seq/operator choose.ts

100% Statements 10/10
100% Branches 2/2
100% Functions 3/3
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 171x   1x       1x 2x 2x 10x 10x 6x          
import {Chooser, isSome} from 'fnxt/option';
import {Seq} from 'fnxt/fnxt-types';
import {toSequence} from '../build';
 
export type chooseT = <E, F>(e: Chooser<E, F>) => (seq: Seq<E>) => Seq<F>
 
export const choose: chooseT = <E, F>(chooser: Chooser<E, F>) => (seq: Seq<E>): Seq<F> =>
  toSequence(function* () {
    for (const e of seq) {
      const option = chooser(e);
      if (isSome(option)) {
        yield option.value;
      }
    }
  });