From fbbd99765be21a2b9b0b1145dd9fe2d3c630fa93 Mon Sep 17 00:00:00 2001 From: rowan Date: Thu, 17 Apr 2025 20:27:14 -0500 Subject: [PATCH] added some list functions --- src/function.js | 4 ++-- src/list.js | 17 +++++++++++++---- src/type.js | 1 - 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/function.js b/src/function.js index bea642e..979180b 100644 --- a/src/function.js +++ b/src/function.js @@ -1,6 +1,6 @@ import { curry, curryN } from './curry.js' import { dispatch } from './fantasy-land.js' -import { head, concat as iconcat, isIterable, iter, tail } from './list.js' +import { head, concat as iterconcat, iter, tail } from './list.js' /** @import { Fn, Morphism, InferredMorphism, Predicate } from './types.js' */ @@ -14,7 +14,7 @@ export const id = x => x export const concat = dispatch(['fantasy-land/concat', 'concat'], (b, a) => { if (isIterable(a) || isIterable(b)) { - return iconcat(iter(a), iter(b)) + return iterconcat(iter(a), iter(b)) } else { return a.concat(b) } diff --git a/src/list.js b/src/list.js index 7f1d246..b0cf35a 100644 --- a/src/list.js +++ b/src/list.js @@ -1,4 +1,5 @@ import { curry } from './curry.js' +import { concat } from './function.js' import { inc } from './math.js' /** @@ -28,7 +29,7 @@ export function* iter(value) { * @param {...(Iterable | Iterator)} iterators * @yields {T} */ -export const concat = function*(...iterators) { +export const iterConcat = function*(...iterators) { for (const iter of iterators) { for (const item of Iterator.from(iter)) { yield item @@ -112,12 +113,20 @@ export const tail = a => drop(1, a) */ export const last = a => nth(length(a) - 1, a) +export const append = curry( + /* + * @param {T | T[] | Iterable} x + * @param {T[] | Iterable} xs + */ + (x, xs) => concat(xs, x) +) + export const prepend = curry( /** * @template T - * @param {T} x - * @param {Iterable} xs + * @param {T | T[] | Iterable} x + * @param {T[] | Iterable} xs */ - (x, xs) => concat([x], xs)) + (x, xs) => concat(x, xs)) diff --git a/src/type.js b/src/type.js index 113b074..660e4ff 100644 --- a/src/type.js +++ b/src/type.js @@ -25,5 +25,4 @@ export const is = curry( export const isFn = x => type(x) === 'function' export const isArray = Array.isArray -export const isIterable = x => x != null ? typeof x[Symbol.iterator] === 'function' : false