mezzanine
Version:
Fantasy land union types with pattern matching
36 lines (23 loc) • 717 B
JavaScript
import { complement, isNil } from 'ramda';
import Union from '../union';
import Type from '../type';
var id = x => x;
var Just = Type`Just`(complement(isNil));
var Nothing = Type`Nothing`(isNil);
var Maybe = Union`Maybe`({ Just, Nothing }, {
map: ctx => mapFunction => Maybe(ctx.case({
Just: mapFunction,
Nothing: id })),
chain: ctx => chainFunction => ctx.case({
Just: chainFunction,
Nothing: () => ctx }),
filter: ctx => filterPredicate => ctx.chain(
data => filterPredicate(data) ?
Maybe(data) :
Maybe()),
reject: ctx => rejectPredicate => ctx.chain(
data => rejectPredicate(data) ?
Maybe() :
Maybe(data)) });
export default Maybe;
//# sourceMappingURL=maybe.js.map