public static T PureOrGet <T>(this Maybe <T> maybe, Func <T> else_func) => maybe.HasValue ? maybe.Value : else_func();
public static T PureOrThrow <T>(this Maybe <T> maybe, Exception else_exception) => maybe.HasValue ? maybe.Value : throw else_exception;
public static T PureOr <T>(this Maybe <T> maybe, T else_value) => maybe.HasValue ? maybe.Value : else_value;