       ['brace', token in ['{', '}']]
       ['bare', true]
 
+isDelim = (token) ->
+  /[\(\)\[\]\{\}]/.test token.token
+
 labelMatches = (ast) ->
   macro 'match', ast, (node, args) ->
     [keyword, over, patterns...] = args

labelNames = (pattern) ->
  if Array.isArray pattern
    if isList(pattern) or isTuple pattern
      (inside pattern).map labelNames
    else
      [op, args...] = inside pattern


labelOperators = (ast) ->
  walk ast, (node) ->
    [openDelim, operator] = node
    if openDelim.token is '('
      if not operator.type and operator.label is 'bare'
        operator.label = 'operator'
    else if node.type isnt 'pattern'
      [openDelim, ..., closeDelim] = node
      openDelim.label = 'operator'
      closeDelim.label = 'operator'
    node

apply = (onto, fns...) ->
