class Dry::Logic::Predicate

def call(*args)

def call(*args)
  fn.(*args)
end

def curry(*args)

def curry(*args)
  self.class.new(id, *args, &fn.curry.(*args))
end

def initialize(id, *args, &block)

def initialize(id, *args, &block)
  @id = id
  @fn = block
  @args = args
end

def to_ast

def to_ast
  [:predicate, [id, args]]
end