     s: stringType
     c: charType
   [formatStringToken, args...] = _arguments call
+  if not formatStringToken
+    return malformed ctx, call, 'Format string required.'
   compiledArgs = termsCompile ctx, args
   if not all map _tea, args
     call.tea = toConstrained stringType

    not isSubset validVars, (findUnconstrained constraint)
  [ambiguous, retained] = partition isAmbiguous, retained
  if _notEmpty ambiguous
    {error:
      substitutionFail
        message: "Constraint #{printType ambiguous[0]} is ambiguous for inferred type #{printType finalType}"
        conflicts: [type.type.origin, ambiguous[0].origin]}
  else
    success: [deferred, retained]



# Returns deferred and retained constraints
deferConstraints = (ctx, constraints, type) ->
  result = tryDeferConstraints ctx, constraints, type
  if result.error
    ctx.extendSubstitution result.error
  result

tryDeferConstraints = (ctx, constraints, type) ->
  reducedConstraints = reduceConstraints ctx, constraints
  if not reducedConstraints.success
    return reducedConstraints
