Make various assertions work when !DEBUG
[ghc-hetmet.git] / compiler / typecheck / TcGadt.lhs
index 987a4c6..b556e89 100644 (file)
 %************************************************************************
 
 \begin{code}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
 module TcGadt (
        Refinement, emptyRefinement, isEmptyRefinement, 
        gadtRefine, 
        refineType, refinePred, refineResType,
-       dataConCanMatch,
        tcUnifyTys, BindFlag(..)
   ) where
 
@@ -25,7 +31,6 @@ import Coercion
 import Type
 
 import TypeRep
-import DataCon
 import Var
 import VarEnv
 import VarSet
@@ -34,11 +39,8 @@ import Maybes
 import Control.Monad
 import Outputable
 import TcType
-
-#ifdef DEBUG
 import Unique
 import UniqFM
-#endif
 \end{code}
 
 
@@ -184,7 +186,7 @@ gadtRefine (Reft in_scope env1)
     do_one reft co_var = unify reft (TyVarTy co_var) ty1 ty2
        where
           (ty1,ty2) = splitCoercionKind (tyVarKind co_var)
-\end{code} 
+\end{code}
 
 %************************************************************************
 %*                                                                     *
@@ -242,29 +244,10 @@ 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))
-  where
-    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
 
-
 \end{code}
 
 
@@ -275,7 +258,6 @@ tryToBind tv_set tv | tv `elemVarSet` tv_set = BindMe
 %************************************************************************
 
 \begin{code}
-#ifdef DEBUG
 badReftElts :: InternalReft -> [(Unique, (Coercion,Type))]
 -- Return the BAD elements of the refinement
 -- Should be empty; used in asserions only
@@ -288,7 +270,6 @@ badReftElts env
                     | otherwise = False
        where
          (ty1,ty2) = coercionKind co
-#endif
 
 emptyInternalReft :: InternalReft
 emptyInternalReft = emptyVarEnv