UNPKG

functionalscript

Version:

FunctionalScript is a purely functional subset of JavaScript

51 lines (50 loc) 3.16 kB
import { type Scan, type StateScan, type Fold, type Reduce, type Equal } from '../function/operator/module.f.ts'; export type List<T> = NotLazy<T> | Thunk<T>; type NotLazy<T> = Result<T> | Concat<T> | readonly T[]; type Empty = null; export type Result<T> = Empty | NonEmpty<T>; export type Thunk<T> = () => List<T>; type NonEmpty<T> = { readonly first: T; readonly tail: List<T>; }; type Concat<T> = { readonly head: List<T>; readonly tail: List<T>; }; export declare const concat: <T>(head: List<T>) => (tail: List<T>) => List<T>; export declare const next: <T>(head: List<T>) => Result<T>; export declare const iterable: <T>(list: List<T>) => Iterable<T>; export declare const toArray: <T>(list: List<T>) => readonly T[]; export declare const flat: <T>(list: List<List<T>>) => Thunk<T>; export declare const map: <I, O>(f: (value: I) => O) => (input: List<I>) => Thunk<O>; export declare const flatMap: <I, O>(f: (value: I) => List<O>) => (input: List<I>) => Thunk<O>; export declare const filter: <T>(f: (value: T) => boolean) => (input: List<T>) => Thunk<T>; export declare const filterMap: <I, O>(f: (value: I) => O | null) => (input: List<I>) => Thunk<O>; export declare const takeWhile: <T>(f: (value: T) => boolean) => (input: List<T>) => Thunk<T>; export declare const take: (n: number) => <T>(input: List<T>) => Thunk<T>; export declare const dropWhile: <T>(f: (value: T) => boolean) => (input: List<T>) => Thunk<T>; export declare const drop: (n: number) => <T>(input: List<T>) => Thunk<T>; export declare const first: <D>(def: D) => <T>(input: List<T>) => D | T; export declare const last: <D>(first: D) => <T>(tail: List<T>) => D | T; export declare const find: <D>(def: D) => <T>(f: (value: T) => boolean) => (input: List<T>) => D | T; export declare const some: (input: List<boolean>) => boolean; export declare const isEmpty: <T>(input: List<T>) => boolean; export declare const every: (_: List<boolean>) => boolean; export declare const includes: <T>(value: T) => (sequence: List<T>) => boolean; export declare const countdown: (count: number) => Thunk<number>; export declare const repeat: <T>(v: T) => (c: number) => Thunk<T>; export declare const cycle: <T>(list: List<T>) => List<T>; export declare const scan: <I, O>(op: Scan<I, O>) => (input: List<I>) => Thunk<O>; export declare const stateScan: <I, S, O>(op: StateScan<I, S, O>) => (init: S) => (input: List<I>) => Thunk<O>; export declare const foldScan: <I, O>(op: Fold<I, O>) => (init: O) => (input: List<I>) => Thunk<O>; export declare const fold: <I, O>(op: Fold<I, O>) => (init: O) => (input: List<I>) => O; export declare const reduce: <T>(op: Reduce<T>) => <D>(def: D) => (input: List<T>) => D | T; export declare const length: <T>(input: List<T>) => number; export type Entry<T> = readonly [number, T]; export declare const entries: <T>(input: List<T>) => Thunk<Entry<T>>; export declare const reverse: <T>(input: List<T>) => List<T>; export declare const zip: <A>(a: List<A>) => <B>(b: List<B>) => Thunk<readonly [A, B]>; export declare const equal: <T>(e: Equal<T>) => (a: List<T>) => (b: List<T>) => boolean; export declare const empty: null; export {};