         concreteType = lookupInMap context, expression.token
         unless concreteType
           throw new Error "Unbound variable #{expression.token}"
-        [newMap(), nameIndex, concreteType]
+        expression.tea = concreteType
+        [newMap(), nameIndex, expression]
       # Lambda
       else if expression.type is 'function'
         {params, body, wheres} = fnDefinition expression

  else
    cb ast, ast.token
  return

inside = (node) -> node[1...-1]



# Type inference and checker

assignTypes = (context, expression) ->
  [s, _, expression] = infer context, expression, 0
  crouch expression, (node) ->
    node.tea = subExp s, node.tea if node.tea

infer = (context, expression, nameIndex) ->
  switch expression.label
    when 'numerical'
      expression.tea = 'Num'
      [newMap(), nameIndex, expression]
    when 'string'
      expression.tea = 'Text'
      [newMap(), nameIndex, expression]
    else
      # Reference
      if isReference expression
