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