crocks
Version:
A collection of well known Algebraic Datatypes for your utter enjoyment.
49 lines (38 loc) • 1.06 kB
JavaScript
/** @license ISC License (c) copyright 2016 original and current authors */
/** @author Ian Hofmann-Hicks (evil) */
var isArray = require('./isArray')
var isFunction = require('./isFunction')
var isObject = require('./isObject')
var isString = require('./isString')
var isSymbol = require('./isSymbol')
var isDate = require('./isDate')
function arrayInspect(xs) {
return xs.length
? xs.map(inspect).reduce(function (a, x) { return a + ',' + x; })
: xs
}
// inspect : a -> String
function inspect(x) {
if(x && isFunction(x.inspect)) {
return (" " + (x.inspect()))
}
if(isFunction(x)) {
return ' Function'
}
if(isArray(x)) {
return (" [" + (arrayInspect(x)) + " ]")
}
if(isObject(x)) {
return (" { " + (Object.keys(x).reduce(function (acc, key) {
return acc.concat([ (key + ":" + (inspect(x[key]))) ])
}, []).join(', ')) + " }")
}
if(isString(x)) {
return (" \"" + x + "\"")
}
if(isSymbol(x) || isDate(x)) {
return (" " + (x.toString()))
}
return (" " + x)
}
module.exports = inspect