crocks
Version:
A collection of well known Algebraic Datatypes for your utter enjoyment.
26 lines (20 loc) • 644 B
JavaScript
/** @license ISC License (c) copyright 2016 original and current authors */
/** @author Ian Hofmann-Hicks (evil) */
var curry = require('../core/curry')
var isBifunctor = require('../core/isBifunctor')
var isFunction = require('../core/isFunction')
var fl = require('../core/flNames')
function bimap(f, g, m) {
if(!(isFunction(f) && isFunction(g))) {
throw new TypeError(
'bimap: Functions required for first two arguments'
)
}
if(!isBifunctor(m)) {
throw new TypeError(
'bimap: Bifunctor required for third argument'
)
}
return (m[fl.bimap] || m.bimap).call(m, f, g)
}
module.exports = curry(bimap)