Sha256: 8d797dce3618bb150906dbc12c042bc525b0051e9d9e7469a5db6bbadd594391
Contents?: true
Size: 1.58 KB
Versions: 1
Compression:
Stored size: 1.58 KB
Contents
module Qrb # # Abstract class for Q type (generators). # class Type def initialize(name) unless name.nil? or name.is_a?(String) raise ArgumentError, "String expected for type name, got `#{name}`" end @name = name end def name @name || default_name end def name=(n) raise Error, "Name already set to `#{@name}`" unless @name.nil? @name = n end def to_s name.to_s end # Check if `value` belongs to this type. Returns true if it's the case, # false otherwise. # # For belonging to the type, `value` MUST be a valid representation, not # an 'approximation' or some 'similar' representation. In particular, # returning true means that no dressing is required for using `value` as a # proper one. Similarly, the method MUST always return true on a value # directly obtained through `dress`. # def include?(value) raise NotImplementedError, "Missing #{self.class.name}#include?" end def dress(*args) raise NotImplementedError, "Missing #{self.class.name}#dress" end protected def set_equal?(s1, s2) s1.size == s2.size and (s1-s2).empty? end def set_hash(arg) arg.map(&:hash).reduce(:^) end end # class Type end # module Qrb require_relative 'type/any_type' require_relative 'type/builtin_type' require_relative 'type/union_type' require_relative 'type/sub_type' require_relative 'type/seq_type' require_relative 'type/set_type' require_relative 'type/tuple_type' require_relative 'type/relation_type' require_relative 'type/ad_type'
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
qrb-0.3.0 | lib/qrb/type.rb |