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