UNPKG

crocks

Version:

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

46 lines (34 loc) 1.01 kB
/** @license ISC License (c) copyright 2019 original and current authors */ /** @author RichardForrester */ 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 last(m) { if (m && isFunction(m.last)) { return m.last() } if (isArray(m) || isString(m)) { return !m.length ? Nothing() : Just(m[m.length - 1]) } if (isIterable(m)) { var cloned = cloneIterable(m) var iterator = cloned[Symbol.iterator]() var curr = iterator.next() if (curr.done) { return Nothing() } var val while (!curr.done) { val = curr.value curr = iterator.next() } return Just(val) } throw new TypeError('last: Argument must be a List, String, or Iterable') } module.exports = last