crocks
Version:
A collection of well known Algebraic Datatypes for your utter enjoyment.
32 lines (24 loc) • 797 B
JavaScript
/** @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)