UNPKG

@typed/fp

Version:

Data Structures and Resources for fp-ts

44 lines 1.01 kB
import * as E from 'fp-ts/Either'; import { pipe } from 'fp-ts/function'; import * as O from 'fp-ts/Option'; import * as S from './struct'; /** * @since 0.9.2 * @category Combinator */ export const chainRec = (f) => (value) => { let option = f(value); while (O.isSome(option)) { if (E.isRight(option.value)) { return O.some(option.value.right); } option = f(option.value.left); } return option; }; /** * @since 0.12.1 * @category Constructor */ export const struct = (opts) => { const { concat } = O.getMonoid(S.getAssignSemigroup()); const entries = Object.entries(opts); return entries.reduce((acc, [k, o]) => pipe(acc, concat(pipe(o, O.map((v) => S.make(k, v))))), O.none); }; /** * @since 0.9.2 * @category Typeclass */ export const ChainRec = { chainRec, }; /** * @since 0.9.2 * @category Typeclass */ export const MonadRec = { ...O.Monad, ...ChainRec, }; export * from 'fp-ts/Option'; //# sourceMappingURL=Option.js.map