add

demo.add · #rzmbqbmn · term · runs anywhere

Two numbers added, as an Effect that fails with Overflow past limit.

runSync(add(20, 22))
⧩ 42
import { limit, Overflow } from "#codebase/demo";
import { fail, gen, succeed } from "#codebase/effect/Effect";
import type { Effect } from "#codebase/effect/Effect";

export const add = (a: number, b: number): Effect<number, Overflow> =>
  gen(function* () {
    const sum = (yield* succeed(a)) + (yield* succeed(b));
    if (sum > limit) return yield* fail(new Overflow({ at: sum }));
    return sum;
  })

uses

used by