RcRef
Combinators
Signature
declare const get: <A, E>(self: RcRef<A, E>) => Effect.Effect<A, E, Scope.Scope>;invalidate
Added in v3.19.6
Source
Signature
declare const invalidate: <A, E>(self: RcRef<A, E>) => Effect.Effect<void>;Constructors
Signature
declare const make: <A, E, R>(options: {
readonly acquire: Effect.Effect<A, E, R>;
readonly idleTimeToLive?: Duration.DurationInput;
}) => Effect.Effect<RcRef<A, E>, never, R | Scope.Scope>;Example
import { Effect, RcRef } from "effect"
Effect.gen(function* () {
const ref = yield* RcRef.make({
acquire: Effect.acquireRelease(Effect.succeed("foo"), () => Effect.log("release foo")),
})
// will only acquire the resource once, and release it
// when the scope is closed
yield* RcRef.get(ref).pipe(Effect.andThen(RcRef.get(ref)), Effect.scoped)
})Models
Signature
interface RcRef<out A, out E = never>
extends Effect<A, E, Scope.Scope>, Readable<A, E, Scope.Scope> {
readonly [ignoreSymbol]?: RcRefUnifyIgnore;
readonly [TypeId]: Variance<A, E>;
readonly [typeSymbol]?: unknown;
readonly [unifySymbol]?: RcRefUnify<RcRef<A, E>>;
}RcRefUnify interface
Added in v3.8.0
Source
Signature
interface RcRefUnify<
A extends {
[typeSymbol]?: any;
},
> extends EffectUnify<A> {
RcRef?: () => A[typeof typeSymbol] extends RcRef<A0, E0> | _ ? RcRef<A0, E0> : never;
}RcRefUnifyIgnore interface
Added in v3.8.0
Source
Signature
interface RcRefUnifyIgnore extends EffectUnifyIgnore {
Effect?: true;
}
Create an
RcReffrom an acquireEffect.An RcRef wraps a reference counted resource that can be acquired and released multiple times.
The resource is lazily acquired on the first call to
getand released when the last reference is released.