1 type Option<T> = 2 | None 3 | Some T 4 5 def is_none = self == None 6 7 def unwrap_or_fail (message : String) = case self of 8 Some x -> x 9 None -> fail message 10 11 def unwrap = unwrap_or_fail "value is none" 12 13 def unwrap_or (value : T) = case self of 14 Some x -> x 15 None -> value 16 17 def or_else (f : Unit -> Option<T>) = case self of 18 Some x -> Some x 19 None -> f () 20 21 def to_result<E> (e : E) = case self of 22 Some x -> Result/Ok x 23 None -> Result/Error e 24 25 def map<U> (f : T -> U) = case self of 26 None -> None 27 Some x -> f x |> Some 28 29 def flat_map<U> (f : T -> Option<U>) = case self of 30 None -> None 31 Some x -> f x 32 33 def filter (f : T -> bool) = case self of 34 None -> None 35 Some x -> if f x then Some x else None 36 37 import Option/Some 38 None 39