Hyperlinkv0.8.0-beta.28

FiberSet

FiberSet.runconsteffect/FiberSet.ts:459
<A, E>(
  self: FiberSet<A, E>,
  options?:
    | {
        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, E, R, XE extends E, XA extends A>(
  self: FiberSet<A, E>,
  effect: Effect.Effect<XA, XE, R>,
  options?:
    | {
        readonly propagateInterruption?: boolean | undefined
        readonly startImmediately?: boolean | undefined
      }
    | undefined
): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>

Forks an Effect and add the forked fiber to the FiberSet. When the fiber completes, it will be removed from the FiberSet.

Example (Forking effects into a set)

import { Effect, Fiber, FiberSet } from "effect"

const program = Effect.gen(function*() {
  const set = yield* FiberSet.make()

  // Fork and add to set
  const fiber1 = yield* FiberSet.run(set, Effect.succeed("hello"))
  const fiber2 = yield* FiberSet.run(set, Effect.succeed("world"))

  // Get results
  const result1 = yield* Fiber.await(fiber1)
  const result2 = yield* Fiber.await(fiber2)

  console.log(result1, result2) // "hello" "world"
})
combinators
Source effect/FiberSet.ts:45926 lines
export const run: {
  <A, E>(
    self: FiberSet<A, E>,
    options?: {
      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, E, R, XE extends E, XA extends A>(
    self: FiberSet<A, E>,
    effect: Effect.Effect<XA, XE, R>,
    options?: {
      readonly propagateInterruption?: boolean | undefined
      readonly startImmediately?: boolean | undefined
    } | undefined
  ): Effect.Effect<Fiber.Fiber<XA, XE>, never, R>
} = function() {
  const self = arguments[0] as FiberSet<any, any>
  if (!Effect.isEffect(arguments[1])) {
    const options = arguments[1]
    return (effect: Effect.Effect<any, any, any>) => runImpl(self, effect, options)
  }
  return runImpl(self, arguments[1], arguments[2]) as any
}