bracket<ENV, A, B> function

ReaderTask<ENV, B> Function(ReaderTask<ENV, A> ) bracket<ENV, A, B>({
  1. required ReaderTask<ENV, void> release(
    1. A
    ),
  2. required ReaderTask<ENV, B> use(
    1. A
    ),
})

Implementation

ReaderTask<ENV, B> Function(ReaderTask<ENV, A>) bracket<ENV, A, B>({
  required ReaderTask<ENV, void> Function(A) release,
  required ReaderTask<ENV, B> Function(A) use,
}) =>
    (acquire) => (env) {
          final acquireF = acquire(env);
          return () async {
            final resource = await acquireF();
            try {
              return use(resource)(env)();
            } finally {
              await release(resource)(env)();
            }
          };
        };