           call.tea =
             if body
               new Constrained (join body.tea.constraints, deferredConstraints),
-                typeFn paramTypeVars..., body.tea?.type
+                markOrigin (typeFn paramTypeVars..., body.tea?.type), call
             else
               freshInstance ctx, explicitType
           # """λ#{paramNames.length}(function (#{listOf paramNames}) {

  terms = _terms call
  if terms.length is 1
    malformed ctx, call, 'Missing an argument (for now)'
    terms = join terms, [tea: toConstrained ctx.freshTypeVariable star]
  call.tea = callInfer ctx, (_operator call), terms

callInfer = (ctx, operator, terms) ->

retrieve = (expression, newForm) ->
  expression.tea = newForm.tea
  expression.malformed = newForm.malformed
  if newForm.tea?.type.origin is newForm
    markOrigin newForm.tea.type, expression

filterAst = (test, expression) ->
  join (filter test, [expression]),
