Skip to content

Resource

Resource<E, A> = object

Defined in: Core/Resource.ts:34

A Resource pairs an async acquisition step with a guaranteed cleanup step.

Use it whenever something must be explicitly closed, released, or torn down after you are done with it — database connections, file handles, locks, temporary directories, or any object with a lifecycle.

The key guarantee: release always runs after Resource.use, even when the work function returns an error. If acquire itself fails, release is skipped — there is nothing to clean up.

Build a Resource with Resource.make or Resource.fromTask, then run it with Resource.use.

const dbResource = Resource.make(
  TaskResult.tryCatch(() => openConnection(config), (e) => new DbError(e)),
  (conn) => Task.from(() => conn.close())
);

const result = await pipe(
  dbResource,
  Resource.use((conn) => queryUser(conn, userId))
)();
// conn.close() is called whether queryUser succeeds or fails

E

A

readonly acquire: TaskResult<E, A>

Defined in: Core/Resource.ts:35


readonly release: (a) => Task<void>

Defined in: Core/Resource.ts:36

A

Task<void>