     content = mainCache.concat(varDecls, compiledCases.join '').join '\n'
     """(function(){
       #{content}}())"""
+  'require': (from, list) ->
+    args = inside(list).map(compileImpl).map(toJsString).join ', '
+    "$listize(window.requireModule(#{toJsString from.token}, [#{args}]))"
+
+toJsString = (token) ->
+  "'#{token}'"
 
 compileAssign = ([to, from]) ->
   "var #{to} = #{from};"

  ':': (elems...) ->
    "[#{elems.join ', '}]"

trueMacros =
  'match': (onwhat, cases...) ->
    varNames = []

  "<span style=\"color: #{color}\">#{string}</span>"

keywords = 'def defn data class fn proc match if type :: \\
            access call new
            require'.split ' '

controls = '\\(\\)\\[\\]'

