UNPKG

fp-ts

Version:

Functional programming in TypeScript

119 lines (118 loc) 4.96 kB
/** * @since 2.4.0 */ import { HKT, Kind, Kind2, URIS, URIS2 } from './HKT' import { Monad, Monad1, Monad2 } from './Monad' import { Semigroup } from './Semigroup' import { These } from './These' /** * @category model * @since 2.4.0 */ export interface TheseT<M, E, A> extends HKT<M, These<E, A>> {} /** * @since 2.4.0 */ export interface TheseM<M> { readonly map: <E, A, B>(fa: TheseT<M, E, A>, f: (a: A) => B) => TheseT<M, E, B> readonly bimap: <E, A, N, B>(fa: TheseT<M, E, A>, f: (e: E) => N, g: (a: A) => B) => TheseT<M, N, B> readonly mapLeft: <E, A, N>(fa: TheseT<M, E, A>, f: (e: E) => N) => TheseT<M, N, A> readonly fold: <E, A, R>( fa: TheseT<M, E, A>, onLeft: (e: E) => HKT<M, R>, onRight: (a: A) => HKT<M, R>, onBoth: (e: E, a: A) => HKT<M, R> ) => HKT<M, R> readonly swap: <E, A>(fa: TheseT<M, E, A>) => TheseT<M, A, E> readonly rightM: <E, A>(ma: HKT<M, A>) => TheseT<M, E, A> readonly leftM: <E, A>(me: HKT<M, E>) => TheseT<M, E, A> readonly left: <E, A>(e: E) => TheseT<M, E, A> readonly right: <E, A>(a: A) => TheseT<M, E, A> readonly both: <E, A>(e: E, a: A) => TheseT<M, E, A> readonly toTuple: <E, A>(fa: TheseT<M, E, A>, e: E, a: A) => HKT<M, [E, A]> readonly getMonad: <E>( S: Semigroup<E> ) => { readonly _E: E readonly map: <A, B>(ma: TheseT<M, E, A>, f: (a: A) => B) => TheseT<M, E, B> readonly of: <A>(a: A) => TheseT<M, E, A> readonly ap: <A, B>(mab: TheseT<M, E, (a: A) => B>, ma: TheseT<M, E, A>) => TheseT<M, E, B> readonly chain: <A, B>(ma: TheseT<M, E, A>, f: (a: A) => TheseT<M, E, B>) => TheseT<M, E, B> } } /** * @category model * @since 2.4.0 */ export declare type TheseT1<M extends URIS, E, A> = Kind<M, These<E, A>> /** * @since 2.4.0 */ export interface TheseM1<M extends URIS> { readonly map: <E, A, B>(fa: TheseT1<M, E, A>, f: (a: A) => B) => TheseT1<M, E, B> readonly bimap: <E, A, N, B>(fa: TheseT1<M, E, A>, f: (e: E) => N, g: (a: A) => B) => TheseT1<M, N, B> readonly mapLeft: <E, A, N>(fa: TheseT1<M, E, A>, f: (e: E) => N) => TheseT1<M, N, A> readonly fold: <E, A, R>( fa: TheseT1<M, E, A>, onLeft: (e: E) => Kind<M, R>, onRight: (a: A) => Kind<M, R>, onBoth: (e: E, a: A) => Kind<M, R> ) => Kind<M, R> readonly swap: <E, A>(fa: TheseT1<M, E, A>) => TheseT1<M, A, E> readonly rightM: <E, A>(ma: Kind<M, A>) => TheseT1<M, E, A> readonly leftM: <E, A>(me: Kind<M, E>) => TheseT1<M, E, A> readonly left: <E, A>(e: E) => TheseT1<M, E, A> readonly right: <E, A>(a: A) => TheseT1<M, E, A> readonly both: <E, A>(e: E, a: A) => TheseT1<M, E, A> readonly toTuple: <E, A>(fa: TheseT1<M, E, A>, e: E, a: A) => Kind<M, [E, A]> readonly getMonad: <E>( S: Semigroup<E> ) => { readonly _E: E readonly map: <A, B>(ma: TheseT1<M, E, A>, f: (a: A) => B) => TheseT1<M, E, B> readonly of: <A>(a: A) => TheseT1<M, E, A> readonly ap: <A, B>(mab: TheseT1<M, E, (a: A) => B>, ma: TheseT1<M, E, A>) => TheseT1<M, E, B> readonly chain: <A, B>(ma: TheseT1<M, E, A>, f: (a: A) => TheseT1<M, E, B>) => TheseT1<M, E, B> } } /** * @category model * @since 2.4.0 */ export declare type TheseT2<M extends URIS2, R, E, A> = Kind2<M, R, These<E, A>> /** * @since 2.4.0 */ export interface TheseM2<M extends URIS2> { readonly map: <R, E, A, B>(fa: TheseT2<M, R, E, A>, f: (a: A) => B) => TheseT2<M, R, E, B> readonly bimap: <R, E, A, N, B>(fa: TheseT2<M, R, E, A>, f: (e: E) => N, g: (a: A) => B) => TheseT2<M, R, N, B> readonly mapLeft: <R, E, A, N>(fa: TheseT2<M, R, E, A>, f: (e: E) => N) => TheseT2<M, R, N, A> readonly fold: <R, E, A, B>( fa: TheseT2<M, R, E, A>, onLeft: (e: E) => Kind2<M, R, B>, onRight: (a: A) => Kind2<M, R, B>, onBoth: (e: E, a: A) => Kind2<M, R, B> ) => Kind2<M, R, B> readonly swap: <R, E, A>(fa: TheseT2<M, R, E, A>) => TheseT2<M, R, A, E> readonly rightM: <R, E, A>(ma: Kind2<M, R, A>) => TheseT2<M, R, E, A> readonly leftM: <R, E, A>(me: Kind2<M, R, E>) => TheseT2<M, R, E, A> readonly left: <R, E, A>(e: E) => TheseT2<M, R, E, A> readonly right: <R, E, A>(a: A) => TheseT2<M, R, E, A> readonly both: <R, E, A>(e: E, a: A) => TheseT2<M, R, E, A> readonly toTuple: <R, E, A>(fa: TheseT2<M, R, E, A>, e: E, a: A) => Kind2<M, R, [E, A]> readonly getMonad: <E>( S: Semigroup<E> ) => { readonly _E: E readonly map: <R, A, B>(ma: TheseT2<M, R, E, A>, f: (a: A) => B) => TheseT2<M, R, E, B> readonly of: <R, A>(a: A) => TheseT2<M, R, E, A> readonly ap: <R, A, B>(mab: TheseT2<M, R, E, (a: A) => B>, ma: TheseT2<M, R, E, A>) => TheseT2<M, R, E, B> readonly chain: <R, A, B>(ma: TheseT2<M, R, E, A>, f: (a: A) => TheseT2<M, R, E, B>) => TheseT2<M, R, E, B> } } /** * @since 2.4.0 */ export declare function getTheseM<M extends URIS2>(M: Monad2<M>): TheseM2<M> export declare function getTheseM<M extends URIS>(M: Monad1<M>): TheseM1<M> export declare function getTheseM<M>(M: Monad<M>): TheseM<M>