Core DataResult and Try:
Blorp by Example

Result and Try:

Result carries recoverable failure, and ?= keeps success paths linear.

Ok

Ok(value) carries the successful result.

ok.brp
result: Result[Int, String] = Ok(42)

Err

Err(error) carries the error value.

err.brp
result: Result[Int, String] = Err("missing score")

Predictable Failure

A function returning Result[T, E] advertises that callers must handle failure.

result-signature.brp
pure func parse_score(raw: String) -> Result[Int, String]:
    raw.parse_int().ok_or("bad score")

?=

?= binds the success value or short-circuits with the error from a function returning Option or Result.

try-bind.brp
score ?= raw.parse_int().ok_or("bad score")
Ok(score + 1)

Option-to-result

ok_or turns Option[T] into Result[T, E] when absence should become an error.

ok-or.brp
name ?= input("name> ").ok_or("no input")

Example

parse-sum.brp
pure func parse_named_int(name: String, raw: String) -> Result[Int, String]:
	raw
		.parse_int()
		.ok_or("invalid " + name)


pure func sum_two(left_raw: String, right_raw: String) -> Result[Int, String]:
	left ?= parse_named_int("left", left_raw)
	right ?= parse_named_int("right", right_raw)
	Ok(left + right)


func main(args: List[String]) -> Void:
	match sum_two("20", "22"):
		Ok(total): print(total.to_string())
		Err(msg): print(msg)

Try It

terminal
blorp run parse-sum.brp