UNPKG

crocks

Version:

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

32 lines (24 loc) 797 B
/** @license ISC License (c) copyright 2018 original and current authors */ /** @author Ian Hofmann-Hicks (evil) */ var _array = require('../core/array') var curry = require('../core/curry') var isArray = require('../core/isArray') var isFunction = require('../core/isFunction') // foldMap :: Foldable f, Semigroup s => (a -> s) -> f a -> s function foldMap(fn, m) { if(!isFunction(fn)) { throw new TypeError( 'foldMap: Function returning Semigroups of the same type required for first argument' ) } if(isArray(m)) { return _array.foldMap(fn, m) } if(m && isFunction(m.foldMap)) { return m.foldMap(fn) } throw new TypeError( 'foldMap: Non-empty Foldable with at least one Semigroup required for second argument' ) } module.exports = curry(foldMap)