Play with Effect
Core functions available to create and transform effects
Module
// pure value
export function pure<A>(a: A): Effect<NoEnv, NoErr, A>
// create an errored effect
export function raised<E, A = never>(e: Cause<E>): Effect<NoEnv, E, A>
// raise an error (like "throw")
export function raiseError<E, A = never>(e: E): Effect<NoEnv, E, A>
// raise an abort reason (unknown error)
export function raiseAbort(u: unknown): Effect<NoEnv, NoErr, never>
// raise an interruption signal in the execution fiber
export const raiseInterrupt: Effect<NoEnv, NoErr, never>
// create a completed effect with the same exit as the one provided
export function completed<E, A>(exit: Exit<E, A>): Effect<NoEnv, E, A>
// suspend execution of the thunk (give space for interrupt)
export function suspended<R, E, A>(
thunk: Lazy<Effect<R, E, A>>
): Effect<R, E, A>
// encase a sync computation
export function sync<E = NoErr, A = unknown>(
thunk: Lazy<A>
): Effect<NoEnv, E, A>
// try a sync computation
export function trySync<E = unknown, A = unknown>(
thunk: Lazy<A>
): Effect<NoEnv, E, A>
// try a sync computation mapping the catched exception
export function trySyncMap<E = unknown>(
onError: (e: unknown) => E
): <A = unknown>(thunk: Lazy<A>) => Effect<NoEnv, E, A>
// wrap an async callback into an effect, op return Lazy is triggered
// on cancel
// type AsyncContFn<E, A> = F.FunctionN<[Ei.Either<E, A>], void>;
// type AsyncCancelContFn = F.FunctionN<[(error?: Error) => void], void>;
// type AsyncFn<E, A> = F.FunctionN<[AsyncContFn<E, A>], AsyncCancelContFn>;
export function async<E, A>(op: AsyncFn<E, A>): Effect<NoEnv, E, A>
// wrap an async callback into an effect that cannot fail
export function asyncTotal<A>(
op: FunctionN<[FunctionN<[A], void>], Lazy<void>>
): Effect<NoEnv, NoErr, A>
// denote a region (interruptible or not)
export function interruptibleRegion<R, E, A>(
inner: Effect<R, E, A>,
flag: boolean
): Effect<R, E, A>
// encase an either into an effect
export function encaseEither<E, A>(e: Either<E, A>): Effect<NoEnv, E, A>
// encase an option into an effect
export function encaseOption<E, A>(
o: Option<A>,
onError: Lazy<E>
): Effect<NoEnv, E, A>
// encase nullable pure value
export function fromNullableM<R, E, A>(
ma: Effect<R, E, A>
): Effect<R, E, Option<A>>
// encase promise
export function fromPromise<A>(
thunk: Lazy<Promise<A>>
): Effect<NoEnv, unknown, A>
// encase promise mapping error
export function fromPromiseMap<E>(
onError: (e: unknown) => E
): <A>(thunk: Lazy<Promise<A>>) => Effect<NoEnv, E, A>
// fold an effect handling success and failure
export function foldExit<E1, RF, E2, A1, E3, A2, RS>(
failure: FunctionN<[Cause<E1>], Effect<RF, E2, A2>>,
success: FunctionN<[A1], Effect<RS, E3, A2>>
): <R>(io: Effect<R, E1, A1>) => Effect<RF & RS & R, E2 | E3, A2>
// list a function into an effect
export function lift<A, B>(
f: FunctionN<[A], B>
): <R, E>(io: Effect<R, E, A>) => Effect<R, E, B>
// map to constant
export function as<R, E, A, B>(io: Effect<R, E, A>, b: B): Effect<R, E, B>
export function to<B>(b: B): <R, E, A>(io: Effect<R, E, A>) => Effect<R, E, B>
// chain without changing outout
export function chainTap<R, E, A>(
bind: FunctionN<[A], Effect<R, E, unknown>>
): <R2, E2>(inner: Effect<R2, E2, A>) => Effect<R & R2, E | E2, A>
// as unit
export function asUnit<R, E, A>(io: Effect<R, E, A>): Effect<R, E, void>
// unit
export const unit: Effect<NoEnv, NoErr, void>
// handle raised error
export function chainError<R, E1, E2, A>(
f: FunctionN<[E1], Effect<R, E2, A>>
): <R2>(rio: Effect<R2, E1, A>) => Effect<R & R2, E2, A>
// map raised error
export function mapError<E1, E2>(
f: FunctionN<[E1], E2>
): <R, A>(io: Effect<R, E1, A>) => Effect<R, E2, A>
// zip two effects with a function
export function zipWith<R, E, A, R2, E2, B, C>(
first: Effect<R, E, A>,
second: Effect<R2, E2, B>,
f: FunctionN<[A, B], C>
): Effect<R & R2, E | E2, C>
// zip with identity
export function zip<R, E, A, R2, E2, B>(
first: Effect<R, E, A>,
second: Effect<R2, E2, B>
): Effect<R & R2, E | E2, readonly [A, B]>
// zip with first
export function applyFirst<R, E, A, R2, E2, B>(
first: Effect<R, E, A>,
second: Effect<R2, E2, B>
): Effect<R & R2, E | E2, A>
// zip with second
export function applySecond<R, E, A, R2, E2, B>(
first: Effect<R, E, A>,
second: Effect<R2, E2, B>
): Effect<R & R2, E | E2, B>
// zip with second lazy
export function applySecondL<R, E, A, R2, E2, B>(
first: Effect<R, E, A>,
second: Lazy<Effect<R2, E2, B>>
): Effect<R & R2, E | E2, B>
// flipped apply
export function ap__<R, E, A, R2, E2, B>(
ioa: Effect<R, E, A>,
iof: Effect<R2, E2, FunctionN<[A], B>>
): Effect<R & R2, E | E2, B>
// parallel zip equivalents
export function parZipWith<R, R2, E, E2, A, B, C>(
ioa: Effect<R, E, A>,
iob: Effect<R2, E2, B>,
f: FunctionN<[A, B], C>
): Effect<R & R2, E | E2, C>
export function parZip<R, R2, E, A, B>(
ioa: Effect<R, E, A>,
iob: Effect<R2, E, B>
): Effect<R & R2, E, readonly [A, B]>
export function parApplyFirst<R, R2, E, A, B>(
ioa: Effect<R, E, A>,
iob: Effect<R2, E, B>
): Effect<R & R2, E, A>
export function parApplySecond<R, R2, E, A, B>(
ioa: Effect<R, E, A>,
iob: Effect<R2, E, B>
): Effect<R & R2, E, B>
export function parAp<R, R2, E, A, B>(
ioa: Effect<R, E, A>,
iof: Effect<R2, E, FunctionN<[A], B>>
): Effect<R & R2, E, B>
export function parAp_<R, R2, E, E2, A, B>(
iof: Effect<R, E, FunctionN<[A], B>>,
ioa: Effect<R2, E2, A>
): Effect<R & R2, E | E2, B>
// flip A and E
export function flip<R, E, A>(io: Effect<R, E, A>): Effect<R, A, E>
// execute forever or until failure
export function forever<R, E, A>(io: Effect<R, E, A>): Effect<R, E, A>
// get the result of executing io
export function result<R, E, A>(
io: Effect<R, E, A>
): Effect<R, NoErr, Exit<E, A>>
// make io interruptible
export function interruptible<R, E, A>(io: Effect<R, E, A>): Effect<R, E, A>
// make io non interruptible
export function uninterruptible<R, E, A>(io: Effect<R, E, A>): Effect<R, E, A>
// bracket with full exit control
export function bracketExit<R, E, A, B, R2, E2, R3, E3>(
acquire: Effect<R, E, A>,
release: FunctionN<[A, Exit<E | E3, B>], Effect<R2, E2, unknown>>,
use: FunctionN<[A], Effect<R3, E3, B>>
): Effect<R & R2 & R3, E | E2 | E3, B>
// bracket not dealing with use result
export function bracket<R, E, A, R2, E2, R3, E3, B>(
acquire: Effect<R, E, A>,
release: FunctionN<[A], Effect<R2, E2, unknown>>,
use: FunctionN<[A], Effect<R3, E3, B>>
): Effect<R & R2 & R3, E | E2 | E3, B>
// run finalizer on complete
export function onComplete<R, E, A, R2, E2>(
ioa: Effect<R, E, A>,
finalizer: Effect<R2, E2, unknown>
): Effect<R & R2, E | E2, A>Usage
Basic usage, detailed examples will be presented in the following sections
Last updated
Was this helpful?