def flat_map &block
      if empty? then
        None.new
      else
        res = block.call(get)
        if res.is_a?(Some) then
          res
        else
          Some.new(res)
        end
      end
    end
def flat_map &block
      if empty? then
        None.new
      else
        res = block.call(get)
        if res.is_a?(Some) then
          res
        else
          Some.new(res)
        end
      end
    end
Same as map, but flatten the results

 This is useful when operating on an object that will return an `Option`.

 @example
   Option(15).flat_map {|i| Option(i).filter{|i2| i2 > 0}} == Some(15)

 @see #map
 @return [Option<Object>] Optional value