Skip to content

RcRef

9 exports Added in v3.5.0 Source

Combinators

get

Added in v3.5.0 Source

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

make

Added in v3.5.0 Source

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

RcRef

Added in v3.5.0 Source

RcRef interface

Added in v3.5.0 Source

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;
}

Type Ids

TypeId

Added in v3.5.0 Source

Signature

declare const TypeId: unique symbol;

TypeId type

Added in v3.5.0 Source

Signature

type TypeId = typeof TypeId;