   result
 
 typifyMost = (ast) ->
-  apply ast, typeComments, typeDatas, typeTypes, labelSimple, labelMatches, labelFns
+  apply ast, typeComments, typeDatas, typeTypes, labelSimple, labelMatches, labelFns, labelRequires
 
 typify = (ast) ->
   apply ast, typifyMost, labelComments, labelOperators
 
 typifyTop = (ast) ->
   apply ast, typifyMost, labelTop, labelComments, labelOperators
+
+typifyBottom = (ast) ->
+  apply ast, typifyMost, labelBottom, labelComments, labelOperators
 
 typifyDefinitions = (ast) ->
   apply ast, typifyMost, labelDefinitions, labelComments, labelOperators

  variableCounter = 1
  compileTop preCompileTop source

# single exp
compiledExp = (source) ->
  variableCounter = 1

    """(function(){
      #{content} else {throw new Error('match failed to match');}}())"""
  'require': (from, list) ->
    args = inside(list).map(compileName).map(toJsString).join ', '
    "$listize(window.requireModule(#{toJsString from.token}, [#{args}]))"
  'list': (items...) ->
    "$listize(#{compileList items})"

compileName = (node) ->
  validIdentifier node.token

hoistWheres = (possible, assigns) ->
  defined = (n for [n, _] in assigns)
