     else
       # Reference
       if (isReference expression) or expression.label is 'keyword'
-        # TODO: replace free type variables with new unused names
+        # TODO: replace free type variables with new unused names in function
         concreteType = lookupInMap context, expression.token
         unless concreteType
           throw new Error "Unbound variable #{expression.token}"

  crouch expression, (node) ->
    node.tea = subExp s, node.tea if node.tea

infer = (context, expression, nameIndex) ->
  switch expression.label
    when 'numerical'

        [s1, nextIndex, expression]

      # Call
      else if (Array.isArray expression) and expression.length > 2
        [op, arg] = inside expression
        # assume call.length is 2
        returnName = freshName nameIndex
