UNPKG

effect-ts-folds

Version:
51 lines 2.96 kB
import { CofreeTypeLambda, Fix, ProductTypeLambda } from '#fix'; import { Traversable as TA, Traversable } from '@effect/typeclass'; import { IdentityTypeLambda as Id } from '@effect/typeclass/data/Identity'; import { Effect, HKT } from 'effect'; import { DistLeft } from './folds.js'; /** * Same as `Folder` but folds into an `Effect`. * @category fold */ export type EffectFolder<Outer extends HKT.TypeLambda, Inner extends HKT.TypeLambda, A, E1 = unknown, R1 = never, E2 = unknown, R2 = unknown, I2 = never> = (fa: HKT.Kind<Outer, I2, R2, E2, HKT.Kind<Inner, I2, R2, E2, A>>) => Effect.Effect<A, E1, R1>; /** * Same as {@link Algebra} but folds in an effect. A function of the type: * `(fa: F<A, E2, R2, I2>) ⇒ Effect<A, E1, R1>`. * @category fold */ export type EffectAlgebra<F extends HKT.TypeLambda, A, E1 = unknown, R1 = never, E2 = unknown, R2 = unknown, I2 = never> = EffectFolder<F, Id, A, E1, R1, E2, R2, I2>; /** * An {@link RAlgebra} that folds into an effect. A function of the type: * `(fa: F<[Fix<F, E2, R2, I2>, A], E2, R2, I2>) ⇒ Effect<A, E1, R1>`. * @category fold */ export type EffectRAlgebra<F extends HKT.TypeLambda, A, E1 = unknown, R1 = never, E2 = unknown, R2 = unknown, I2 = never> = EffectFolder<F, ProductTypeLambda<F>, A, E1, R1, E2, R2, I2>; /** * A {@link CVAlgebra} that folds into an effect. A function of the type: * `(fa: F<Cofree<F, A, E2, R2, I2>, E2, R2, I2>) ⇒ Effect<A, E1, R1>`. * @category fold */ export type EffectCVAlgebra<F extends HKT.TypeLambda, A, E1 = unknown, R1 = never, E2 = unknown, R2 = unknown, I2 = never> = EffectFolder<F, CofreeTypeLambda<F>, A, E1, R1, E2, R2, I2>; /** * The return type of all schemes that fold into an effect. * @category fold */ export type EffectFold<F extends HKT.TypeLambda, A, E1 = unknown, R1 = never, E2 = unknown, R2 = unknown, I2 = never> = (fixed: Fix<F, E2, R2, I2>) => Effect.Effect<A, E1, R1>; /** * Type of effectful folds with a single carrier type `A`. * @category folds */ export interface UnaryEffectFold<T extends HKT.TypeLambda, F extends HKT.TypeLambda> { <A, E1 = unknown, R1 = never, E2 = unknown, R2 = unknown, I2 = never>(φ: EffectFolder<F, T, A, E1, R1, E2, R2, I2>): EffectFold<F, A, E1, R1, E2, R2, I2>; } export interface CatamorphismE { <F extends HKT.TypeLambda>(F: Traversable.Traversable<F>): UnaryEffectFold<Id, F>; } export interface ParamorphismE { <F extends HKT.TypeLambda>(F: Traversable.Traversable<F>): UnaryEffectFold<ProductTypeLambda<F>, F>; } export interface HistomorphismE { <F extends HKT.TypeLambda>(F: Traversable.Traversable<F>): UnaryEffectFold<CofreeTypeLambda<F>, F>; } export type ZygomorphismE = <F extends HKT.TypeLambda>(F: TA.Traversable<F>) => <A, B, E1 = unknown, R1 = never, E2 = unknown, R2 = unknown, I2 = never>(f: DistLeft<F, A, B, E2, R2, I2>, φ: EffectAlgebra<F, B, E1, R1, E2, R2, I2>) => EffectFold<F, A, E1, R1, E2, R2, I2>; //# sourceMappingURL=effect.d.ts.map