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
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
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
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>
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>
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>
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>
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>
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>
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>>
Since v2.0.0
context
Random
Signature
declare const Random: Context.Tag<Random, Random>
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>>
}
Since v2.0.0
symbols
RandomTypeId
Signature
declare const RandomTypeId: unique symbol
Since v2.0.0
RandomTypeId (type alias)
Signature
type RandomTypeId = typeof RandomTypeId
Since v2.0.0