union Option<T> {
none
just(T)
}
fun after<T,U>(o : Option<T>, f : fn (T) -> U) {
switch o {
case none { @none<U> }
case just(x) { just(f(x)) }
}
}
fun default<T>(o : Option<T>, y : T) {
switch o {
case none { y }
case just(x) { x }
}
}