class Steep::Subtyping::Result::Any

def add(*relations, &block)

Returns `false` if no future `#add` changes the result.
def add(*relations, &block)
  relations.each do |relation|
    if failure?
      result = yield(relation)
      branches << result
    else
      # Already succeeded.
      branches << Skip.new(relation)
    end
  end
  # No need to test more branches if already succeeded.
  failure?
end

def failure_path(path = [])

def failure_path(path = [])
  if failure?
    path.unshift(self)
    if r = branches.find(&:failure?)
      r.failure_path(path)
    else
      path
    end
  end
end

def initialize(relation)

def initialize(relation)
  super relation
  @branches = []
  @success = false
end

def success?

def success?
  @success ||= branches.any?(&:success?)
end