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 (value : Option<T>) = case self of 18 Some x -> Some x 19 None -> value 20 21 def or_else (f : Unit -> Option<T>) = case self of 22 Some x -> Some x 23 None -> f () 24 25 def to_result<E> (e : E) = case self of 26 Some x -> Result/Ok x 27 None -> Result/Error e 28 29 def map<U> (f : T -> U) = case self of 30 None -> None 31 Some x -> f x |> Some 32 33 def flat_map<U> (f : T -> Option<U>) = case self of 34 None -> None 35 Some x -> f x 36 37 def filter (f : T -> bool) = case self of 38 None -> None 39 Some x -> if f x then Some x else None 40 41 import Option/Some 42 None 43