Resource
Stores refreshable scoped values.
A Resource<A, E> keeps the latest successful or failed acquisition result. It can be read repeatedly, refreshed manually, or refreshed automatically on a schedule. Resource acquisition runs in a scope, so replacements and final cleanup release the resources owned by previous values.
Constructors
Signature
declare function auto<A, E, R, Out, E2, R2>(
acquire: Effect<A, E, R>,
policy: Schedule<Out, unknown, E2, R2>,
): Effect<Resource<A, E>, never, Scope | R | R2>;Creates a Resource that must be refreshed manually.
When to use
Use when you need manual control over resource refresh timing rather than an automatic schedule.
See
Signature
declare function manual<A, E, R>(
acquire: Effect<A, E, R>,
): Effect<Resource<A, E>, never, Scope | R>;Getters
Retrieves the current value stored in this resource.
When to use
Use to read the value currently cached by a Resource.
Gotchas
If the resource currently stores a failed acquisition result, the returned effect fails with the stored error.
See
refreshto re-run acquisition and update the stored value before a later read
Signature
declare function get<A, E>(self: Resource<A, E>): Effect<A, E>;Guards
isResource
Returns true if the specified value is a Resource.
When to use
Use to validate unknown values at runtime boundaries before treating them as Resource values.
Details
This predicate narrows the input to Resource<unknown, unknown>.
Signature
declare const isResource: (u: unknown) => u is Resource<unknown, unknown>;Models
A Resource is a value loaded into memory that can be refreshed manually or automatically according to a schedule.
When to use
Use to model a scoped value whose latest acquisition result is kept available for repeated reads and can be refreshed manually or on a schedule.
See
Signature
interface Resource<in out A, in out E = never> extends Pipeable {
readonly "~effect/Resource": "~effect/Resource";
readonly acquire: Effect<A, E>;
readonly scopedRef: ScopedRef<Exit<A, E>>;
}Resource Management
Re-runs this resource's acquisition effect and updates the current value.
When to use
Use to force an existing Resource to reacquire its value at a caller-controlled point.
Details
When acquisition succeeds, refreshing replaces the value stored in the resource's scoped reference and releases resources associated with the previous value.
Gotchas
If acquisition fails, the returned effect fails and the previously stored result is left as what get reads.
See
Signature
declare function refresh<A, E>(self: Resource<A, E>): Effect<void, E>;
Creates a
Resourcethat refreshes automatically according to the supplied schedule.When to use
Use when a resource should refresh in the background according to a schedule for the lifetime of its scope.
See
manualfor caller-controlled refresh timingrefreshto trigger a refresh explicitly