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

RcMap overview

Added in v3.5.0


Table of contents


combinators

get

Signature

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

Added in v3.5.0

keys

Signature

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

Added in v3.8.0

models

RcMap (interface)

Signature

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

Added in v3.5.0

RcMap (namespace)

Added in 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>
}

Added in 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.

Signature

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

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

Added in v3.5.0

type ids

TypeId

Signature

export declare const TypeId: typeof TypeId

Added in v3.5.0

TypeId (type alias)

Signature

export type TypeId = typeof TypeId

Added in v3.5.0