control-flow
Control flow
if / else
Conditional expressions in Typed R behave like in standard R, with additional type safety.
if (4 == 4) {
print("It works!")
}
The type system ensures that:
- conditions evaluate to boolean values,
- all branches of a conditional expression are type-compatible when required.
This prevents common errors where different branches return incompatible types.
for / while
Loop constructs such as for and while follow R semantics, while benefiting from type checking:
- loop variables have well-defined types,
- operations inside loops are checked for consistency.
This makes iterative algorithms more robust without changing their familiar structure.
match expressions
The match expression provides exhaustive pattern matching on tagged unions. It is the idiomatic way to handle values that can take one of several forms:
# Define an Option type with generics
type Option<T> <- .Some(T) | .None;
# Create a value of type Option<bool>
let val: Option<bool> <- .None;
# Pattern match to extract or provide a default
let res = match val {
.Some(a) => a,
_ => false
};
res
Each branch of a match expression uses the => arrow to map a pattern to its result. The patterns can:
- destructure tagged values:
.Some(a)binds the inner value toa, - use wildcards:
_matches anything and acts as a default branch.
The match expression is especially powerful when combined with tagged unions and the Option type, making it easy to handle optional values, error cases, or any discriminated data safely at compile time.