Sha256: 3d4e608e241a8f5cb21bb3e46bf228d8b4ef7c91c4ab0652c749270a8716fae7

Contents?: true

Size: 801 Bytes

Versions: 59

Compression:

Stored size: 801 Bytes

Contents

module Steep
  module Subtyping
    class Relation
      attr_reader :sub_type
      attr_reader :super_type

      def initialize(sub_type:, super_type:)
        @sub_type = sub_type
        @super_type = super_type
      end

      def hash
        self.class.hash ^ sub_type.hash ^ super_type.hash
      end

      def ==(other)
        other.is_a?(self.class) && other.sub_type == sub_type && other.super_type == super_type
      end

      alias eql? ==

      def to_s
        "#{sub_type} <: #{super_type}"
      end

      def map
        self.class.new(
          sub_type: yield(sub_type),
          super_type: yield(super_type)
        )
      end

      def flip
        self.class.new(
          sub_type: super_type,
          super_type: sub_type
        )
      end
    end
  end
end

Version data entries

59 entries across 59 versions & 1 rubygems

Version Path
steep-0.47.1 lib/steep/subtyping/relation.rb
steep-0.47.0 lib/steep/subtyping/relation.rb
steep-0.46.0 lib/steep/subtyping/relation.rb
steep-0.45.0 lib/steep/subtyping/relation.rb
steep-0.44.1 lib/steep/subtyping/relation.rb
steep-0.44.0 lib/steep/subtyping/relation.rb
steep-0.43.1 lib/steep/subtyping/relation.rb
steep-0.43.0 lib/steep/subtyping/relation.rb
steep-0.42.0 lib/steep/subtyping/relation.rb
steep-0.41.0 lib/steep/subtyping/relation.rb
steep-0.40.0 lib/steep/subtyping/relation.rb
steep-0.39.0 lib/steep/subtyping/relation.rb
steep-0.38.0 lib/steep/subtyping/relation.rb
steep-0.37.0 lib/steep/subtyping/relation.rb
steep-0.36.0 lib/steep/subtyping/relation.rb
steep-0.35.0 lib/steep/subtyping/relation.rb
steep-0.34.0 lib/steep/subtyping/relation.rb
steep-0.33.0 lib/steep/subtyping/relation.rb
steep-0.32.0 lib/steep/subtyping/relation.rb
steep-0.31.1 lib/steep/subtyping/relation.rb