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
}
}
}