module Dry::Logic
def self.Predicate(block)
def self.Predicate(block) case block when Method then Predicate.new(block.name, &block) else raise ArgumentError, 'predicate needs an :id' end end
def self.Result(input, value, rule)
def self.Result(input, value, rule) case value when Result value.class.new(value.input, value.success?, rule) when Array Result::Set.new(input, value, rule) else Result::Value.new(input, value, rule) end end