UNPKG

crocks

Version:

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

72 lines (52 loc) 1.79 kB
/** @license ISC License (c) copyright 2016 original and current authors */ /** @author Ian Hofmann-Hicks (evil) */ var VERSION = 2 var _implements = require('../core/implements') var _inspect = require('../core/inspect') var _object = require('../core/object') var _equals = require('../core/equals') var type = require('../core/types').type('Assign') var _type = require('../core/types').typeFn(type(), VERSION) var fl = require('../core/flNames') var isNil = require('../core/isNil') var isObject = require('../core/isObject') var isSameType = require('../core/isSameType') var _empty = function () { return Assign({}); } function Assign(o) { var obj; var x = isNil(o) ? _empty().valueOf() : o if(!arguments.length || !isObject(x)) { throw new TypeError('Assign: Object required') } var valueOf = function () { return x; } var empty = _empty var inspect = function () { return ("Assign" + (_inspect(valueOf()))); } var equals = function (m) { return isSameType(Assign, m) && _equals(x, m.valueOf()); } function concat(method) { return function(m) { if(!isSameType(Assign, m)) { throw new TypeError(("Assign." + method + ": Assign required")) } return Assign(_object.assign(m.valueOf(), x)) } } return ( obj = { inspect: inspect, toString: inspect, equals: equals, valueOf: valueOf, type: type, empty: empty, concat: concat('concat') }, obj[fl.equals] = equals, obj[fl.empty] = empty, obj[fl.concat] = concat(fl.concat), obj['@@type'] = _type, obj.constructor = Assign, obj ) } Assign['@@implements'] = _implements( [ 'equals', 'concat', 'empty' ] ) Assign.empty = _empty Assign.type = type Assign[fl.empty] = _empty Assign['@@type'] = _type module.exports = Assign