class Steep::AST::Types::Var
def self.fresh(name, location: nil)
def self.fresh(name, location: nil) new(name: fresh_name(name), location: location) end
def self.fresh_name(name)
def self.fresh_name(name) @mutex ||= Thread::Mutex.new @mutex.synchronize do @max ||= 0 @max += 1 :"#{name}(#{@max})" end end
def ==(other)
def ==(other) other.is_a?(Var) && other.name == name end
def free_variables()
def free_variables() @fvs ||= Set.new([name]) end
def hash
def hash self.class.hash ^ name.hash end
def initialize(name:, location: nil)
def initialize(name:, location: nil) @name = name @location = location end
def level
def level [0] end
def subst(s)
def subst(s) if s.key?(name) s[name] else self end end
def to_s
def to_s name.to_s end
def update(name: self.name, location: self.location)
def update(name: self.name, location: self.location) self.class.new( name: name, location: location ) end
def with_location(new_location)
def with_location(new_location) update(location: new_location) end