class Dry::Logic::Predicate

def call(*args)

if @args.size == arity then we should ignore called args
predicate doesn't need them.
enables a rule to call with its params & have them ignored if the
def call(*args)
  all_args = @args + args
  size = all_args.size
  if size == arity
    fn.(*all_args)
  else
    raise_arity_error(size)
  end
end