UNPKG

crocks

Version:

A collection of well known Algebraic Datatypes for your utter enjoyment.

36 lines (26 loc) 993 B
/** @license ISC License (c) copyright 2017 original and current authors */ /** @author Ian Hofmann-Hicks (evil) */ var Maybe = require('.') var Either = require('../core/types').proxy('Either') var curry = require('../core/curry') var isFunction = require('../core/isFunction') var isSameType = require('../core/isSameType') var applyTransform = function (either) { return either.either(Maybe.Nothing, Maybe.Just); } // eitherToMaybe : Either b a -> Maybe a // eitherToMaybe : (a -> Either c b) -> a -> Maybe b function eitherToMaybe(either) { if(isFunction(either)) { return function(x) { var m = either(x) if(!isSameType(Either, m)) { throw new TypeError('eitherToMaybe: Either returning function required') } return applyTransform(m) } } if(isSameType(Either, either)) { return applyTransform(either) } throw new TypeError('eitherToMaybe: Either or Either returning function required') } module.exports = curry(eitherToMaybe)