UNPKG

crocks

Version:

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

35 lines (25 loc) 918 B
/** @license ISC License (c) copyright 2017 original and current authors */ /** @author Ian Hofmann-Hicks (evil) */ var First = require('../core/types').proxy('First') var curry = require('../core/curry') var isFunction = require('../core/isFunction') var isSameType = require('../core/isSameType') var applyTransform = function (first) { return first.valueOf(); } // firstToMaybe : First a -> Maybe a // firstToMaybe : (a -> First b) -> a -> Maybe b function firstToMaybe(first) { if(isFunction(first)) { return function(x) { var m = first(x) if(!isSameType(First, m)) { throw new TypeError('firstToMaybe: First returning function required') } return applyTransform(m) } } if(isSameType(First, first)) { return applyTransform(first) } throw new TypeError('firstToMaybe: First or First returning function required') } module.exports = curry(firstToMaybe)