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>
}
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>
}
Since v3.13.0
keys
Signature
declare const keys: <K, A, E>(self: RcMap<K, A, E>) => Effect.Effect<Array<K>, E>
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>
}
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>
}
Since v3.5.0
RcMap (namespace)
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>
}
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>
}
Since v3.5.0
type ids
TypeId
Signature
declare const TypeId: unique symbol
Since v3.5.0
TypeId (type alias)
Signature
type TypeId = typeof TypeId
Since v3.5.0