<K, A, E>(
self: FiberMap<K, A, E>,
key: K,
options?:
| {
readonly onlyIfMissing?: boolean | undefined
readonly propagateInterruption?: boolean | undefined
readonly startImmediately?: boolean | undefined
}
| undefined
): <R, XE extends E, XA extends A>(
effect: Effect.Effect<XA, XE, R>
) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
<K, A, E, R, XE extends E, XA extends A>(
self: FiberMap<K, A, E>,
key: K,
effect: Effect.Effect<XA, XE, R>,
options?:
| {
readonly onlyIfMissing?: boolean | undefined
readonly propagateInterruption?: boolean | undefined
readonly startImmediately?: boolean | undefined
}
| undefined
): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>Forks an Effect and stores the resulting fiber in the FiberMap under a key.
Details
When the fiber completes, it is removed from the map. If the key already has
a fiber, the previous fiber is interrupted unless onlyIfMissing is set.
Example (Forking effects into a map)
import { Effect, Fiber, FiberMap } from "effect"
const program = Effect.gen(function*() {
const map = yield* FiberMap.make<string>()
// Run effects and add the fibers to the map
const fiber1 = yield* FiberMap.run(map, "task1", Effect.succeed("Hello"))
const fiber2 = yield* FiberMap.run(map, "task2", Effect.succeed("World"))
// Join the fibers to get their successful values
const result1 = yield* Fiber.join(fiber1)
const result2 = yield* Fiber.join(fiber2)
console.log(result1, result2) // "Hello", "World"
console.log(yield* FiberMap.size(map)) // 0 (fibers are removed after completion)
})export const const run: {
<K, A, E>(
self: FiberMap<K, A, E>,
key: K,
options?:
| {
readonly onlyIfMissing?:
| boolean
| undefined
readonly propagateInterruption?:
| boolean
| undefined
readonly startImmediately?:
| boolean
| undefined
}
| undefined
): <R, XE extends E, XA extends A>(
effect: Effect.Effect<XA, XE, R>
) => Effect.Effect<
Fiber.Fiber<XA, XE>,
never,
R
>
<K, A, E, R, XE extends E, XA extends A>(
self: FiberMap<K, A, E>,
key: K,
effect: Effect.Effect<XA, XE, R>,
options?:
| {
readonly onlyIfMissing?:
| boolean
| undefined
readonly propagateInterruption?:
| boolean
| undefined
readonly startImmediately?:
| boolean
| undefined
}
| undefined
): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
}
Forks an Effect and stores the resulting fiber in the FiberMap under a key.
Details
When the fiber completes, it is removed from the map. If the key already has
a fiber, the previous fiber is interrupted unless onlyIfMissing is set.
Example (Forking effects into a map)
import { Effect, Fiber, FiberMap } from "effect"
const program = Effect.gen(function*() {
const map = yield* FiberMap.make<string>()
// Run effects and add the fibers to the map
const fiber1 = yield* FiberMap.run(map, "task1", Effect.succeed("Hello"))
const fiber2 = yield* FiberMap.run(map, "task2", Effect.succeed("World"))
// Join the fibers to get their successful values
const result1 = yield* Fiber.join(fiber1)
const result2 = yield* Fiber.join(fiber2)
console.log(result1, result2) // "Hello", "World"
console.log(yield* FiberMap.size(map)) // 0 (fibers are removed after completion)
})
run: {
<function (type parameter) K in <K, A, E>(self: FiberMap<K, A, E>, key: K, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
K, function (type parameter) A in <K, A, E>(self: FiberMap<K, A, E>, key: K, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
A, function (type parameter) E in <K, A, E>(self: FiberMap<K, A, E>, key: K, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
E>(
self: FiberMap<K, A, E>(parameter) self: {
deferred: Deferred.Deferred<void, unknown>;
state: { readonly _tag: "Open"; readonly backing: MutableHashMap.MutableHashMap<K, Fiber.Fiber<A, E>> } | { readonly _tag: "Closed" };
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
self: interface FiberMap<in out K, out A = unknown, out E = unknown>A FiberMap is a collection of fibers, indexed by a key. When the associated
Scope is closed, all fibers in the map will be interrupted. Fibers are
automatically removed from the map when they complete.
Example (Managing fibers in a map)
import { Effect, FiberMap } from "effect"
// Create a FiberMap with string keys
const program = Effect.gen(function*() {
const map = yield* FiberMap.make<string>()
// Add some fibers to the map
yield* FiberMap.run(map, "task1", Effect.never)
yield* FiberMap.run(map, "task2", Effect.never)
// Get the size of the map
const size = yield* FiberMap.size(map)
console.log(size) // 2
})
FiberMap<function (type parameter) K in <K, A, E>(self: FiberMap<K, A, E>, key: K, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
K, function (type parameter) A in <K, A, E>(self: FiberMap<K, A, E>, key: K, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
A, function (type parameter) E in <K, A, E>(self: FiberMap<K, A, E>, key: K, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
E>,
key: Kkey: function (type parameter) K in <K, A, E>(self: FiberMap<K, A, E>, key: K, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
K,
options: | {
readonly onlyIfMissing?: boolean | undefined
readonly propagateInterruption?:
| boolean
| undefined
readonly startImmediately?:
| boolean
| undefined
}
| undefined
options?: {
readonly onlyIfMissing?: boolean | undefinedonlyIfMissing?: boolean | undefined
readonly propagateInterruption?: boolean | undefinedpropagateInterruption?: boolean | undefined
readonly startImmediately?: boolean | undefinedstartImmediately?: boolean | undefined
} | undefined
): <function (type parameter) R in <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>R, function (type parameter) XE in <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>XE extends function (type parameter) E in <K, A, E>(self: FiberMap<K, A, E>, key: K, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
E, function (type parameter) XA in <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>XA extends function (type parameter) A in <K, A, E>(self: FiberMap<K, A, E>, key: K, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
A>(
effect: Effect.Effect<XA, XE, R>(parameter) effect: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
effect: import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) XA in <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>XA, function (type parameter) XE in <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>XE, function (type parameter) R in <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>R>
) => import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<import FiberFiber.type Fiber.Fiber = /*unresolved*/ anyFiber<function (type parameter) XA in <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>XA, function (type parameter) XE in <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>XE>, never, function (type parameter) R in <R, XE extends E, XA extends A>(effect: Effect.Effect<XA, XE, R>): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>R>
<function (type parameter) K in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
K, function (type parameter) A in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
A, function (type parameter) E in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
E, function (type parameter) R in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
R, function (type parameter) XE in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
XE extends function (type parameter) E in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
E, function (type parameter) XA in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
XA extends function (type parameter) A in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
A>(
self: FiberMap<K, A, E>(parameter) self: {
deferred: Deferred.Deferred<void, unknown>;
state: { readonly _tag: "Open"; readonly backing: MutableHashMap.MutableHashMap<K, Fiber.Fiber<A, E>> } | { readonly _tag: "Closed" };
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
self: interface FiberMap<in out K, out A = unknown, out E = unknown>A FiberMap is a collection of fibers, indexed by a key. When the associated
Scope is closed, all fibers in the map will be interrupted. Fibers are
automatically removed from the map when they complete.
Example (Managing fibers in a map)
import { Effect, FiberMap } from "effect"
// Create a FiberMap with string keys
const program = Effect.gen(function*() {
const map = yield* FiberMap.make<string>()
// Add some fibers to the map
yield* FiberMap.run(map, "task1", Effect.never)
yield* FiberMap.run(map, "task2", Effect.never)
// Get the size of the map
const size = yield* FiberMap.size(map)
console.log(size) // 2
})
FiberMap<function (type parameter) K in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
K, function (type parameter) A in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
A, function (type parameter) E in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
E>,
key: Kkey: function (type parameter) K in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
K,
effect: Effect.Effect<XA, XE, R>(parameter) effect: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
effect: import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<function (type parameter) XA in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
XA, function (type parameter) XE in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
XE, function (type parameter) R in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
R>,
options: | {
readonly onlyIfMissing?: boolean | undefined
readonly propagateInterruption?:
| boolean
| undefined
readonly startImmediately?:
| boolean
| undefined
}
| undefined
options?: {
readonly onlyIfMissing?: boolean | undefinedonlyIfMissing?: boolean | undefined
readonly propagateInterruption?: boolean | undefinedpropagateInterruption?: boolean | undefined
readonly startImmediately?: boolean | undefinedstartImmediately?: boolean | undefined
} | undefined
): import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<import FiberFiber.type Fiber.Fiber = /*unresolved*/ anyFiber<function (type parameter) XA in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
XA, function (type parameter) XE in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
XE>, never, function (type parameter) R in <K, A, E, R, XE extends E, XA extends A>(self: FiberMap<K, A, E>, key: K, effect: Effect.Effect<XA, XE, R>, options?: {
readonly onlyIfMissing?: boolean | undefined;
readonly propagateInterruption?: boolean | undefined;
readonly startImmediately?: boolean | undefined;
} | undefined): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
R>
} = function() {
const const self: anyself = function (local var) arguments: IArgumentsarguments[0]
if (import EffectEffect.isEffect(function (local var) arguments: IArgumentsarguments[2])) {
return const runImpl: <
K,
A,
E,
R,
XE extends E,
XA extends A
>(
self: FiberMap<K, A, E>,
key: K,
effect: Effect.Effect<XA, XE, R>,
options?: {
readonly onlyIfMissing?: boolean
readonly propagateInterruption?:
| boolean
| undefined
}
) => Effect.Effect<
Fiber.Fiber<XA, XE>,
never,
never
>
runImpl(const self: anyself, function (local var) arguments: IArgumentsarguments[1], function (local var) arguments: IArgumentsarguments[2], function (local var) arguments: IArgumentsarguments[3]) as any
}
const const key: anykey = function (local var) arguments: IArgumentsarguments[1]
const const options: anyoptions = function (local var) arguments: IArgumentsarguments[2]
return (effect: Effect.Effect<any, any, any>(parameter) effect: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
effect: import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<any, any, any>) => const runImpl: <
K,
A,
E,
R,
XE extends E,
XA extends A
>(
self: FiberMap<K, A, E>,
key: K,
effect: Effect.Effect<XA, XE, R>,
options?: {
readonly onlyIfMissing?: boolean
readonly propagateInterruption?:
| boolean
| undefined
}
) => Effect.Effect<
Fiber.Fiber<XA, XE>,
never,
never
>
runImpl(const self: anyself, const key: anykey, effect: Effect.Effect<any, any, any>(parameter) effect: {
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
effect, const options: anyoptions)
}