# frozen_string_literal: true
module Dhall
class Visitor
def initialize(callbacks)
@callbacks = callbacks
end
def visit(expr)
expr.to_h.each_with_object({}) do |(attr, value), h|
if (callback = callback_for(value))
h[attr] = callback.call(value)
end
end
end
protected
def callback_for(x)
@callbacks.find { |k, _| k === x }&.last
end
end
end