Returns None if the this is None, otherwise calls f with the wrapped value and returns the result
Maybe<U> flatMap<U>(Maybe<U> f(T val)) { if (this != null) return f(this!.value); return None(); }