UNPKG

crocks

Version:

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

29 lines (22 loc) 806 B
/** @license ISC License (c) copyright 2016 original and current authors */ /** @author Ian Hofmann-Hicks (evil) */ var _chain = require('../core/array').chain var curry = require('../core/curry') var isArray = require('../core/isArray') var isChain = require('../core/isChain') var isFunction = require('../core/isFunction') var fl = require('../core/flNames') // chain : Chain m => (a -> m b) -> m a -> m b function chain(fn, m) { if(!isFunction(fn)) { throw new TypeError('chain: Chain returning function required for first argument') } if(!(isChain(m) || isArray(m))) { throw new TypeError('chain: Chain of the same type required for second argument') } if(isArray(m)) { return _chain(fn, m) } return (m[fl.chain] || m.chain).call(m, fn) } module.exports = curry(chain)