UNPKG

crocks

Version:

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

42 lines (32 loc) 1.06 kB
/** @license ISC License (c) copyright 2017 original and current authors */ /** @author Ian Hofmann-Hicks (evil) */ var curry = require('../core/curry') var isArray = require('../core/isArray') var isPredOrFunc = require('../core/isPredOrFunc') var isFunction = require('../core/isFunction') var isObject = require('../core/isObject') var object = require('../core/object') var predOrFunc = require('../core/predOrFunc') var not = function (fn) { return function (x) { return !fn(x); }; } // reject : Foldable f => (a -> Boolean) -> f a -> f a function reject(pred, m) { if(!isPredOrFunc(pred)) { throw new TypeError( 'reject: Pred or predicate function required for first argument' ) } var fn = function (x) { return predOrFunc(pred, x); } if(m && isFunction(m.reject)) { return m.reject(fn) } if(isArray(m)) { return m.filter(not(fn)) } if(isObject(m)) { return object.filter(not(fn), m) } throw new TypeError('reject: Foldable or Object required for second argument') } module.exports = curry(reject)