type Option = Some(T) | None type Ord = LT | EQ | GT fn map(input: Option, func: Func): Option { if input { is Option::Some(x) -> Option::Some(func(x)), is Option::None -> Option::None, } } type Complicated = Sunrise | Metal { black: bool, norwegian: bool } | Fella(String, Int)