Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : supercompiler

http://hackage.haskell.org/trac/ghc/changeset/75adf92acf2eb9a9a4e1adedba1e53acf5e1377e

>---------------------------------------------------------------

commit 75adf92acf2eb9a9a4e1adedba1e53acf5e1377e
Author: Max Bolingbroke <batterseapo...@hotmail.com>
Date:   Wed Apr 25 18:37:02 2012 +0100

    Make corresponding TyVar/KindVar changes to Match

>---------------------------------------------------------------

 compiler/supercompile/Supercompile/Drive/Match.hs |   16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/compiler/supercompile/Supercompile/Drive/Match.hs 
b/compiler/supercompile/Supercompile/Drive/Match.hs
index 02d6135..cade7f7 100644
--- a/compiler/supercompile/Supercompile/Drive/Match.hs
+++ b/compiler/supercompile/Supercompile/Drive/Match.hs
@@ -23,7 +23,7 @@ import Var        (TyVar, isTyVar, isId, tyVarKind, 
setVarType)
 import Id         (Id, idType, realIdUnfolding, idSpecialisation, 
zapFragileIdInfo)
 import IdInfo     (SpecInfo(..), emptySpecInfo)
 import VarEnv
-import TypeRep    (Kind, Type(..))
+import TypeRep    (Kind, Type(..), isKindVar)
 
 import qualified Control.Monad
 import Control.Monad.Fix
@@ -240,9 +240,10 @@ matchAltCon rn2 DefaultAlt                    DefaultAlt   
                 k =
 matchAltCon _ _ _ _ = fail "matchAltCon"
 
 matchVarBndr :: Bool -> RnEnv2 -> Var -> Var -> (RnEnv2 -> Match [MatchLR]) -> 
Match [MatchLR]
-matchVarBndr lambdaish rn2 v_l v_r | isId v_l,    isId v_r    = 
matchIdCoVarBndr lambdaish rn2 v_l v_r
-                                   | isTyVar v_l, isTyVar v_r = matchTyVarBndr 
            rn2 v_l v_r -- Type variable binders never lose work sharing
-                                   | otherwise                = fail 
"matchVarBndr"
+matchVarBndr lambdaish rn2 v_l v_r k | isId      v_l = guard "matchVarBndr: 
Id"      (isId      v_r) >> matchIdCoVarBndr lambdaish rn2 v_l v_r k
+                                     | isKindVar v_l = guard "matchVarBndr: 
KindVar" (isKindVar v_r) >> matchTyVarBndr             rn2 v_l v_r k -- Type 
variable binders never
+                                     | isTyVar   v_l = guard "matchVarBndr: 
TyVar"   (isTyVar   v_r) >> matchTyVarBndr             rn2 v_l v_r k -- lose 
work sharing
+                                     | otherwise     = panic "matchVarBndr"
 
 matchTyVarBndr :: RnEnv2 -> TyVar -> TyVar -> (RnEnv2 -> Match [MatchLR]) -> 
Match [MatchLR]
 matchTyVarBndr rn2 a_l a_r k = liftM2 (++) (matchKind rn2 (tyVarKind a_l) 
(tyVarKind a_r)) (k (rnBndr2 rn2 a_l a_r))
@@ -273,9 +274,10 @@ matchIdCoVarBndr' init_rn2 x_l x_r = (pprTraceSC 
"matchIdCoVarBndr'" (ppr (x_l,
 
 matchBndrExtras :: RnEnv2 -> Var -> Var -> Match [MatchLR]
 matchBndrExtras rn2 v_l v_r
-  | isId v_l,    isId v_r    = matchIdCoVarBndrExtras rn2 v_l v_r
-  | isTyVar v_l, isTyVar v_r = matchTyVarBndrExtras   rn2 v_l v_r
-  | otherwise                = fail "matchBndrExtras"
+  | isId      v_l = guard "matchBndrExtras: Id"      (isId      v_r) >> 
matchIdCoVarBndrExtras rn2 v_l v_r
+  | isKindVar v_l = guard "matchBndrExtras: KindVar" (isKindVar v_r) >> 
matchTyVarBndrExtras   rn2 v_l v_r
+  | isTyVar   v_l = guard "matchBndrExtras: TyVar"   (isTyVar   v_r) >> 
matchTyVarBndrExtras   rn2 v_l v_r
+  | otherwise     = panic "matchBndrExtras"
 
 matchTyVarBndrExtras :: RnEnv2 -> TyVar -> TyVar -> Match [MatchLR]
 matchTyVarBndrExtras rn2 a_l a_r = matchKind rn2 (tyVarKind a_l) (tyVarKind 
a_r)



_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to