Hyperlinkv0.8.0-beta.28

FiberHandle

FiberHandle.clearconsteffect/FiberHandle.ts:499
<A, E>(self: FiberHandle<A, E>): Effect.Effect<void>

Interrupts the fiber currently stored in the FiberHandle, if any, and leaves the handle empty.

Example (Clearing a fiber handle)

import { Effect, FiberHandle } from "effect"

Effect.gen(function*() {
  const handle = yield* FiberHandle.make()

  // Add a fiber
  yield* FiberHandle.run(handle, Effect.never)

  // Clear the handle, interrupting the fiber
  yield* FiberHandle.clear(handle)

  // The handle is now empty
  const fiber = FiberHandle.getUnsafe(handle)
  console.log(fiber) // Option.none()
})
combinators
export const clear = <A, E>(self: FiberHandle<A, E>): Effect.Effect<void> =>
  Effect.uninterruptibleMask((restore) => {
    if (self.state._tag === "Closed" || self.state.fiber === undefined) {
      return Effect.void
    }
    return Effect.andThen(
      restore(Fiber.interruptAs(self.state.fiber, internalFiberId)),
      Effect.sync(() => {
        if (self.state._tag === "Open") {
          self.state.fiber = undefined
        }
      })
    )
  })