import VarSet
import BasicTypes
import Name
-import OccName
import MkId
import Class
import TyCon
import TcRnMonad
import Util ( count )
import Outputable
-
-import Data.List
\end{code}
mkDataTyConRhs :: [DataCon] -> AlgTyConRhs
mkDataTyConRhs cons
- = DataTyCon { data_cons = cons, is_enum = all isNullarySrcDataCon cons }
+ = DataTyCon {
+ data_cons = cons,
+ is_enum = -- We define datatypes with no constructors to not be
+ -- enumerations; this fixes trac #2578, Otherwise we
+ -- end up generating an empty table for
+ -- <mod>_<type>_closure_tbl
+ -- which is used by tagToEnum# to map Int# to constructors
+ -- in an enumeration. The empty table apparently upset
+ -- the linker.
+ not (null cons) &&
+ all isNullarySrcDataCon cons
+ }
mkNewTyConRhs :: Name -> TyCon -> DataCon -> TcRnIf m n AlgTyConRhs
-- Monadic because it makes a Name for the coercion TyCon