class Steep::TypeAssignability
def compact0(types)
def compact0(types) if types.size == 1 types else type, *types_ = types compacted = compact0(types_) compacted.flat_map do |type_| case when type == type_ [type] when test(src: type_, dest: type) [type] when test(src: type, dest: type_) [type_] else [type, type_] end end.uniq end end