     whitespace = ''
     {token, ws, pos}
 
+leftDelims = ['(', '[', '{']
+rightDelims = [')', ']', '}']
+
 astize = (tokens) ->
   tree = []
   current = []
   stack = [[]]
   for token in tokens
-    if token.token in ['(', '[']
+    if token.token in leftDelims
       stack.push [token]
-    else if token.token in [')', ']']
+    else if token.token in rightDelims
       closed = stack.pop()
       closed.push token
       stack[stack.length - 1].push closed

        exps = inside node
        if isMap node
          compileMap exps
        else if isList node
          compileList exps
        else

isList = (node) ->
  Array.isArray(node) and (node[0].token is '[')

isTuple = (node) ->
  Array.isArray(node) and (node[0].token is '{')

isMap = (node) ->
  isTuple(node) and (elems = inside node; elems.length > 0) and elems[0].label is 'label'

compileImpl = (node) ->
  switch node.type
