[commit: ghc] wip/tc/typeable-with-kinds: Use the kind itself in the evidence for `Typeable` (65dc366)
git at git.haskell.org
git at git.haskell.org
Sat Mar 7 16:43:04 UTC 2015
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/tc/typeable-with-kinds
Link : http://ghc.haskell.org/trac/ghc/changeset/65dc366b0d0d6c6cf0e03c89aed6682349d0727c/ghc
>---------------------------------------------------------------
commit 65dc366b0d0d6c6cf0e03c89aed6682349d0727c
Author: Iavor S. Diatchki <diatchki at galois.com>
Date: Tue Feb 10 10:10:59 2015 -0800
Use the kind itself in the evidence for `Typeable`
>---------------------------------------------------------------
65dc366b0d0d6c6cf0e03c89aed6682349d0727c
compiler/deSugar/DsBinds.hs | 4 +---
compiler/typecheck/TcEvidence.hs | 15 ++-------------
compiler/typecheck/TcInteract.hs | 8 +++++---
3 files changed, 8 insertions(+), 19 deletions(-)
diff --git a/compiler/deSugar/DsBinds.hs b/compiler/deSugar/DsBinds.hs
index 3c50d1e..3fb42bf 100644
--- a/compiler/deSugar/DsBinds.hs
+++ b/compiler/deSugar/DsBinds.hs
@@ -889,7 +889,7 @@ dsEvTypeable ev =
(rep,ty) <-
case ev of
EvTypeableTyCon tc ks ts ->
- do let ty = mkTyConApp tc (map toKind ks ++ map snd ts)
+ do let ty = mkTyConApp tc (ks ++ map snd ts)
kReps <- mapM kindRep ks
tReps <- mapM (getRep tyCl) ts
return (tyConRep tc kReps tReps, ty)
@@ -928,8 +928,6 @@ dsEvTypeable ev =
(getTypeableCo tc ty)
where proxyT = mkProxyPrimTy (typeKind ty) ty
- toKind (EvTypeableKind kc ks) = mkTyConApp kc (map toKind ks)
-
kindRep k = undefined
tyConRep tc kReps tReps = undefined
tyAppRep t1 t2 = undefined
diff --git a/compiler/typecheck/TcEvidence.hs b/compiler/typecheck/TcEvidence.hs
index fdd90da..3eb5a31 100644
--- a/compiler/typecheck/TcEvidence.hs
+++ b/compiler/typecheck/TcEvidence.hs
@@ -17,7 +17,7 @@ module TcEvidence (
EvTerm(..), mkEvCast, evVarsOfTerm,
EvLit(..), evTermCoercion,
EvCallStack(..),
- EvTypeable(..), EvTypeableKind(..),
+ EvTypeable(..),
-- TcCoercion
TcCoercion(..), LeftOrRight(..), pickLR,
@@ -735,7 +735,7 @@ data EvTerm
-- | Instructions on how to make a 'Typeable' dictionary.
data EvTypeable
- = EvTypeableTyCon TyCon [EvTypeableKind] [(EvTerm, Type)]
+ = EvTypeableTyCon TyCon [Kind] [(EvTerm, Type)]
-- ^ Dicitionary for concrete type constructors.
| EvTypeableTyApp (EvTerm,Type) (EvTerm,Type)
@@ -747,11 +747,6 @@ data EvTypeable
deriving ( Data.Data, Data.Typeable )
--- | Instructions on how to make evidence for the typeable representation
--- of a kind.
-data EvTypeableKind = EvTypeableKind TyCon [EvTypeableKind]
- deriving ( Data.Data, Data.Typeable )
-
data EvLit
= EvNum Integer
| EvStr FastString
@@ -1112,12 +1107,6 @@ instance Outputable EvTypeable where
EvTypeableTyApp t1 t2 -> parens (ppr (fst t1) <+> ppr (fst t2))
EvTypeableTyLit x -> ppr x
-instance Outputable EvTypeableKind where
- ppr (EvTypeableKind kc ks) =
- case ks of
- [] -> ppr kc
- _ -> parens (ppr kc <+> sep (map ppr ks))
-
----------------------------------------------------------------------
-- Helper functions for dealing with IP newtype-dictionaries
diff --git a/compiler/typecheck/TcInteract.hs b/compiler/typecheck/TcInteract.hs
index 7ba92a8..3e6424b 100644
--- a/compiler/typecheck/TcInteract.hs
+++ b/compiler/typecheck/TcInteract.hs
@@ -1876,10 +1876,12 @@ matchTypeableClass clas k t loc
mkEv [ct1,ct2] (EvTypeableTyApp (ctEvTerm ct1,f) (ctEvTerm ct2,tk))
- -- Representation for concrete kinds.
+ -- Representation for concrete kinds. We just use the kind itself,
+ -- but first check to make sure that it is "simple" (i.e., made entirely
+ -- out of kind constructors).
kindRep ki = do (kc,ks) <- splitTyConApp_maybe ki
- kReps <- mapM kindRep ks
- return (EvTypeableKind kc kReps)
+ mapM_ kindRep ks
+ return ki
-- Emit a `Typeable` constraint for the given type.
More information about the ghc-commits
mailing list