           deferredExpression()
         else
           # Typing
-          if body and not body.tea
-            malformed ctx, body, 'Expression failed to type check'
-            #throw new Error "Body not typed"
           call.tea =
-            if body
+            if body and body.tea
               new Constrained (join body.tea.constraints, deferredConstraints),
                 withOrigin (typeFn paramTypeVars..., body.tea?.type), call
-            else
+            else if explicitType
               (copyOrigin (freshInstance ctx, explicitType), compiledType)
           # """λ#{paramNames.length}(function (#{listOf paramNames}) {
           #   #{compiledWheres}

  nonLabeledArgs = map _snd, filter (([label, value]) -> not label), args

  if nonLabeledArgs.length > positionalParams.length
    malformed ctx, call, 'Too many arguments'
  else
    extraParamNames = positionalParams[nonLabeledArgs.length..]
    extraParams = map token_, ("_#{n}" for n in extraParamNames)

  return if ctx.shouldDefer()
  terms = _terms call
  op = _operator call
  return if not all (tea for {tea} in terms)
  call.tea =
    if terms.length is 1
      # terms = join terms, [tea: toConstrained (markOrigin (ctx.freshTypeVariable star), call)]
