class Dry::Logic::Rule
def self.specialize(arity, curried, base = Rule)
def self.specialize(arity, curried, base = Rule) base.interfaces.fetch_or_store([arity, curried]) do interface = Interface.new(arity, curried) klass = ::Class.new(base) { include interface } base.const_set("#{base.name.split("::").last}#{interface.name}", klass) klass end end