Commit 71d2bf92 authored by's avatar
Browse files

isDataTyCon should be False for all type families, even data type families

isDataTyCon advertises that it's true of "data types that are
definitely represented by heap-allocated constructors.  These are
srcutinised by Core-level @case@ expressions, and they get info tables
allocated for them."

Type-family TyCons never have this property, not even data type families.
It's the *instance* TyCons that do.

I hope that this change does not break anything that somehow relied
on the old (wrong) semantics.
parent 59a4ad63
......@@ -14,7 +14,6 @@ module TcGadt (
Refinement, emptyRefinement, isEmptyRefinement,
refineType, refinePred, refineResType,
tcUnifyTys, BindFlag(..)
) where
......@@ -241,30 +240,11 @@ fixTvSubstEnv in_scope env
fixpt = mapVarEnv (substTy (mkTvSubst in_scope fixpt)) env
dataConCanMatch :: [Type] -> DataCon -> Bool
-- Returns True iff the data con can match a scrutinee of type (T tys)
-- where T is the type constructor for the data con
-- Instantiate the equations and try to unify them
dataConCanMatch tys con
| null eq_spec = True -- Common
| all isTyVarTy tys = True -- Also common
| otherwise
= isJust (tcUnifyTys (\tv -> BindMe)
(map (substTyVar subst . fst) eq_spec)
(map snd eq_spec))
dc_tvs = dataConUnivTyVars con
eq_spec = dataConEqSpec con
subst = zipTopTvSubst dc_tvs tys
tryToBind :: TyVarSet -> TyVar -> BindFlag
tryToBind tv_set tv | tv `elemVarSet` tv_set = BindMe
| otherwise = AvoidMe
......@@ -616,9 +616,14 @@ isDataTyCon :: TyCon -> Bool
-- True for all @data@ types
-- False for newtypes
-- unboxed tuples
-- type families
-- NB: for a data type family, T, only the *instance* tycons are
-- get an info table etc. The family tycon does not.
-- Hence False for OpenTyCon
isDataTyCon tc@(AlgTyCon {algTcRhs = rhs})
= case rhs of
OpenTyCon {} -> not (otIsNewtype rhs)
OpenTyCon {} -> False
DataTyCon {} -> True
NewTyCon {} -> False
AbstractTyCon -> False -- We don't know, so return False
Supports Markdown
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