fp-ts-std
Version:
The missing pseudo-standard library for fp-ts.
93 lines • 4.07 kB
TypeScript
/**
* Utility functions to accommodate `fp-ts/Applicative`.
*
* @since 0.12.0
*/
import type { Applicative1, Applicative2, Applicative2C, Applicative3, Applicative3C, Applicative4 } from "fp-ts/Applicative";
import type { Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from "fp-ts/HKT";
/**
* Conditional execution of an applicative. Helpful for conditional side effects
* like logging.
*
* @example
* import { pipe } from 'fp-ts/function'
* import { Predicate } from 'fp-ts/Predicate'
* import { when } from 'fp-ts-std/Applicative'
* import * as IO from 'fp-ts/IO'
* import * as IOE from 'fp-ts/IOEither'
* import { log } from 'fp-ts/Console'
*
* const isInvalid: Predicate<number> = n => n !== 42
*
* pipe(
* IOE.of(123),
* IOE.chainFirstIOK(n =>
* when(IO.Applicative)(isInvalid(n))(log(n))),
* )
*
* @category 2 Typeclass Methods
* @since 0.12.0
*/
export declare function when<F extends URIS4>(F: Applicative4<F>): (b: boolean) => <S, R, E>(x: Kind4<F, S, R, E, void>) => Kind4<F, S, R, E, void>;
export declare function when<F extends URIS3>(F: Applicative3<F>): (b: boolean) => <R, E>(x: Kind3<F, R, E, void>) => Kind3<F, R, E, void>;
export declare function when<F extends URIS3, E>(F: Applicative3C<F, E>): (b: boolean) => <R>(x: Kind3<F, R, E, void>) => Kind3<F, R, E, void>;
export declare function when<F extends URIS2>(F: Applicative2<F>): (b: boolean) => <E>(x: Kind2<F, E, void>) => Kind2<F, E, void>;
export declare function when<F extends URIS2, E>(F: Applicative2C<F, E>): (b: boolean) => (x: Kind2<F, E, void>) => Kind2<F, E, void>;
export declare function when<F extends URIS>(F: Applicative1<F>): (b: boolean) => (x: Kind<F, void>) => Kind<F, void>;
/**
* The reverse of `when`.
*
* @example
* import { pipe } from 'fp-ts/function'
* import { Predicate } from 'fp-ts/Predicate'
* import { unless } from 'fp-ts-std/Applicative'
* import * as IO from 'fp-ts/IO'
* import * as IOE from 'fp-ts/IOEither'
* import { log } from 'fp-ts/Console'
*
* const isValid: Predicate<number> = n => n === 42
*
* pipe(
* IOE.of(123),
* IOE.chainFirstIOK(n =>
* unless(IO.Applicative)(isValid(n))(log(n))),
* )
*
* @category 2 Typeclass Methods
* @since 0.12.0
*/
export declare function unless<F extends URIS4>(F: Applicative4<F>): (b: boolean) => <S, R, E>(x: Kind4<F, S, R, E, void>) => Kind4<F, S, R, E, void>;
export declare function unless<F extends URIS3>(F: Applicative3<F>): (b: boolean) => <R, E>(x: Kind3<F, R, E, void>) => Kind3<F, R, E, void>;
export declare function unless<F extends URIS3, E>(F: Applicative3C<F, E>): (b: boolean) => <R>(x: Kind3<F, R, E, void>) => Kind3<F, R, E, void>;
export declare function unless<F extends URIS2>(F: Applicative2<F>): (b: boolean) => <E>(x: Kind2<F, E, void>) => Kind2<F, E, void>;
export declare function unless<F extends URIS2, E>(F: Applicative2C<F, E>): (b: boolean) => (x: Kind2<F, E, void>) => Kind2<F, E, void>;
export declare function unless<F extends URIS>(F: Applicative1<F>): (b: boolean) => (x: Kind<F, void>) => Kind<F, void>;
/**
* Convenient alias for `F.of(undefined)`.
*
* @example
* import { pipe, constant } from 'fp-ts/function'
* import { pass } from 'fp-ts-std/Applicative'
* import * as O from 'fp-ts/Option'
* import Option = O.Option
* import { IO, Applicative } from 'fp-ts/IO'
* import { log } from 'fp-ts/Console'
*
* const mcount: Option<number> = O.some(123)
*
* const logCount: IO<void> = pipe(
* mcount,
* O.match(
* constant(pass(Applicative)),
* log,
* ),
* )
*
* @category 2 Typeclass Methods
* @since 0.17.0
*/
export declare function pass<F extends URIS4, S = never, R = never, E = never>(F: Applicative4<F>): Kind4<F, S, R, E, void>;
export declare function pass<F extends URIS3, R = never, E = never>(F: Applicative3<F>): Kind3<F, R, E, void>;
export declare function pass<F extends URIS2, E = never>(F: Applicative2<F>): Kind2<F, E, void>;
export declare function pass<F extends URIS>(F: Applicative1<F>): Kind<F, void>;
//# sourceMappingURL=Applicative.d.ts.map