UNPKG

crocks

Version:

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

28 lines (23 loc) 760 B
var ref = require('../core/Maybe'); var Just = ref.Just; var Nothing = ref.Nothing; var curry = require('../core/curry') var isPredOrFunc = require('../core/isPredOrFunc') var isFunction = require('../core/isFunction') var predOrFunc = require('../core/predOrFunc') // safeAfter :: ((b -> Boolean) | Pred) -> (a -> b) -> a -> Maybe b function safeAfter(pred, fn) { if(!isPredOrFunc(pred)) { throw new TypeError('safeAfter: Pred or predicate function required for first argument') } if(!isFunction(fn)) { throw new TypeError('safeAfter: Function required for second argument') } return function (x) { var result = fn(x) return predOrFunc(pred, result) ? Just(result) : Nothing() } } module.exports = curry(safeAfter)