/** * Ensures that a cleanup functions runs, whether this effect succeeds, fails, * or is interrupted. * * @tsplus static effect/core/io/Effect.Aspects onExit * @tsplus pipeable effect/core/io/Effect onExit */ export function onExit( cleanup: (exit: Exit) => Effect ) { return (self: Effect): Effect => Effect.acquireUseReleaseExit( Effect.unit, () => self, (_, exit) => cleanup(exit) ) }