Use mkCastTy in subst_ty.
authorRichard Eisenberg <rae@cs.brynmawr.edu>
Fri, 7 Apr 2017 15:39:51 +0000 (11:39 -0400)
committerBen Gamari <ben@smart-cactus.org>
Wed, 3 May 2017 03:07:27 +0000 (23:07 -0400)
This allows mkCastTy to maintain invariants. Much like how
we use mkAppTy in subst_ty.

compiler/types/TyCoRep.hs
compiler/types/Type.hs
compiler/types/Type.hs-boot

index 52a0f1d..300ef80 100644 (file)
@@ -135,7 +135,7 @@ module TyCoRep (
 import {-# SOURCE #-} DataCon( dataConFullSig
                              , dataConUnivTyVarBinders, dataConExTyVarBinders
                              , DataCon, filterEqSpec )
-import {-# SOURCE #-} Type( isPredTy, isCoercionTy, mkAppTy
+import {-# SOURCE #-} Type( isPredTy, isCoercionTy, mkAppTy, mkCastTy
                           , tyCoVarsOfTypesWellScoped
                           , tyCoVarsOfTypeWellScoped
                           , coreView, typeKind )
@@ -2186,7 +2186,7 @@ subst_ty subst ty
                                (ForAllTy $! ((TvBndr $! tv') vis)) $!
                                             (subst_ty subst' ty)
     go (LitTy n)         = LitTy $! n
-    go (CastTy ty co)    = (CastTy $! (go ty)) $! (subst_co subst co)
+    go (CastTy ty co)    = (mkCastTy $! (go ty)) $! (subst_co subst co)
     go (CoercionTy co)   = CoercionTy $! (subst_co subst co)
 
 substTyVar :: TCvSubst -> TyVar -> Type
index e0a98e9..7750a35 100644 (file)
@@ -1222,10 +1222,6 @@ mkCastTy ty co | isReflexiveCo co = ty
 mkCastTy (CastTy ty co1) co2 = mkCastTy ty (co1 `mkTransCo` co2)
 mkCastTy ty co = CastTy ty co
 
-tyConTyBinders :: TyCon -> [TyBinder]
--- Return the tyConBinders in TyBinder form
-tyConTyBinders tycon = tyConBindersTyBinders (tyConBinders tycon)
-
 tyConBindersTyBinders :: [TyConBinder] -> [TyBinder]
 -- Return the tyConBinders in TyBinder form
 tyConBindersTyBinders = map to_tyb
@@ -1529,13 +1525,6 @@ caseBinder :: TyBinder           -- ^ binder to scrutinize
 caseBinder (Named v) f _ = f v
 caseBinder (Anon t)  _ d = d t
 
--- | Create a TCvSubst combining the binders and types provided.
--- NB: It is specifically OK if the lists are of different lengths.
--- Barely used
-zipTyBinderSubst :: [TyBinder] -> [Type] -> TCvSubst
-zipTyBinderSubst bndrs tys
-  = mkTvSubstPrs [ (tv, ty) | (Named (TvBndr tv _), ty) <- zip bndrs tys ]
-
 -- | Manufacture a new 'TyConBinder' from a 'TyBinder'. Anonymous
 -- 'TyBinder's are still assigned names as 'TyConBinder's, so we need
 -- the extra gunk with which to construct a 'Name'. Used when producing
index be7e4ed..2fc251a 100644 (file)
@@ -3,13 +3,14 @@
 module Type where
 import TyCon
 import Var ( TyVar )
-import {-# SOURCE #-} TyCoRep( Type, Kind )
+import {-# SOURCE #-} TyCoRep( Type, Coercion, Kind )
 import Util
 
 isPredTy     :: Type -> Bool
 isCoercionTy :: Type -> Bool
 
 mkAppTy :: Type -> Type -> Type
+mkCastTy :: Type -> Coercion -> Type
 piResultTy :: Type -> Type -> Type
 
 typeKind :: Type -> Kind