     "undefined"
   else
     throw new Error "Unrecognized type in printType"
+
+printTypes = (list) ->
+  map printType, list
 
 printTypeToHtml = (type) ->
   if type.TypeVariable

  #     found-or-equals (fn [found item]
  #       (= what item))

  'nested pattern matching'
  """
    f (fn [x]


  if ctx.isFinallyTyped name, scopeIndex
    # TODO: check class constraints
    declaredType = ctx.type name
    explicitType = copyOrigin (freshInstance ctx, declaredType), declaredType.type
    # Check the declared type
    updatedDeclaredType = quantifyUnbound ctx, explicitType#(substitute ctx.substitution, explicitType)
    unify ctx, currentType.type, explicitType.type
    unifiedType = explicitType# substitute ctx.substitution, explicitType
    inferredType = quantifyUnbound ctx, unifiedType
    if not typeEq inferredType, updatedDeclaredType
      declaredTypeTooGeneral ctx, inferredType, updatedDeclaredType, unifiedType, declaredType
    # Context reduction
    isDeclaredConstraint = (c) ->
      entailed = entail ctx, unifiedType.constraints, c
    notDeclared = filter (__ _not, isDeclaredConstraint), constraints #(substituteList ctx.substitution, constraints)
    {success} = deferConstraints ctx, notDeclared, currentType, scopeIndex
    if success
      [deferredConstraints, retainedConstraints] = success
      if _notEmpty retainedConstraints
        for constraint in retainedConstraints
          declaredTypeMissingConstraint ctx, name, constraint
  else
    if not ctx.isAtNonDeferrableDefinition()
      {success} = deferConstraints ctx,
