UNPKG

crocks

Version:

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

35 lines (27 loc) 925 B
/** @license ISC License (c) copyright 2016 original and current authors */ /** @author Ian Hofmann-Hicks (evil) */ var array = require('../core/array') var curry = require('../core/curry') var isApplicative = require('../core/isApplicative') var isArray = require('../core/isArray') var isFunction = require('../core/isFunction') function traverse(af, fn, m) { if(!(isApplicative(af) || isFunction(af))) { throw new TypeError( 'traverse: Applicative TypeRep or Apply returning function required for first argument' ) } if(!isFunction(fn)) { throw new TypeError( 'traverse: Apply returning function required for second argument' ) } if(m && isFunction(m.traverse)) { return m.traverse(af, fn) } if(isArray(m)) { return array.traverse(af, fn, m) } throw new TypeError('traverse: Traversable or Array required for third argument') } module.exports = curry(traverse)