// ets_tracing: off import type * as Tp from "../Collections/Immutable/Tuple/index.js" import type { HasUnify } from "../Utils/index.js" import { unifyIndex } from "../Utils/index.js" import * as T from "./deps-core.js" import type { Finalizer, ReleaseMap } from "./ReleaseMap/index.js" export const ManagedURI = "@matechs/core/Eff/ManagedURI" export type ManagedURI = typeof ManagedURI export interface Managed extends HasUnify { readonly [unifyIndex]: ManagedURI readonly [T._U]: ManagedURI readonly [T._E]: () => E readonly [T._A]: () => A readonly [T._R]: (_: R) => void readonly effect: T.Effect, E, Tp.Tuple<[Finalizer, A]>> } export class ManagedImpl implements Managed { readonly [unifyIndex]: ManagedURI; readonly [T._U]: ManagedURI; readonly [T._E]: () => E; readonly [T._A]: () => A; readonly [T._R]: (_: R) => void constructor( readonly effect: T.Effect, E, Tp.Tuple<[Finalizer, A]>> ) {} } export function managedApply( effect: T.Effect, E, Tp.Tuple<[Finalizer, A]>> ): Managed { return new ManagedImpl(effect) } export type UIO = Managed export type RIO = Managed export type IO = Managed declare module "../Utils" { export interface UnifiableIndexed { [ManagedURI]: [X] extends [Managed] ? Managed : never } }