@effect-ts/system
Version:
Effect-TS is a zero dependency set of libraries to write highly productive, purely functional TypeScript at scale.
30 lines (27 loc) • 932 B
text/typescript
// ets_tracing: off
import * as Tp from "../../../../Collections/Immutable/Tuple/index.js"
import * as T from "../../../../Effect/index.js"
import type * as M from "../../../../Managed/index.js"
import * as ReleaseMap from "../../../../Managed/ReleaseMap/index.js"
import * as C from "../core.js"
import * as MapOut from "./mapOut.js"
/**
* Use a managed to emit an output element
*/
export function managedOut<R, E, A>(
self: M.Managed<R, E, A>
): C.Channel<R, unknown, unknown, unknown, E, A, unknown> {
return MapOut.mapOut_(
C.acquireReleaseOutExitWith_(
T.chain_(ReleaseMap.makeReleaseMap, (releaseMap) =>
T.map_(
T.provideSome_(self.effect, (_: R) => Tp.tuple(_, releaseMap)),
({ tuple: [_, out] }) => Tp.tuple(out, releaseMap)
)
),
({ tuple: [_, releaseMap] }, exit) =>
ReleaseMap.releaseAll(exit, T.sequential)(releaseMap)
),
Tp.get(0)
)
}