@effect-ts/system
Version:
Effect-TS is a zero dependency set of libraries to write highly productive, purely functional TypeScript at scale.
55 lines (51 loc) • 1.69 kB
text/typescript
// ets_tracing: off
import * as P from "../../../../Promise/index.js"
import type * as C from "../core.js"
import * as InterruptWhen from "./interruptWhen.js"
/**
* Returns a new channel, which is the same as this one, except it will be interrupted when the
* specified promise is completed. If the promise is completed before the underlying channel is
* done, then the returned channel will yield the value of the promise. Otherwise, if the
* underlying channel finishes first, then the returned channel will yield the value of the
* underlying channel.
*/
export function interruptWhenP_<
Env,
InErr,
InElem,
InDone,
OutErr,
OutErr1,
OutElem,
OutDone,
OutDone1
>(
self: C.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>,
promise: P.Promise<OutErr1, OutDone1>
): C.Channel<
Env,
InErr,
InElem,
InDone,
OutErr | OutErr1,
OutElem,
OutDone | OutDone1
> {
return InterruptWhen.interruptWhen_(self, P.await(promise))
}
/**
* Returns a new channel, which is the same as this one, except it will be interrupted when the
* specified promise is completed. If the promise is completed before the underlying channel is
* done, then the returned channel will yield the value of the promise. Otherwise, if the
* underlying channel finishes first, then the returned channel will yield the value of the
* underlying channel.
*
* @ets_data_first interruptWhenP_
*/
export function interruptWhenP<OutErr1, OutDone1>(
promise: P.Promise<OutErr1, OutDone1>
) {
return <Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>(
self: C.Channel<Env, InErr, InElem, InDone, OutErr, OutElem, OutDone>
) => interruptWhenP_(self, promise)
}