==(other)
click to toggle source
def ==(other)
other.is_a?(Tuple) && other.types == types
end
each_type(&block)
click to toggle source
def each_type(&block)
if block
types.each(&block)
else
enum_for :each_type
end
end
eql?(other)
click to toggle source
free_variables(set = Set.new)
click to toggle source
def free_variables(set = Set.new)
set.tap do
types.each do |type|
type.free_variables set
end
end
end
hash()
click to toggle source
def hash
self.class.hash ^ types.hash
end
map_type_name(&block)
click to toggle source
def map_type_name(&block)
Tuple.new(
types: types.map {|type| type.map_type_name(&block) },
location: location
)
end
sub(s)
click to toggle source
def sub(s)
self.class.new(types: types.map {|ty| ty.sub(s) },
location: location)
end
to_json(*a)
click to toggle source
def to_json(*a)
{ class: :tuple, types: types, location: location }.to_json(*a)
end
to_s(level = 0)
click to toggle source
def to_s(level = 0)
if types.empty?
"[ ]"
else
"[ #{types.join(", ")} ]"
end
end