Skip to main content Link Search Menu Expand Document (external link)

RcMap.ts overview

Since v3.5.0


Exports Grouped by Category


combinators

get

Signature

declare const get: {
  <K>(key: K): <A, E>(self: RcMap<K, A, E>) => Effect.Effect<A, E, Scope.Scope>
  <K, A, E>(self: RcMap<K, A, E>, key: K): Effect.Effect<A, E, Scope.Scope>
}

Source

Since v3.5.0

invalidate

Signature

declare const invalidate: {
  <K>(key: K): <A, E>(self: RcMap<K, A, E>) => Effect.Effect<void>
  <K, A, E>(self: RcMap<K, A, E>, key: K): Effect.Effect<void>
}

Source

Since v3.13.0

keys

Signature

declare const keys: <K, A, E>(self: RcMap<K, A, E>) => Effect.Effect<Array<K>, E>

Source

Since v3.8.0

touch

Signature

declare const touch: {
  <K>(key: K): <A, E>(self: RcMap<K, A, E>) => Effect.Effect<void>
  <K, A, E>(self: RcMap<K, A, E>, key: K): Effect.Effect<void>
}

Source

Since v3.13.0

models

RcMap (interface)

Signature

export interface RcMap<in K, out A, out E = never> extends Pipeable {
  readonly [TypeId]: RcMap.Variance<K, A, E>
}

Source

Since v3.5.0

RcMap (namespace)

Source

Since v3.5.0

Variance (interface)

Signature

export interface Variance<K, A, E> {
  readonly _K: Types.Contravariant<K>
  readonly _A: Types.Covariant<A>
  readonly _E: Types.Covariant<E>
}

Source

Since v3.5.0

make

An RcMap can contain multiple reference counted resources that can be indexed by a key. The resources are lazily acquired on the first call to get and released when the last reference is released.

Complex keys can extend Equal and Hash to allow lookups by value.

Options

  • capacity: The maximum number of resources that can be held in the map.
  • idleTimeToLive: When the reference count reaches zero, the resource will be released after this duration.

Example

import { Effect, RcMap } from "effect"

Effect.gen(function* () {
  const map = yield* RcMap.make({
    lookup: (key: string) =>
      Effect.acquireRelease(Effect.succeed(`acquired ${key}`), () => Effect.log(`releasing ${key}`))
  })

  // Get "foo" from the map twice, which will only acquire it once.
  // It will then be released once the scope closes.
  yield* RcMap.get(map, "foo").pipe(Effect.andThen(RcMap.get(map, "foo")), Effect.scoped)
})

Signature

declare const make: {
  <K, A, E, R>(options: {
    readonly lookup: (key: K) => Effect.Effect<A, E, R>
    readonly idleTimeToLive?: Duration.DurationInput | undefined
    readonly capacity?: undefined
  }): Effect.Effect<RcMap<K, A, E>, never, Scope.Scope | R>
  <K, A, E, R>(options: {
    readonly lookup: (key: K) => Effect.Effect<A, E, R>
    readonly idleTimeToLive?: Duration.DurationInput | undefined
    readonly capacity: number
  }): Effect.Effect<RcMap<K, A, E | Cause.ExceededCapacityException>, never, Scope.Scope | R>
}

Source

Since v3.5.0

type ids

TypeId

Signature

declare const TypeId: unique symbol

Source

Since v3.5.0

TypeId (type alias)

Signature

type TypeId = typeof TypeId

Source

Since v3.5.0