     return "#{type}"
 
 prettyPrint = (type) ->
+  prettyPrintWith highlightType, type
+
+plainPrettyPrint = (type) ->
+  prettyPrintWith printType, type
+
+prettyPrintWith = (printer, type) ->
   if type.ForAll
-    prettyPrint type.type
+    prettyPrintWith printer, type.type
   else if type.Constrained
     if _notEmpty type.constraints
-      (map highlightType, join [type.type], type.constraints).join ' '
+      (map printer, join [type.type], type.constraints).join ' '
     else
-      highlightType type.type
+      printer type.type
 
 printType = (type) ->
   if type.TypeVariable

  else
    finalType = addConstraintsFrom ctx, {id, type}, substitute ctx.substitution, type
    classParams = dictsForConstraint ctx, finalType.constraints
    if classParams.length > 0
      (irFunctionTranslate ctx,
        params: arity
        body: [(jsReturn (jsCall (validIdentifier name), (join classParams, arity)))])
    else
      validIdentifier name



findSubClassParam = (ctx, constraint) ->
  toClassName = (c) -> c.className
  classParams = ctx.classParamsForType constraint
  throw new Error "No params for #{safePrintType constraint}" unless classParams
  for className, dict of values classParams
    if chain = findSuperClassChain ctx, className, constraint.className
      return accessList dict, chain
  throw new Error "Couldn't find dict for #{safePrintType constraint}"
