add
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; })