UNPKG

crocks

Version:

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

41 lines (31 loc) 1.02 kB
/** @license ISC License (c) copyright 2016 original and current authors */ /** @author Ian Hofmann-Hicks (evil) */ var compose = require('../core/compose') var curry = require('../core/curry') var isArray = require('../core/isArray') var isObject = require('../core/isObject') var isFunction = require('../core/isFunction') var isFunctor= require('../core/isFunctor') var array = require('../core/array') var object = require('../core/object') var fl = require('../core/flNames') // map : Functor f => (a -> b) -> f a -> f b function map(fn, m) { if(!isFunction(fn)) { throw new TypeError('map: Function required for first argument') } if(isFunction(m)) { return compose(fn, m) } if(isArray(m)) { return array.map(fn, m) } if(m && isFunctor(m)) { return (m[fl.map] || m.map).call(m, fn) } if(isObject(m)) { return object.map(fn, m) } throw new TypeError('map: Object, Function or Functor of the same type required for second argument') } module.exports = curry(map)