 callTyping = (ctx, call) ->
   return if ctx.shouldDefer()
   terms = _terms call
-  if terms.length is 1
-    malformed ctx, call, 'Missing an argument (for now)'
-    terms = join terms, [tea: toConstrained (markOrigin (ctx.freshTypeVariable star), call)]
-  call.tea = callInfer ctx, (_operator call), terms
+  op = _operator call
+  call.tea =
+    if terms.length is 1
+      # terms = join terms, [tea: toConstrained (markOrigin (ctx.freshTypeVariable star), call)]
+      callZeroInfer ctx, op, op.tea
+    else
+      callInfer ctx, (_operator call), terms
 
 callInfer = (ctx, operator, terms) ->
   # Curry the call

  callType = markOrigin (typeFn argTea.type, returnType), originalOperator
  unify ctx, operatorTea.type, callType
  new Constrained (join operatorTea.constraints, argTea.constraints), returnType

termsCompile = (ctx, list) ->
  termCompile ctx, term for term in list

flattenType = (types) ->
  if types[0].match /^\[\d+\]$/
    "[#{types[1..].join ' '}]"
  else if types[0] is 'Fn0'
    "(Fn #{types[1..].join ' '})"
  else
    "(#{types.join ' '})"

