UNPKG

crocks

Version:

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

35 lines (26 loc) 867 B
/** @license ISC License (c) copyright 2016 original and current authors */ /** @author Ian Hofmann-Hicks (evil) */ var cloneIterable = require('../core/cloneIterable') var isArray = require('../core/isArray') var isFunction = require('../core/isFunction') var isIterable = require('../core/isIterable') var isString = require('../core/isString') var ref = require('../core/Maybe'); var Nothing = ref.Nothing; var Just = ref.Just; function head(m) { if(m && isFunction(m.head)) { return m.head() } if(isArray(m) || isString(m)) { return !m.length ? Nothing() : Just(m[0]) } if(isIterable(m)) { var cloned = cloneIterable(m) var iterator = cloned[Symbol.iterator]() var head = iterator.next() return head.done ? Nothing() : Just(head.value) } throw new TypeError('head: List or iterable required') } module.exports = head