module Virtual
  # Integer and (Object) References are the main derived classes, but float will come and ...
  # The Unknown Type has unknown type and has only casting methods. So it must be cast to be useful.
  class Type
    def == other
      return false unless other.class == self.class
      return true
    end
  end

  class Integer < Type
  end

  class Reference < Type
    # possibly unknown value, but known class (as in methods)
    def initialize clazz = nil
      @of_class = clazz
    end
    attr_reader :of_class
  end

  class Unknown < Type
  end

end