Whole-Pattern Aliases

This example uses as to inspect a result while keeping the whole value available. The positive function checks the number inside Ok, returns the original result if it is positive, and passes existing errors through unchanged.

Validated with Roc nightly-2026-11-02-847b82c.


positive : Try(I64, [BadNumber, NotPositive]) -> Try(I64, [BadNumber, NotPositive])
positive = |input| match input {
	Ok(n) as result => if n > 0 {
		result
	} else {
		Err(NotPositive)
	}
	Err(_) as result => result
}

expect positive(Ok(3)) == Ok(3)
expect positive(Ok(0)) == Err(NotPositive)
expect positive(Err(BadNumber)) == Err(BadNumber)

In Ok(n) as result, n is the number and result is the complete Ok(n) value. This lets us examine part of a value without having to reconstruct the whole thing when returning it.

Output

Run this from the directory that has main.roc in it:

$ roc test main.roc

All (3) tests passed in 9.2 ms.