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