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
Create an RcRef from an acquire Effect.
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 get and released when
the last reference is released.
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;}