let errstr = function
| HierarchyIssue(s) -> s
| DuplicateClasses(klasses) -> (match klasses with
| [klass] -> "Multiple classes named " ^ klass
| _ -> "Multiple classes share the names [" ^ (String.concat ", " klasses) ^ "]")
| DuplicateVariables(list) -> String.concat "\n" (List.map dupvar list)
| DuplicateFields(list) -> String.concat "\n" (List.map dupfield list)
| UnknownTypes(types) -> String.concat "\n" (List.map unknowntypes types)
| ConflictingMethods(list) -> String.concat "\n" (List.map dupmeth list)
| ConflictingInherited(list) -> String.concat "\n" (List.map dupinherit list)
| PoorlyTypedSigs(list) -> String.concat "\n" (List.map badsig list)
| Uninstantiable(klasses) -> (match klasses with
| [klass] -> "Class " ^ klass ^ " does not have a usable init."
| _ -> "Multiple classes are not instantiable: [" ^ String.concat ", " klasses ^ "]")
| ConflictingRefinements(list) -> String.concat "\n" (List.map dupref list)
| MultipleMains(klasses) -> (match klasses with
| [klass] -> "Class " ^ klass ^ " has multiple mains defined."
| _ -> "Multiple classes have more than one main: [" ^ String.concat ", " klasses ^ "]")