Hyperlinkv0.8.0-beta.28

Console

Console.withGroupconsteffect/Console.ts:584
(options?: {
  readonly label?: string | undefined
  readonly collapsed?: boolean | undefined
}): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
<A, E, R>(
  self: Effect.Effect<A, E, R>,
  options?: {
    readonly label?: string | undefined
    readonly collapsed?: boolean | undefined
  }
): Effect.Effect<A, E, R>

Runs an Effect inside an optionally labeled or collapsed console group, starting the group before execution and ending it after the Effect completes.

Example (Wrapping an effect in a group)

import { Console, Effect } from "effect"

const program = Effect.gen(function*() {
  yield* Console.withGroup(
    Effect.gen(function*() {
      yield* Console.log("Step 1: Initialize")
      yield* Console.log("Step 2: Process")
      yield* Console.log("Step 3: Complete")
    }),
    { label: "Processing Steps", collapsed: false }
  )
})
accessors
Source effect/Console.ts:58431 lines
export const withGroup = dual<
  (
    options?: {
      readonly label?: string | undefined
      readonly collapsed?: boolean | undefined
    }
  ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
  <A, E, R>(
    self: Effect.Effect<A, E, R>,
    options?: {
      readonly label?: string | undefined
      readonly collapsed?: boolean | undefined
    }
  ) => Effect.Effect<A, E, R>
>((args) => core.isEffect(args[0]), (self, options) =>
  consoleWith((console) =>
    effect.acquireUseRelease(
      effect.sync(() => {
        if (options?.collapsed) {
          console.groupCollapsed(options.label)
        } else {
          console.group(options?.label)
        }
      }),
      () => self,
      () =>
        effect.sync(() => {
          console.groupEnd()
        })
    )
  ))