     @visitLiteral node
   visitParens: (node) ->
     node.formula.visit @
+
+class Evaluator extends FormulaVisitor
+  constructor: (@data) ->
+  visitLiteral: (node) ->
+    node.value
+
   visitReference: (node) ->
     @data[node.name]
   visitComparison: (node) ->

      when '>='
        left >= right

class Unbound
  constructor: ->
  visitLiteral: ->
    []

  visitIntegerLiteral: (node) ->
    @visitLiteral node
  visitDecimalLiteral: (node) ->
    @visitLiteral node
  visitStringLiteral: (node) ->
    @visitLiteral node
  visitParens: (node) ->
    node.formula.visit @
  visitReference: (node) ->
    [node.name]
  visitComparison: (node) ->

# force formula evaluator

class FormulaVisitor
  constructor: ->
  visitIntegerLiteral: (node) ->
    @visitLiteral node
  visitDecimalLiteral: (node) ->
