Skip to content

AgentScript Effect Examples

Error Handling Examples

AgentScript

function maybeCompute(value: number): number
goal: "Demonstrates random failure for example"
requires:
value >= 0: "Value must be non-negative"
return:
value
|> randomTrigger
|> finalizeCompute
errors:
CustomError: "Oops, random event occurred"
tests:
success:
10 -> 10
errors:
0 -> CustomError`

TypeScript (Effect)

import { Console, Effect } from 'effect'
class CustomError {
readonly _tag = 'CustomError'
constructor(readonly value: number) {}
}
const maybeFail: Effect.Effect<number, CustomError> = Effect.sync(() => Math.random()).pipe(
Effect.andThen((value) =>
value > 0.5
? Effect.fail(new CustomError(value))
: Effect.succeed(value)
),
)
const main = maybeFail.pipe(
Effect.andThen((value) => Console.log(`Got value \${value}`)),
Effect.catchTag('CustomError', (error) => Console.error(`Oops! Got value ${error.value}`)),
)
Effect.runPromise(main)

TypeScript (Plain)

class CustomError extends Error {
constructor(readonly value: number) {
super(`Custom error triggered with value ${value}`)
}
}
function maybeFail(): number {
const value = Math.random()
if (value > 0.5) {
throw new CustomError(value)
}
return value
}
function main(): void {
try {
const result = maybeFail()
console.log(`Got value ${result}`)
} catch (error) {
if (error instanceof CustomError) {
console.error(`Oops! Got value ${error.value}`)
} else {
console.error('Unknown error occurred!')
}
}
}
main()`