Hyperlinkv0.8.0-beta.28

Stream

Stream.tickconsteffect/Stream.ts:570
(interval: Duration.Input): Stream<void>

Creates a stream that emits void immediately once, then emits another void after each specified interval.

Example (Emitting ticks on an interval)

import { Console, Effect, Stream } from "effect"

const program = Effect.gen(function*() {
  const ticks = yield* Stream.tick("200 millis").pipe(
    Stream.take(3),
    Stream.runCollect
  )
  yield* Console.log(ticks)
})

Effect.runPromise(program)
// Output: [ undefined, undefined, undefined ]
constructors
Source effect/Stream.ts:57013 lines
export const tick = (interval: Duration.Input): Stream<void> =>
  fromPull(Effect.sync(() => {
    let first = true
    const effect = Effect.succeed(Arr.of<void>(undefined))
    const delayed = Effect.delay(effect, interval)
    return Effect.suspend(() => {
      if (first) {
        first = false
        return effect
      }
      return delayed
    })
  }))