crocks
Version:
A collection of well known Algebraic Datatypes for your utter enjoyment.
51 lines (39 loc) • 1.22 kB
JavaScript
/** @license ISC License (c) copyright 2018 original and current authors */
/** @author Ian Hofmann-Hicks (evil) */
var curry = require('../core/curry')
var isArray = require('../core/isArray')
var isInteger = require('../core/isInteger')
var isObject = require('../core/isObject')
var isString = require('../core/isString')
var array = require('../core/array')
var object = require('../core/object')
function fn(name) {
function setProp(key, val, x) {
if(isObject(x)) {
if(isString(key)) {
return object.set(key, val, x)
}
throw new TypeError(
(name + ": String required for first argument when third argument is an Object")
)
}
if(isArray(x)) {
if(isInteger(key) && key >= 0) {
return array.set(key, val, x)
}
throw new TypeError(
(name + ": Positive Integer required for first argument when third argument is an Array")
)
}
throw new TypeError(
(name + ": Object or Array required for third argument")
)
}
return curry(setProp)
}
// setProp :: (String | Integer) -> a -> (Object | Array) -> (Object | Array)
var setProp =
fn('setProp')
setProp.origFn =
fn
module.exports = setProp