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 ^ "]")