// Type definitions for sanctuary 0.14 // Project: https://github.com/sanctuary-js/sanctuary#readme // Definitions by: David Chambers // Juan J. Jimenez-Anca // Ken Aguilar // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped declare var S: Sanctuary.Environment; export = S; export as namespace S; type Nullable = A | null; type Pair = [A, B]; type Thunk = () => A; type Fn = (a: A) => B; type Fn2 = (a: A) => (b: B) => C; type Fn3 = (a: A) => (b: B) => (c: C) => D; type Fn4 = (a: A) => (b: B) => (c: C) => (d: D) => E; type Fn5 = (a: A) => (b: B) => (c: C) => (d: D) => (e: E) => F; type Fn2_ = (a: A, b: B) => C; type Fn3_ = (a: A, b: B, c: C) => D; type Fn4_ = (a: A, b: B, c: C, d: D) => E; type Fn5_ = (a: A, b: B, c: C, d: D, e: E) => F; type Predicate = (a: A) => boolean; interface StrMap { [k: string]: A; } interface Maybe { constructor: { '@@type': 'sanctuary/Maybe'; }; } interface Either { constructor: { '@@type': 'sanctuary/Either'; }; } type ValidNumber = number; type FiniteNumber = number; type NonZeroFiniteNumber = number; type Integer = number; type NonNegativeInteger = number; interface TypeRep {} interface Setoid {} interface Ord extends Setoid {} interface Semigroupoid {} interface Category extends Semigroupoid {} interface Semigroup {} interface Monoid extends Semigroup {} interface Functor {} interface Bifunctor extends Functor {} interface Profunctor extends Functor {} interface Apply extends Functor {} interface Applicative extends Apply {} interface Chain extends Apply {} interface ChainRec extends Chain {} interface Monad extends Applicative, Chain {} interface Alt extends Functor {} interface Plus extends Alt {} interface Alternative extends Applicative, Plus {} interface Foldable {} interface Traversable extends Functor, Foldable {} interface Extend extends Functor {} interface Comonad extends Extend {} interface Contravariant {} interface ListToMaybeList { (xs: string): Maybe; (xs: ReadonlyArray): Maybe; } interface MatchObj { match: string; groups: ReadonlyArray>; } declare namespace Sanctuary { interface Static { Maybe: TypeRep; Nothing: Maybe; Just(x: A): Maybe; Either: TypeRep; Left(x: A): Either; Right(x: A): Either; // Classify type(x: any): { namespace: Maybe name: string version: NonNegativeInteger }; is(typeRep: TypeRep): (x: any) => boolean; // Showable toString(x: any): string; // Fantasy Land equals(x: Setoid): (y: Setoid) => boolean; lt (x: Ord): (y: Ord) => boolean; lte(x: Ord): (y: Ord) => boolean; gt (x: Ord): (y: Ord) => boolean; gte(x: Ord): (y: Ord) => boolean; min(x: Ord): (y: Ord) => A; max(x: Ord): (y: Ord) => A; id(p: TypeRep): Fn | Category; concat(x: Semigroup): (y: Semigroup) => Semigroup; concat(x: ReadonlyArray): (y: ReadonlyArray) => A[]; concat(x: StrMap): (y: StrMap) => StrMap; concat(x: string): (y: string) => string; empty(p: TypeRep): Monoid; map(p: Fn): { (q: Fn): Fn; (q: ReadonlyArray): B[]; (q: StrMap): StrMap; (q: Functor): Functor; }; bimap(p: Fn): (q: Fn) => (r: Bifunctor) => Bifunctor; promap(p: Fn): (q: Fn) => { (r: Fn): Fn; (r: Profunctor): Profunctor; }; alt(x: Alt): (y: Alt) => Alt; zero(p: TypeRep): Plus; reduce(p: Fn2): (q: B) => (r: ReadonlyArray | StrMap | Maybe | Either | Foldable) => B; traverse(typeRep: TypeRep): (f: Fn>) => (traversable: Traversable) => Applicative>; sequence(typeRep: TypeRep): (traversable: Traversable>) => Applicative>; ap(p: Apply>): (q: Apply) => Apply; lift2(f: Fn2): { (x: Fn): (y: Fn) => Fn; (x: Apply): (y: Apply) => Apply; }; lift3(f: Fn3): { (x: Fn): (y: Fn) => (z: Fn) => Fn; (x: Apply): (y: Apply) => (z: Apply) => Apply; }; apFirst (x: Apply): (y: Apply) => Apply; apSecond(x: Apply): (y: Apply) => Apply; of(typeRep: TypeRep): (x: A) => Fn; of(typeRep: TypeRep): (x: A) => Applicative; chain(f: Fn2): (chain_: Fn) => Fn; chain(f: Fn >): (chain_: Chain) => Chain; join(chain_: Fn2): Fn; join(chain_: ReadonlyArray>): A[]; join(chain_: Maybe>): Maybe; join(chain_: Chain>): Chain; chainRec(typeRep: TypeRep): { (f: Fn2>): (x: A) => Fn; (f: Fn >>): (x: A) => ChainRec; }; extend(f: Fn, B>): (extend_: Extend) => Extend; extract(comonad: Comonad): A; contramap(f: Fn): { (contravariant: Fn): Fn; (contravariant: Contravariant): Contravariant; }; filter (pred: Predicate): { (m: ReadonlyArray): A[]; (m: Foldable): Foldable; }; filterM(pred: Predicate): { (m: ReadonlyArray): A[]; (m: Foldable): Foldable; }; takeWhile(pred: Predicate): (foldable: Foldable) => Foldable; dropWhile(pred: Predicate): (foldable: Foldable) => Foldable; // Combinator I(x: A): A; K(x: A): (y: any) => A; T(x: A): (f: Fn) => B; // Function curry2(f: Fn2_): Fn2; curry3(f: Fn3_): Fn3; curry4(f: Fn4_): Fn4; curry5(f: Fn5_): Fn5; flip(f: Fn2): Fn2; // Composition compose(f: Fn): (g: Fn) => Fn; compose(x: Semigroupoid): (y: Semigroupoid) => Semigroupoid; pipe(fs: [Fn]): (x: A) => B; pipe(fs: [Fn, Fn]): (x: A) => C; pipe(fs: [Fn, Fn, Fn]): (x: A) => D; pipe(fs: [Fn, Fn, Fn, Fn]): (x: A) => E; pipe(fs: [Fn, Fn, Fn, Fn, Fn]): (x: A) => F; pipe(fs: ReadonlyArray>): (x: any) => any; on(p: Fn2): (q: Fn) => (r: A) => Fn; // TODO: Maybe isNothing(p: Maybe): boolean; isJust(p: Maybe): boolean; fromMaybe(p: A): (q: Maybe) => A; fromMaybe_(p: Thunk): (q: Maybe) => A; maybeToNullable(p: Maybe): Nullable; toMaybe(p: A | null | undefined): Maybe; maybe(p: B): (q: Fn) => (r: Maybe) => B; maybe_(p: Thunk): (q: Fn) => (r: Maybe) => B; justs(p: ReadonlyArray>): A[]; mapMaybe(p: Fn>): (q: A[]) => A[]; encase(p: Fn): Fn>; encase2(p: Fn2): Fn2>; encase3(p: Fn3): Fn3>; maybeToEither(p: A): (q: Maybe) => Either; // TODO: Either isLeft(p: Either): boolean; isRight(p: Either): boolean; fromEither(p: B): (q: Either) => B; toEither(p: A): (q: B | null | undefined) => Either; either(p: Fn): (q: Fn) => (r: Either) => C; lefts(p: ReadonlyArray>): A[]; rights(p: ReadonlyArray>): B[]; tagBy(p: Predicate): (q: A) => Either; encaseEither(p: Fn): (q: Fn) => Fn>; encaseEither2(p: Fn): (q: Fn2) => Fn2>; encaseEither3(p: Fn): (q: Fn3) => Fn3>; eitherToMaybe(p: Either): Maybe; // Logic and(p: boolean): (q: boolean) => boolean; or(p: boolean): (q: boolean) => boolean; not(p: boolean): boolean; complement(p: Predicate): Predicate; ifElse(p: Predicate): (q: Fn) => (r: Fn) => Fn; when(p: Predicate): (q: Fn) => Fn; unless(p: Predicate): (q: Fn) => Fn; allPass(p: ReadonlyArray>): Predicate; anyPass(p: ReadonlyArray>): Predicate; // List slice(p: Integer): (q: Integer) => ListToMaybeList; at(p: Integer): { (q: string): Maybe; (q: ReadonlyArray): Maybe; }; head(xs: string): Maybe; head(xs: ReadonlyArray): Maybe; last(xs: string): Maybe; last(xs: ReadonlyArray): Maybe; tail(xs: string): Maybe; tail(xs: ReadonlyArray): Maybe; init(xs: string): Maybe; init(xs: ReadonlyArray): Maybe; take(n: Integer): ListToMaybeList; takeLast(n: Integer): ListToMaybeList; drop(n: Integer): ListToMaybeList; dropLast(n: Integer): ListToMaybeList; // Array // TODO: Fantasyland overloads, non-curried versions append(x: A): { (xs: ReadonlyArray): A[]; (xs: Applicative): Applicative; }; prepend(x: A): { (xs: ReadonlyArray): A[]; (xs: Applicative): Applicative; }; joinWith(p: string): (q: ReadonlyArray) => string; elem(p: A): (q: Foldable | StrMap | ReadonlyArray) => boolean; find(p: Predicate): (q: ReadonlyArray | StrMap | Foldable) => Maybe; pluck(key: string): (xs: Functor) => Functor; unfoldr(f: Fn>>): (x: B) => A[]; range(from: Integer): (to: Integer) => Integer[]; groupBy(f: Fn2): (xs: ReadonlyArray) => A[][]; reverse(foldable: ReadonlyArray): A[]; reverse(foldable: Foldable): Foldable; sort(foldable: ReadonlyArray): A[]; sort(foldable: Foldable): Foldable; sortBy(f: Fn>): { (foldable: ReadonlyArray): A[]; (foldable: Foldable): Foldable; }; // Object prop(p: string): (q: any) => any; props(p: ReadonlyArray): (q: any) => any; get(p: Predicate): (q: string) => (r: any) => Maybe; gets(p: Predicate): (q: ReadonlyArray) => (r: any) => Maybe; // StrMap keys(p: StrMap): string[]; values(p: StrMap): A[]; pairs(p: StrMap): Array>; // Number negate(n: ValidNumber): ValidNumber; add(p: FiniteNumber): (q: FiniteNumber) => FiniteNumber; sum(p: Foldable | ReadonlyArray): FiniteNumber; sub(p: FiniteNumber): (q: FiniteNumber) => FiniteNumber; mult(x: FiniteNumber): (q: FiniteNumber) => FiniteNumber; product(p: Foldable | ReadonlyArray): FiniteNumber; div(p: NonZeroFiniteNumber): (q: FiniteNumber) => FiniteNumber; pow(p: FiniteNumber): (q: FiniteNumber) => FiniteNumber; mean(p: Foldable | ReadonlyArray): Maybe; // Integer even(n: Integer): boolean; odd(n: Integer): boolean; // Parse parseDate(s: string): Maybe; parseFloat(s: string): Maybe; parseInt(p: Integer): (q: string) => Maybe; parseJson(p: Predicate): (q: string) => Maybe; // RegExp regex(p: string): (q: string) => RegExp; regexEscape(s: string): string; test(pattern: RegExp): Predicate; match(pattern: RegExp): (q: string) => Array>; matchAll(pattern: RegExp): (q: string) => MatchObj[]; // String toUpper(s: string): string; toLower(s: string): string; trim(s: string): string; stripPrefix(prefix: string): (q: string) => Maybe; stripSuffix(suffix: string): (q: string) => Maybe; words(s: string): string[]; unwords(xs: ReadonlyArray): string; lines(s: string): string[]; unlines(xs: ReadonlyArray): string; splitOn(separator: string): (q: string) => string[]; splitOnRegex(pattern: RegExp): (q: string) => string[]; } interface Environment extends Static { env: ReadonlyArray; create(opts: {checkTypes: boolean, env: ReadonlyArray}): Static; } }