                 else
                   throw new Error "#{names.join ', '} used but not defined"
             escapedName
+
+# Recognizing arrays, tuples and map literals
 
 isList = (node) ->
   Array.isArray(node) and node[0].token is '['

  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

typifyMost = (ast) ->
  apply ast, typeComments, typeDatas, typeTypes, labelSimple, labelMatches,
    labelFns, labelRequires, labelComments

typifyWith = (ast, mainLabeling) ->
  apply ast, typifyMost, mainLabeling, labelOperators

typifyExp = (ast) ->
  typifyWith ast, (x) -> x

typifyTop = (ast) ->
  typifyWith ast, labelTop

typifyBottom = (ast) ->
  typifyWith ast, labelBottom

typifyDefinitions = (ast) ->
  typifyWith ast, labelDefinitions

toHtml = (highlighted) ->
  crawl highlighted, (word) ->


tokenizedDefinitions = (source) ->
  (parentize shiftPos [inside typifyDefinitions astize tokenize "(#{source})"])[0]

# Correct offset by 1 in positions, when we wrap the source in an S-exp
shiftPos = (ast) ->
