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

  [s2, nextIndex, arg] = infer (subContext s1, context), arg, nextIndex
  s3 = unify (subExp s2, opTea), [arg.tea, returnName]
  [(concat s3, s2, s1), nextIndex, (subExp s3, returnName)]





    for k, v of map.values
      addToMap concated, k, v
  concated

# mycroft = (context, node, environment) ->
#   if node.label is 'numerical'
