Skip to main content Link Search Menu Expand Document (external link)

Random.ts overview

Since v2.0.0


Exports Grouped by Category


constructors

choice

Get a random element from an iterable.

Example

import { Effect, Random } from "effect"

Effect.gen(function* () {
  const randomItem = yield* Random.choice([1, 2, 3])
  console.log(randomItem)
})

Signature

declare const choice: <Self extends Iterable<unknown>>(
  elements: Self
) => Self extends NonEmptyIterable.NonEmptyIterable<infer A>
  ? Effect.Effect<A>
  : Self extends Array.NonEmptyReadonlyArray<infer A>
    ? Effect.Effect<A>
    : Self extends Iterable<infer A>
      ? Effect.Effect<A, Cause.NoSuchElementException>
      : never

Source

Since v3.6.0

fixed

Constructs the Random service from an array of literal values. The service will cycle through the provided values in order when generating random values. This constructor is useful for creating deterministic sequences for testing or when specific values need to be returned.

Example

import { Effect, Random } from "effect"

Effect.gen(function* () {
  console.log(yield* Random.next) // 0.2
  console.log(yield* Random.next) // 0.5
  console.log(yield* Random.next) // 0.8
  console.log(yield* Random.next) // 0.2 (cycles back)
}).pipe(Effect.withRandom(Random.fixed([0.2, 0.5, 0.8])))

Example

import { Effect, Random } from "effect"

Effect.gen(function* () {
  console.log(yield* Random.nextBoolean) // true
  console.log(yield* Random.nextBoolean) // false
  console.log(yield* Random.nextBoolean) // true
}).pipe(Effect.withRandom(Random.fixed([true, false, true])))

Signature

declare const fixed: <const T extends Array.NonEmptyArray<any>>(values: T) => Random

Source

Since v3.11.0

make

Constructs the Random service, seeding the pseudo-random number generator with an hash of the specified seed. This constructor is useful for generating predictable sequences of random values for specific use cases.

Example uses:

  • Generating random UI data for visual tests.
  • Creating data that needs to change daily but remain the same throughout a single day, such as using a date as the seed.

Example

import * as assert from "node:assert"
import { Effect, Random } from "effect"

const random1 = Random.make("myseed")
const random2 = Random.make("myseed")

assert.equal(Effect.runSync(random1.next), Effect.runSync(random2.next))

Signature

declare const make: <A>(seed: A) => Random

Source

Since v3.5.0

next

Returns the next numeric value from the pseudo-random number generator.

Signature

declare const next: Effect.Effect<number, never, never>

Source

Since v2.0.0

nextBoolean

Returns the next boolean value from the pseudo-random number generator.

Signature

declare const nextBoolean: Effect.Effect<boolean, never, never>

Source

Since v2.0.0

nextInt

Returns the next integer value from the pseudo-random number generator.

Signature

declare const nextInt: Effect.Effect<number, never, never>

Source

Since v2.0.0

nextIntBetween

Returns the next integer value in the specified range from the pseudo-random number generator.

Signature

declare const nextIntBetween: (min: number, max: number) => Effect.Effect<number>

Source

Since v2.0.0

nextRange

Returns the next numeric value in the specified range from the pseudo-random number generator.

Signature

declare const nextRange: (min: number, max: number) => Effect.Effect<number>

Source

Since v2.0.0

randomWith

Retreives the Random service from the context and uses it to run the specified workflow.

Signature

declare const randomWith: <A, E, R>(f: (random: Random) => Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>

Source

Since v2.0.0

shuffle

Uses the pseudo-random number generator to shuffle the specified iterable.

Signature

declare const shuffle: <A>(elements: Iterable<A>) => Effect.Effect<Chunk.Chunk<A>>

Source

Since v2.0.0

context

Random

Signature

declare const Random: Context.Tag<Random, Random>

Source

Since v2.0.0

models

Random (interface)

Signature

export interface Random {
  readonly [RandomTypeId]: RandomTypeId
  /**
   * Returns the next numeric value from the pseudo-random number generator.
   */
  readonly next: Effect.Effect<number>
  /**
   * Returns the next boolean value from the pseudo-random number generator.
   */
  readonly nextBoolean: Effect.Effect<boolean>
  /**
   * Returns the next integer value from the pseudo-random number generator.
   */
  readonly nextInt: Effect.Effect<number>
  /**
   * Returns the next numeric value in the specified range from the
   * pseudo-random number generator.
   */
  nextRange(min: number, max: number): Effect.Effect<number>
  /**
   * Returns the next integer value in the specified range from the
   * pseudo-random number generator.
   */
  nextIntBetween(min: number, max: number): Effect.Effect<number>
  /**
   * Uses the pseudo-random number generator to shuffle the specified iterable.
   */
  shuffle<A>(elements: Iterable<A>): Effect.Effect<Chunk.Chunk<A>>
}

Source

Since v2.0.0

symbols

RandomTypeId

Signature

declare const RandomTypeId: unique symbol

Source

Since v2.0.0

RandomTypeId (type alias)

Signature

type RandomTypeId = typeof RandomTypeId

Source

Since v2.0.0