Commit 2720c660 authored by simonpj's avatar simonpj
Browse files

[project @ 2003-10-28 13:15:58 by simonpj]

Wibbles about argument variance
parent 1c8b3c78
......@@ -360,6 +360,8 @@ hsIfaceDecl (TyClD decl@(TyData {}))
ifCtxt = hsIfaceCtxt (tcdCtxt decl),
ifCons = Unknown, ifRec = NonRecursive,
ifVrcs = [], ifGeneric = False }
-- I'm not sure that [] is right for ifVrcs, but
-- since we don't use them I'm not going to fiddle
hsIfaceDecl (TyClD decl@(ClassDecl {}))
= IfaceClass { ifName = rdrNameOcc (tcdName decl),
......
......@@ -333,11 +333,7 @@ calcTyConArgVrcs tyclss
initial_oi :: NameEnv (TyCon, ArgVrcs)
initial_oi = mkNameEnv [(tyConName tc, (tc, initial tc))
| tc <- tycons]
initial tc = if isAlgTyCon tc && isNothing (tyConDataCons_maybe tc) then
-- make pessimistic assumption (and warn)
abstractVrcs tc
else
replicate (tyConArity tc) (False,False)
initial tc = replicate (tyConArity tc) (False,False)
tcaoFix :: NameEnv (TyCon, ArgVrcs) -- initial ArgVrcs per tycon
-> NameEnv (TyCon, ArgVrcs) -- fixpointed ArgVrcs per tycon
......@@ -358,10 +354,7 @@ calcTyConArgVrcs tyclss
-> ArgVrcs -- new ArgVrcs for tycon
tcaoIter oi tc | isAlgTyCon tc
= if null data_cons then
abstractVrcs tc -- Data types with no constructors
else
map (\v -> anyVrc (vrcInTy (lookup oi) v) argtys) vs
= map (\v -> anyVrc (vrcInTy (lookup oi) v) argtys) vs
where
data_cons = tyConDataCons tc
vs = tyConTyVars tc
......@@ -376,20 +369,6 @@ calcTyConArgVrcs tyclss
Just (_, pms) -> pms
Nothing -> tyConArgVrcs tc
-- We use the already-computed result for tycons not in this SCC
abstractVrcs :: TyCon -> ArgVrcs
abstractVrcs tc =
#ifdef DEBUG
pprTrace "Vrc: abstract tycon:" (ppr tc) $
#endif
warn_abstract_vrcs `seq` replicate (tyConArity tc) (True,True)
warn_abstract_vrcs
-- we pull the message out as a CAF so the warning only appears *once*
= trace ("WARNING: tyConArgVrc info inaccurate due to unavailable constructors.\n"
++ " Use -fno-prune-tydecls to fix.") $
()
\end{code}
......
......@@ -195,8 +195,8 @@ data DataConDetails datacon
= DataCons [datacon] -- Its data constructors, with fully polymorphic types
-- A type can have zero constructors
| Unknown -- We're importing this data type from an hi-boot file
-- and we don't know what its constructors are
| Unknown -- Used only when We're importing this data type from an
-- hi-boot file, so we don't know what its constructors are
visibleDataCons (DataCons cs) = cs
visibleDataCons other = []
......@@ -452,7 +452,7 @@ tyConHasGenerics other = False -- Synonyms
tyConDataConDetails :: TyCon -> DataConDetails DataCon
tyConDataConDetails (AlgTyCon {dataCons = cons}) = cons
tyConDataConDetails (TupleTyCon {dataCon = con}) = DataCons [con]
tyConDataConDetails other = Unknown
tyConDataConDetails other = pprPanic "tyConDataConDetails" (ppr other)
tyConDataCons :: TyCon -> [DataCon]
-- It's convenient for tyConDataCons to return the
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment