X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fiface%2FLoadIface.lhs;h=3faf00c1e26ff8ad4e8e28420aa016cc78b99ef1;hb=086f5cc85d2371e6f6d2ebafa68732b791772aff;hp=ecba1d62828f83fa3059cdf3ae8d5de0c83eb464;hpb=26637fd8651f55fd424f3f6190220335ab5b80e9;p=ghc-hetmet.git diff --git a/compiler/iface/LoadIface.lhs b/compiler/iface/LoadIface.lhs index ecba1d6..3faf00c 100644 --- a/compiler/iface/LoadIface.lhs +++ b/compiler/iface/LoadIface.lhs @@ -42,8 +42,9 @@ import Name ( Name {-instance NamedThing-}, getOccName, import NameEnv import MkId ( seqId ) import Module -import OccName ( OccName, mkOccEnv, lookupOccEnv, mkClassTyConOcc, mkClassDataConOcc, - mkSuperDictSelOcc, mkDataConWrapperOcc, mkDataConWorkerOcc ) +import OccName ( OccName, mkOccEnv, lookupOccEnv, mkClassTyConOcc, + mkClassDataConOcc, mkSuperDictSelOcc, + mkDataConWrapperOcc, mkDataConWorkerOcc ) import SrcLoc ( importedSrcLoc ) import Maybes ( MaybeErr(..) ) import ErrUtils ( Message ) @@ -334,8 +335,11 @@ ifaceDeclSubBndrs :: IfaceDecl -> [OccName] -- Deeply revolting, because it has to predict what gets bound, -- especially the question of whether there's a wrapper for a datacon -ifaceDeclSubBndrs (IfaceClass {ifCtxt = sc_ctxt, ifName = cls_occ, ifSigs = sigs }) - = [tc_occ, dc_occ, dcww_occ] ++ +ifaceDeclSubBndrs IfaceClass { ifCtxt = sc_ctxt, + ifName = cls_occ, + ifSigs = sigs } + = co_occs ++ + [tc_occ, dc_occ, dcww_occ] ++ [op | IfaceClassOp op _ _ <- sigs] ++ [mkSuperDictSelOcc n cls_occ | n <- [1..n_ctxt]] where @@ -343,16 +347,19 @@ ifaceDeclSubBndrs (IfaceClass {ifCtxt = sc_ctxt, ifName = cls_occ, ifSigs = sigs n_sigs = length sigs tc_occ = mkClassTyConOcc cls_occ dc_occ = mkClassDataConOcc cls_occ + co_occs | is_newtype = [mkNewTyCoOcc tc_occ] + | otherwise = [] dcww_occ | is_newtype = mkDataConWrapperOcc dc_occ -- Newtypes have wrapper but no worker | otherwise = mkDataConWorkerOcc dc_occ -- Otherwise worker but no wrapper is_newtype = n_sigs + n_ctxt == 1 -- Sigh -ifaceDeclSubBndrs (IfaceData {ifCons = IfAbstractTyCon}) +ifaceDeclSubBndrs IfaceData {ifCons = IfAbstractTyCon} = [] -- Newtype -ifaceDeclSubBndrs (IfaceData {ifCons = IfNewTyCon (IfVanillaCon { ifConOcc = con_occ, - ifConFields = fields})}) - = fields ++ [con_occ, mkDataConWrapperOcc con_occ] +ifaceDeclSubBndrs IfaceData {ifCons = IfNewTyCon (IfVanillaCon { + ifConOcc = con_occ, + ifConFields = fields})} + = fields ++ [con_occ, mkDataConWrapperOcc con_occ] -- Wrapper, no worker; see MkId.mkDataConIds ifaceDeclSubBndrs (IfaceData {ifCons = IfDataTyCon cons}) @@ -360,7 +367,7 @@ ifaceDeclSubBndrs (IfaceData {ifCons = IfDataTyCon cons}) ++ concatMap dc_occs cons where fld_occs (IfVanillaCon { ifConFields = fields }) = fields - fld_occs (IfGadtCon {}) = [] + fld_occs (IfGadtCon {}) = [] dc_occs con_decl | has_wrapper = [con_occ, work_occ, wrap_occ] | otherwise = [con_occ, work_occ]