module Dry::Logic

def self.Predicate(block)

def self.Predicate(block)
  case block
  when Method then Predicate.new(block.name, &block)
  when UnboundMethod then Predicate.new(block.name, fn: block)
  else raise ArgumentError, 'predicate needs an :id'
  end
end

def self.Result(response, rule, input)

def self.Result(response, rule, input)
  Result[rule].new(response, rule, input)
end