class RBS::UnitTest::WithAliases::WithEnum

def and(*args, &block)

def and(*args, &block)
  return WithEnum.new to_enum(__method__ || raise, *args) unless block
  each(&block)
  args.each do |arg|
    if WithEnum === arg # use `===` as `arg` might not have `.is_a?` on it
      arg.each(&block)
    else
      block.call(_ = arg)
    end
  end
end

def and_nil(&block)

def and_nil(&block)
  self.and(nil, &_ = block)
end

def but(*cases, &block)

def but(*cases, &block)
  return WithEnum.new to_enum(__method__ || raise, *cases) unless block
  each do |arg|
    yield arg unless cases.any? { (_ = _1) === arg }
  end
end

def each(&block) = @enum.each(&block)

def each(&block) = @enum.each(&block)

def initialize(enum) = @enum = enum

def initialize(enum) = @enum = enum