     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}"

        s3 = unify (subExp s2, op.tea), [arg.tea, returnName]
        expression.tea = (subExp s3, returnName)
        [(concat s3, s2, s1), nextIndex, expression]

unify = (t1, t2) ->
  unifyWith newMap(), [[t1, t2]]

        [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
