   [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)]
-
 
 
 

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

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

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