@type t() :: nil | any()
@spec map(t(), (any() -> any())) :: t()
@spec with_default(t(), (-> any()) | any()) :: any()