Report more kinds of coerce_fail reasons. compiler/type_assign.m: Split one coerce_fail into three parts, to simplify the generation of diagnostics that are specialized to their situations. compiler/typecheck_errors.m: Generate diagnostics for several coerce_fails, including the new ones. compiler/typecheck_coerce.m: Record the new kinds of coerce_fails. compiler/typecheck_coerce.m: compiler/typecheck_util.m: Move a predicate and its associated types from typecheck_coerce.m to typecheck_util.m to allow the new code in typecheck_errors.m to access it. tests/invalid/coerce_type_error.err_exp: tests/invalid/coerce_unify_tvars.err_exp: Expect the new diagnostics.