/** @module maybe.ts */ import { HKT, Type, URIS } from 'fp-ts/lib/HKT'; import { Applicative, Apply, ArrayApplicative, ArrayApply, HKT0 } from './helper-types'; declare global { interface Array { _URI: 'Array'; _A: T; } } declare module 'fp-ts/lib/HKT' { interface URI2HKT { Array: A[]; } } declare module 'fp-ts/lib/HKT' { interface URI2HKT { 'babakness/maybe': Maybe; } } export declare type Maybe = Nothing | Just; export declare const Maybe: { _URI: string; of: (a: A) => Maybe; /** * Place nullable values (undefined and null) into a nothing, otherwise into a Just */ from: (a: A | null | undefined) => Maybe; }; export declare class Nothing { static readonly _URI: 'babakness/maybe'; static value: Maybe; static of(value: any): Maybe; readonly _A: A; readonly _URI: 'babakness/maybe'; private constructor(); fold(valueWhenNothing: B, doWhenJust: (a: A) => B): B; reduce(doWhenJust: (a: A) => B, valueWhenNothing: B): B; joinOrValue(a: A): A; joinOrDo(fn: () => A): A; map(fn: (a: A) => B): Maybe; mapNullable(fn: (a: A) => B | undefined | null): Maybe; chain(fn: (a: A) => Maybe): Maybe; isJust(): this is Just; isNothing(): this is Nothing; /** * A shortcut for Maybe1.ap( Maybe2.map( toTuple ) ) * with better type intelligence */ apTuple(fb: Maybe): Maybe<[B, A]>; ap(fab: Maybe<(a: A) => B>): Maybe; ap_(this: Maybe<(b: B) => C>, fb: Maybe): Maybe; sequence(this: Maybe> & (Maybe> | Maybe>), F: HKT0 | { of: (a: A) => (HKT & Apply) | (HKT & ArrayApply); }): Type>; sequenceNullable(this: Maybe> & (Maybe> | Maybe>), F: HKT0 | { of: (a: A) => (HKT & Apply) | (HKT & ArrayApply); }): Type>; traverse(this: Maybe, F: Applicative | ArrayApplicative, fn: (a: A) => (HKT & Apply) | (HKT & ArrayApply)): Type>; traverseNullable(this: Maybe, F: Applicative | ArrayApplicative, fn: (a: A) => (HKT & Apply) | (HKT & ArrayApply)): Type>; } export declare const nothing: Maybe; export declare class Just { readonly value: A; static readonly _URI: 'babakness/maybe'; static of(value: T): Just; readonly _A: A; readonly _URI: 'babakness/maybe'; constructor(value: A); traverse(this: Maybe, F: Applicative | ArrayApplicative, fn: (a: A) => (HKT & Apply) | (HKT & ArrayApply)): Type>; traverseNullable(this: Maybe, F: Applicative | ArrayApplicative, fn: (a: A) => (HKT & Apply) | (HKT & ArrayApply)): Type>; sequence(this: Maybe> & (Maybe> | Maybe>), F: HKT0 | { of: (a: A) => (HKT & Apply) | (HKT & ArrayApply); }): Type>; sequenceNullable(this: Maybe> & (Maybe> | Maybe>), F: HKT0 | { of: (a: A) => (HKT & Apply) | (HKT & ArrayApply); }): Type>; joinOrValue(a: A): A; joinOrDo(fn: () => A): A; map(fn: (a: A) => B): Maybe; mapNullable(fn: (a: A) => B | undefined | null): Maybe; chain(fn: (a: A) => Maybe): Maybe; /** * A shortcut for Maybe1.ap( Maybe2.map( toTuple ) ) * with better type intelligence */ apTuple(fb: Maybe): Maybe<[B, A]>; ap(fab: Maybe<(a: A) => B>): Maybe; ap_(this: Maybe<(b: B) => C>, fb: Maybe): Maybe; fold(valueWhenNothing: B, doWhenJust: (a: A) => B): B; reduce(doWhenJust: (a: A) => B, valueWhenNothing: B): B; isJust(): this is Just; isNothing(): this is Nothing; }