( f: (release: Effect.Effect<void>) => Effect.Effect<A, E, R> )
| 4 | import * as Ref from "effect/Ref" |
| 5 | |
| 6 | export const withLatch = <A, E, R>( |
| 7 | f: (release: Effect.Effect<void>) => Effect.Effect<A, E, R> |
| 8 | ): Effect.Effect<A, E, R> => { |
| 9 | return pipe( |
| 10 | Deferred.make<void>(), |
| 11 | Effect.flatMap((latch) => |
| 12 | pipe(f(pipe(Deferred.succeed(latch, void 0), Effect.asVoid)), Effect.zipLeft(Deferred.await(latch))) |
| 13 | ) |
| 14 | ) |
| 15 | } |
| 16 | |
| 17 | export const withLatchAwait = <A, E, R>( |
| 18 | f: (release: Effect.Effect<void>, wait: Effect.Effect<void>) => Effect.Effect<A, E, R> |