UNPKG

crocks

Version:

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

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