From 8b110959e81ce4620448360c393b3108d0cb9eb8 Mon Sep 17 00:00:00 2001 From: ralf Date: Tue, 16 Mar 2004 13:46:54 +0000 Subject: [PATCH] [project @ 2004-03-16 13:46:54 by ralf] Adapted deriving Data a bit. So everything should be now as shown in the Boilerplate II paper. --- ghc/compiler/typecheck/TcGenDeriv.lhs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ghc/compiler/typecheck/TcGenDeriv.lhs b/ghc/compiler/typecheck/TcGenDeriv.lhs index e15574a..d051db5 100644 --- a/ghc/compiler/typecheck/TcGenDeriv.lhs +++ b/ghc/compiler/typecheck/TcGenDeriv.lhs @@ -1032,7 +1032,8 @@ we generate $cT1 = mkDataCon $dT "T1" Prefix $cT2 = mkDataCon $dT "T2" Prefix - $dT = mkDataType "Module.T" [$con_T1, $con_T2] + $dT = mkDataType "Module.T" [] [$con_T1, $con_T2] + -- the [] is for field labels. instance (Data a, Data b) => Data (T a b) where gfoldl k z (T1 a b) = z T `k` a `k` b @@ -1115,8 +1116,11 @@ gen_Data_binds fix_env tycon [ -- nlHsIntLit (toInteger (dataConTag dc)), -- Tag nlHsVar data_type_name, -- DataType nlHsLit (mkHsString (occNameUserString dc_occ)), -- String name + nlList labels, -- Field labels nlHsVar fixity] -- Fixity where + labels = map (nlHsLit . mkHsString . getOccString . fieldLabelName) + (dataConFieldLabels dc) dc_occ = getOccName dc is_infix = isDataSymOcc dc_occ fixity | is_infix = infix_RDR @@ -1126,9 +1130,9 @@ gfoldl_RDR = varQual_RDR gENERICS_Name FSLIT("gfoldl") fromConstr_RDR = varQual_RDR gENERICS_Name FSLIT("fromConstr") toConstr_RDR = varQual_RDR gENERICS_Name FSLIT("toConstr") dataTypeOf_RDR = varQual_RDR gENERICS_Name FSLIT("dataTypeOf") -mkConstr_RDR = varQual_RDR gENERICS_Name FSLIT("mkDataCon") +mkConstr_RDR = varQual_RDR gENERICS_Name FSLIT("mkConstr") mkDataType_RDR = varQual_RDR gENERICS_Name FSLIT("mkDataType") -conIndex_RDR = varQual_RDR gENERICS_Name FSLIT("conIndex") +conIndex_RDR = varQual_RDR gENERICS_Name FSLIT("constrIndex") prefix_RDR = dataQual_RDR gENERICS_Name FSLIT("Prefix") infix_RDR = dataQual_RDR gENERICS_Name FSLIT("Infix") \end{code} -- 1.7.10.4