{ has_value: bool, val: T|nil }
{has_value: true, val: nil}
Maybe<T> = sigma (has_value: bool) if has_value then T else ()
(false, ())
(true, <actual value of type T>)