Generics
Generics let one function work over many concrete types.
Type Parameters
Type parameters appear in brackets, such as [T].
pure func first_or[T](items: List[T], fallback: T) -> T:
items
.get(0)
.get_or(fallback)
Inferred Type Params
The call site usually determines generic types from arguments.
first_or([1, 2, 3], 0)
first_or(["a"], "fallback")
Generic Containers
List[T], Option[T], Result[T, E], Dict[K, V], and Set[T] are generic containers.
names: List[String] = []
maybe_score: Option[Int] = None
Reusable Helpers
A small generic helper should avoid extra constraints until it needs them.
pure func swap[A, B](pair: (A, B)) -> (B, A):
(pair[1], pair[0])
Example
generic-helpers.brp
pure func first_or[T](items: List[T], fallback: T) -> T:
match items.get(0):
Some(value): value
None: fallback
pure func swap[A, B](pair: (A, B)) -> (B, A):
(pair[1], pair[0])
func main(args: List[String]) -> Void:
print(first_or([1, 2, 3], 0)) -- prints: 1
print(swap(("age", 42))[0]) -- prints: 42
Try it
terminal
blorp run generic-helpers.brp