diff options
author | simonpj@microsoft.com <unknown> | 2010-09-14 11:38:50 +0000 |
---|---|---|
committer | simonpj@microsoft.com <unknown> | 2010-09-14 11:38:50 +0000 |
commit | 13adf25f23091c8ef1a14cfb11ed9379ffbaed90 (patch) | |
tree | 557bb930da2020b7c2d66ff3e212bfd14213e6c4 | |
parent | afe4534704e8e0c25e2f90c6c0a2e397ecef24db (diff) | |
download | haskell-13adf25f23091c8ef1a14cfb11ed9379ffbaed90.tar.gz |
Comment on what an "enumeration" type is
-rw-r--r-- | compiler/iface/BuildTyCl.lhs | 10 | ||||
-rw-r--r-- | compiler/types/TyCon.lhs | 13 |
2 files changed, 14 insertions, 9 deletions
diff --git a/compiler/iface/BuildTyCl.lhs b/compiler/iface/BuildTyCl.lhs index de57feb928..4319d1fc18 100644 --- a/compiler/iface/BuildTyCl.lhs +++ b/compiler/iface/BuildTyCl.lhs @@ -112,15 +112,9 @@ mkDataTyConRhs :: [DataCon] -> AlgTyConRhs mkDataTyConRhs 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) && + is_enum = not (null cons) && all isNullarySrcDataCon cons + -- See Note [Enumeration types] in TyCon } mkNewTyConRhs :: Name -> TyCon -> DataCon -> TcRnIf m n AlgTyConRhs diff --git a/compiler/types/TyCon.lhs b/compiler/types/TyCon.lhs index e7f8507d81..235097369f 100644 --- a/compiler/types/TyCon.lhs +++ b/compiler/types/TyCon.lhs @@ -440,7 +440,7 @@ data AlgTyConRhs -- (see the tag assignment in DataCon.mkDataCon) is_enum :: Bool -- ^ Cached value: is this an enumeration type? - -- (See 'isEnumerationTyCon') + -- See Note [Enumeration types] } -- | Information about those 'TyCon's derived from a @newtype@ declaration @@ -580,6 +580,16 @@ data CoTyConDesc | CoUnsafe \end{code} +Note [Enumeration types] +~~~~~~~~~~~~~~~~~~~~~~~~ +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. + Note [Newtype coercions] ~~~~~~~~~~~~~~~~~~~~~~~~ The NewTyCon field nt_co is a a TyCon (a coercion constructor in fact) @@ -983,6 +993,7 @@ isGadtSyntaxTyCon _ = False -- | Is this an algebraic 'TyCon' which is just an enumeration of values? isEnumerationTyCon :: TyCon -> Bool +-- See Note [Enumeration types] in TyCon isEnumerationTyCon (AlgTyCon {algTcRhs = DataTyCon { is_enum = res }}) = res isEnumerationTyCon (TupleTyCon {tyConArity = arity}) = arity == 0 isEnumerationTyCon _ = False |