def dress(value, handler = DressHelper.new)
      # Check that the supertype is able to dress the value.
      # Rewrite and set cause to any encountered TypeError.
      uped = handler.try(self, value) do
        super_type.dress(value, handler)
      end

      # Check each constraint in turn
      constraints.each do |constraint|
        next if constraint===uped
        msg = handler.default_error_message(self, value)
        if constraint.named? && constraints.size>1
          msg << " (not #{constraint.name})"
        end
        handler.fail!(msg)
      end

      # seems good, return the uped value
      uped
    end
def dress(value, handler = DressHelper.new)
      # Check that the supertype is able to dress the value.
      # Rewrite and set cause to any encountered TypeError.
      uped = handler.try(self, value) do
        super_type.dress(value, handler)
      end

      # Check each constraint in turn
      constraints.each do |constraint|
        next if constraint===uped
        msg = handler.default_error_message(self, value)
        if constraint.named? && constraints.size>1
          msg << " (not #{constraint.name})"
        end
        handler.fail!(msg)
      end

      # seems good, return the uped value
      uped
    end
Check that `value` can be uped through the supertype, then verify all
 constraints. Raise an error if anything goes wrong.