From 5f0c4f9aa291cdc291fcdc0c4a30fdce1f91230d Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Thu, 27 Jul 2006 16:08:32 +0000 Subject: [PATCH] Improve error message for deriving --- compiler/typecheck/TcDeriv.lhs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/compiler/typecheck/TcDeriv.lhs b/compiler/typecheck/TcDeriv.lhs index 95d9697..22168fc 100644 --- a/compiler/typecheck/TcDeriv.lhs +++ b/compiler/typecheck/TcDeriv.lhs @@ -729,9 +729,9 @@ solveDerivEqns overlap_flag orig_eqns gen_soln (_, clas, tc,tyvars,deriv_rhs) = setSrcSpan (srcLocSpan (getSrcLoc tc)) $ do { let inst_tys = [mkTyConApp tc (mkTyVarTys tyvars)] - ; theta <- addErrCtxt (derivInstCtxt [] clas inst_tys) $ + ; theta <- addErrCtxt (derivInstCtxt1 clas inst_tys) $ tcSimplifyDeriv tc tyvars deriv_rhs - ; addErrCtxt (derivInstCtxt theta clas inst_tys) $ + ; addErrCtxt (derivInstCtxt2 theta clas inst_tys) $ checkValidInstance tyvars theta clas inst_tys ; return (sortLe (<=) theta) } -- Canonicalise before returning the soluction where @@ -960,8 +960,12 @@ derivCtxt :: TyCon -> SDoc derivCtxt tycon = ptext SLIT("When deriving instances for") <+> quotes (ppr tycon) -derivInstCtxt theta clas inst_tys - = hang (ptext SLIT("In the derived instance")) - 2 (ptext SLIT("instance") <+> sep [pprThetaArrow theta, pprClassPred clas inst_tys]) +derivInstCtxt1 clas inst_tys + = ptext SLIT("When deriving the instance for") <+> quotes (pprClassPred clas inst_tys) + +derivInstCtxt2 theta clas inst_tys + = vcat [ptext SLIT("In the derived instance declaration"), + nest 2 (ptext SLIT("instance") <+> sep [pprThetaArrow theta, + pprClassPred clas inst_tys])] \end{code} -- 1.7.10.4