   {type, translation, pattern} =
     switch label
       when 'numerical'
-        numericalCompile ctx, token
+        numericalCompile ctx, symbol
       when 'regex'
-        regexCompile ctx, token
+        regexCompile ctx, symbol
       when 'char'
         type: typeConstant 'Char'
-        translation: token
-        pattern: literalPattern ctx, token
+        translation: symbol
+        pattern: literalPattern ctx, symbol
       when 'string'
         type: typeConstant 'String'
-        translation: token
-        pattern: literalPattern ctx, token
+        translation: symbol
+        pattern: literalPattern ctx, symbol
       else
-        nameCompile ctx, atom, token
+        nameCompile ctx, atom, symbol
   atom.tea = type if type
   if ctx.isOperator()
     # TODO: maybe don't use label here, it's getting confusing what is its purpose

tokenize = (input) ->
  currentPos = 0
  while input.length > 0
    match = input.match ///
      ^ # must be at the start

    assignCompile ctx, form, "[#{listOf compiledElems}]"

isSplat = (expression) ->
  (isAtom expression) and (_symbol expression)[...2] is '..'

splatToName = (splat) ->
  replicate splat,
    (token_ (_symbol splat)[2...])

# arrayToConses = (elems) ->
#   if elems.length is 0
