crocks
Version:
A collection of well known Algebraic Datatypes for your utter enjoyment.
36 lines (26 loc) • 986 B
JavaScript
/** @license ISC License (c) copyright 2017 original and current authors */
/** @author Ian Hofmann-Hicks (evil) */
var First = require('.')
var Result = require('../core/types').proxy('Result')
var curry = require('../core/curry')
var isFunction = require('../core/isFunction')
var isSameType = require('../core/isSameType')
var applyTransform = function (result) { return result.either(First.empty, First); }
// resultToFirst : Result b a -> First a
// resultToFirst : (a -> Result c b) -> a -> First b
function resultToFirst(result) {
if(isFunction(result)) {
return function(x) {
var m = result(x)
if(!isSameType(Result, m)) {
throw new TypeError('resultToFirst: Result returning function required')
}
return applyTransform(m)
}
}
if(isSameType(Result, result)) {
return applyTransform(result)
}
throw new TypeError('resultToFirst: Result or Result returning function required')
}
module.exports = curry(resultToFirst)