From 54ef1c3c9ef6cecd968d5c1ed6ded3a1a201a870 Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Mon, 4 Aug 2008 14:15:03 +0000 Subject: [PATCH] Fix Trac #2433 (deriving Typeable) --- compiler/typecheck/TcDeriv.lhs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/typecheck/TcDeriv.lhs b/compiler/typecheck/TcDeriv.lhs index 7a2954a..e4d66a6 100644 --- a/compiler/typecheck/TcDeriv.lhs +++ b/compiler/typecheck/TcDeriv.lhs @@ -467,13 +467,17 @@ mkEqnHelp orig tvs cls cls_tys tc_app mtheta -- we want to check the instance tycon, not the family tycon -- For standalone deriving (mtheta /= Nothing), - -- check that all the data constructors are in scope + -- check that all the data constructors are in scope. + -- No need for this when deriving Typeable, becuase we don't need + -- the constructors for that. -- By this time we know that the thing is algebraic -- because we've called checkInstHead in derivingStandalone ; rdr_env <- getGlobalRdrEnv ; let hidden_data_cons = isAbstractTyCon rep_tc || any not_in_scope (tyConDataCons rep_tc) not_in_scope dc = null (lookupGRE_Name rdr_env (dataConName dc)) - ; checkTc (isNothing mtheta || not hidden_data_cons) + ; checkTc (isNothing mtheta || + not hidden_data_cons || + className cls `elem` typeableClassNames) (derivingHiddenErr tycon) ; mayDeriveDataTypeable <- doptM Opt_DeriveDataTypeable -- 1.7.10.4