Option Type

Another useful type that requires pattern matching is the polymorphic option type opt. It can be used to capture a value, or specify there is none:

fun divide (x:int, y:int) =>
  if y == 0 then None[int]
  else Some (x/y)
  endif
;

Pattern matching optional values

This is done like:

printopt (x: opt[int]) {
  match x with
  | Some v => println$ "Result is " + v.str;
  | None => println$ "No result";
  endmatch;
}