class Result

def fold(success: nil, failure: nil)

def fold(success: nil, failure: nil)
  fold_result = if success?
    if success.respond_to?(:call)
      success.call(@data)
    else
      if block_given?
        yield(@data)
      else
        self
      end
    end
  else
    if failure.respond_to?(:call)
      failure.call(@error)
    else
      self
    end
  end
  unless fold_result.is_a?(Result)
    raise StandardError, "Fold result must be a Result object, got: #{fold_result.class}"
  end
  fold_result
end