Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 1x 1x 1x 1x 1x 1x 2x 1x 1x 1x 1x 1x 1x 1x 1x | /** * Arbitraries for effectful datatypes. * @module */ import {pipe} from 'effect' import * as EF from 'effect/Effect' import fc from 'fast-check' import {Monad as arbitraryMonad} from './instances.js' import type {LiftArbitrary} from './types.js' const {map} = arbitraryMonad /** * Convert an arbitrary of `T` into a successful effect of `T`. * @category arbitraries */ export const succeed: LiftArbitrary<EF.EffectTypeLambda, never, never> = a => pipe(a, map(EF.succeed)) /** * Convert an arbitrary of a string error message into a fail effect. * @category arbitraries */ export const fail: ( message: fc.Arbitrary<string>, ) => fc.Arbitrary<EF.Effect<never, Error>> = map(m => EF.fail(new Error(m))) /** * Convert an arbitrary of a string error message and an arbitrary of `T` * into a sync effect, possibly suspended. * @category arbitraries */ export const sync = <T>( a: fc.Arbitrary<T>, message: fc.Arbitrary<string>, ): fc.Arbitrary<EF.Effect<T, Error>> => fc .oneof(succeed(a), fail(message)) .map(sync => EF.suspend(() => sync as EF.Effect<T, Error>)) |