crocks
Version:
A collection of well known Algebraic Datatypes for your utter enjoyment.
29 lines (22 loc) • 719 B
JavaScript
/** @license ISC License (c) copyright 2016 original and current authors */
/** @author Ian Hofmann-Hicks (evil) */
var curry = require('../core/curry')
var isFoldable = require('../core/isFoldable')
var isMonoid = require('../core/isMonoid')
var mconcatMap = require('../core/mconcatMap')
var identity = function (x) { return x; }
// mreduce : Monoid M => M -> ([ a ] | List a) -> a
function mreduce(m, xs) {
if(!isMonoid(m)) {
throw new TypeError(
'mreduce: Monoid required for first argument'
)
}
if(!isFoldable(xs)) {
throw new TypeError(
'mreduce: Foldable required for second argument'
)
}
return mconcatMap(m, identity, xs).valueOf()
}
module.exports = curry(mreduce)