diff --git a/Control/Comonad/Trans/Discont/Lazy.hs b/Control/Comonad/Trans/Discont/Lazy.hs
--- a/Control/Comonad/Trans/Discont/Lazy.hs
+++ b/Control/Comonad/Trans/Discont/Lazy.hs
@@ -34,6 +34,24 @@
 import Control.Comonad
 import Control.Comonad.Trans.Class
 
+#ifdef GHC_TYPEABLE
+import Data.Typeable
+
+instance (Typeable s, Typeable1 w) => Typeable1 (DiscontT s w) where
+  typeOf1 dswa = mkTyConApp discontTTyCon [typeOf (s dswa), typeOf1 (w dswa)]
+    where 
+      s :: DiscontT s w a -> s
+      s = undefined
+      w :: DiscontT s w a -> w a
+      w = undefined
+
+discontTTyCon :: TyCon
+discontTTyCon = mkTyCon "Control.Comonad.Trans.Discont.Lazy.DiscontT" 
+{-# NOINLINE discontTTyCon #-}
+
+#endif
+
+
 type Discont s = DiscontT s Identity
 
 data DiscontT s w a = DiscontT (w s -> a) (w s)
diff --git a/Control/Comonad/Trans/Discont/Strict.hs b/Control/Comonad/Trans/Discont/Strict.hs
--- a/Control/Comonad/Trans/Discont/Strict.hs
+++ b/Control/Comonad/Trans/Discont/Strict.hs
@@ -34,6 +34,22 @@
 import Control.Comonad
 import Control.Comonad.Trans.Class
 
+#ifdef GHC_TYPEABLE
+import Data.Typeable
+
+instance (Typeable s, Typeable1 w) => Typeable1 (DiscontT s w) where
+  typeOf1 dswa = mkTyConApp discontTTyCon [typeOf (s dswa), typeOf1 (w dswa)]
+    where 
+      s :: DiscontT s w a -> s
+      s = undefined
+      w :: DiscontT s w a -> w a 
+      w = undefined
+
+discontTTyCon :: TyCon
+discontTTyCon = mkTyCon "Control.Comonad.Trans.Discont.Strict.DiscontT" 
+{-# NOINLINE discontTTyCon #-}
+#endif
+
 type Discont s = DiscontT s Identity
 
 data DiscontT s w a = DiscontT (w s -> a) (w s)
diff --git a/Control/Comonad/Trans/Env/Lazy.hs b/Control/Comonad/Trans/Env/Lazy.hs
--- a/Control/Comonad/Trans/Env/Lazy.hs
+++ b/Control/Comonad/Trans/Env/Lazy.hs
@@ -36,6 +36,49 @@
 import Data.Functor.Identity
 import Data.Monoid
 
+#ifdef GHC_TYPEABLE
+import Data.Data
+
+instance (Typeable s, Typeable1 w) => Typeable1 (EnvT s w) where
+  typeOf1 dswa = mkTyConApp envTTyCon [typeOf (s dswa), typeOf1 (w dswa)]
+    where
+      s :: EnvT s w a -> s
+      s = undefined
+      w :: EnvT s w a -> w a
+      w = undefined
+
+envTTyCon :: TyCon
+envTTyCon = mkTyCon "Control.Comonad.Trans.Env.Lazy.EnvT"
+{-# NOINLINE envTTyCon #-}
+
+instance (Typeable s, Typeable1 w, Typeable a) => Typeable (EnvT s w a) where
+  typeOf = typeOfDefault
+
+instance
+  ( Typeable e
+  , Typeable1 w
+  , Data e
+  , Data (w a)
+  , Data a
+  ) => Data (EnvT e w a) where
+    gfoldl f z (EnvT e wa) = z EnvT `f` e `f` wa
+    toConstr _ = envTConstr
+    gunfold k z c = case constrIndex c of
+        1 -> k (k (z EnvT))
+        _ -> error "gunfold"
+    dataTypeOf _ = envTDataType
+    dataCast1 f = gcast1 f
+
+envTConstr :: Constr
+envTConstr = mkConstr envTDataType "EnvT" [] Prefix
+{-# NOINLINE envTConstr #-}
+
+envTDataType :: DataType
+envTDataType = mkDataType "Control.Comonad.Trans.Env.Lazy.EnvT" [envTConstr]
+{-# NOINLINE envTDataType #-}
+
+#endif
+
 type Env e = EnvT e Identity
 data EnvT e w a = EnvT e (w a)
 
@@ -74,3 +117,4 @@
 
 local :: (e -> e) -> EnvT e w a -> EnvT e w a
 local f ~(EnvT e wa) = EnvT (f e) wa
+
diff --git a/Control/Comonad/Trans/Env/Strict.hs b/Control/Comonad/Trans/Env/Strict.hs
--- a/Control/Comonad/Trans/Env/Strict.hs
+++ b/Control/Comonad/Trans/Env/Strict.hs
@@ -36,6 +36,49 @@
 import Data.Functor.Identity
 import Data.Monoid
 
+#ifdef GHC_TYPEABLE
+import Data.Data
+
+instance (Typeable s, Typeable1 w) => Typeable1 (EnvT s w) where
+  typeOf1 dswa = mkTyConApp envTTyCon [typeOf (s dswa), typeOf1 (w dswa)]
+    where
+      s :: EnvT s w a -> s
+      s = undefined
+      w :: EnvT s w a -> w a
+      w = undefined
+
+envTTyCon :: TyCon
+envTTyCon = mkTyCon "Control.Comonad.Trans.Env.Strict.EnvT"
+{-# NOINLINE envTTyCon #-}
+
+instance (Typeable s, Typeable1 w, Typeable a) => Typeable (EnvT s w a) where
+  typeOf = typeOfDefault
+
+instance 
+  ( Typeable e
+  , Typeable1 w
+  , Data e
+  , Data (w a)
+  , Data a
+  ) => Data (EnvT e w a) where
+    gfoldl f z (EnvT e wa) = z EnvT `f` e `f` wa
+    toConstr _ = envTConstr
+    gunfold k z c = case constrIndex c of
+        1 -> k (k (z EnvT))
+        _ -> error "gunfold"
+    dataTypeOf _ = envTDataType
+    dataCast1 f = gcast1 f
+
+envTConstr :: Constr
+envTConstr = mkConstr envTDataType "EnvT" [] Prefix
+{-# NOINLINE envTConstr #-}
+
+envTDataType :: DataType
+envTDataType = mkDataType "Control.Comonad.Trans.Env.Strict.EnvT" [envTConstr]
+{-# NOINLINE envTDataType #-}
+
+#endif
+
 type Env e = EnvT e Identity
 data EnvT e w a = EnvT e (w a)
 
@@ -74,3 +117,4 @@
 
 local :: (e -> e) -> EnvT e w a -> EnvT e w a
 local f (EnvT e wa) = EnvT (f e) wa
+
diff --git a/Control/Comonad/Trans/Store/Lazy.hs b/Control/Comonad/Trans/Store/Lazy.hs
--- a/Control/Comonad/Trans/Store/Lazy.hs
+++ b/Control/Comonad/Trans/Store/Lazy.hs
@@ -35,6 +35,21 @@
 import Control.Comonad.Trans.Class
 import Data.Functor.Identity
 
+#ifdef GHC_TYPEABLE
+import Data.Typeable
+instance (Typeable s, Typeable1 w) => Typeable1 (StoreT s w) where
+  typeOf1 dswa = mkTyConApp storeTTyCon [typeOf (s dswa), typeOf1 (w dswa)]
+    where
+      s :: StoreT s w a -> s
+      s = undefined
+      w :: StoreT s w a -> w a
+      w = undefined
+
+storeTTyCon :: TyCon
+storeTTyCon = mkTyCon "Control.Comonad.Trans.Store.Lazy.StoreT"
+{-# NOINLINE storeTTyCon #-}
+#endif
+
 type Store s = StoreT s Identity
 
 store :: (s -> a) -> s -> Store s a 
diff --git a/Control/Comonad/Trans/Store/Strict.hs b/Control/Comonad/Trans/Store/Strict.hs
--- a/Control/Comonad/Trans/Store/Strict.hs
+++ b/Control/Comonad/Trans/Store/Strict.hs
@@ -35,6 +35,21 @@
 import Control.Comonad.Trans.Class
 import Data.Functor.Identity
 
+#ifdef GHC_TYPEABLE
+import Data.Typeable
+instance (Typeable s, Typeable1 w) => Typeable1 (StoreT s w) where
+  typeOf1 dswa = mkTyConApp storeTTyCon [typeOf (s dswa), typeOf1 (w dswa)]
+    where
+      s :: StoreT s w a -> s
+      s = undefined
+      w :: StoreT s w a -> w a
+      w = undefined
+
+storeTTyCon :: TyCon
+storeTTyCon = mkTyCon "Control.Comonad.Trans.Store.Lazy.StoreT"
+{-# NOINLINE storeTTyCon #-}
+#endif
+
 type Store s = StoreT s Identity
 
 store :: (s -> a) -> s -> Store s a 
diff --git a/Control/Comonad/Trans/Stream.hs b/Control/Comonad/Trans/Stream.hs
--- a/Control/Comonad/Trans/Stream.hs
+++ b/Control/Comonad/Trans/Stream.hs
@@ -1,4 +1,4 @@
--- {-# LANGUAGE FlexibleContexts, UndecidableInstances #-}
+{-# LANGUAGE FlexibleContexts, UndecidableInstances #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Control.Comonad.Trans.Stream
@@ -39,6 +39,10 @@
 import Data.Traversable
 import Data.Monoid
 
+#ifdef GHC_TYPEABLE
+import Data.Data
+#endif
+
 -- | Isomorphic to the definition:
 --
 -- > data Stream f a = a :< f (Stream f a)
@@ -103,3 +107,47 @@
 
 unfoldsW :: (Comonad w, Functor f) => (w a -> (b, f a)) -> w a -> StreamT f w b
 unfoldsW f = StreamT . extend (\s -> let (h, t) = f s in (h, fmap (\a -> unfoldsW f (a <$ s)) t))
+
+#ifdef GHC_TYPEABLE
+
+instance (Typeable1 f, Typeable1 w) => Typeable1 (StreamT f w) where
+  typeOf1 dfwa = mkTyConApp streamTTyCon [typeOf1 (f dfwa), typeOf1 (w dfwa)]
+    where
+      f :: StreamT f w a -> f a 
+      f = undefined
+      w :: StreamT f w a -> w a
+      w = undefined
+
+instance (Typeable1 f, Typeable1 w, Typeable a) => Typeable (StreamT f w a) where
+  typeOf = typeOfDefault
+
+streamTTyCon :: TyCon
+streamTTyCon = mkTyCon "Control.Comonad.Trans.Stream.StreamT"
+{-# NOINLINE streamTTyCon #-}
+
+-- if any structure ever cried out for generic programming, this is it
+instance 
+  ( Typeable1 f
+  , Typeable1 w
+  , Data (w (a, f (StreamT f w a)))
+  , Data (a, f (StreamT f w a))
+  , Data (f (StreamT f w a))
+  , Data a
+  ) => Data (StreamT f w a) where
+    gfoldl f z (StreamT a) = z StreamT `f` a
+    toConstr _ = streamTConstr
+    gunfold k z c = case constrIndex c of
+        1 -> k (z StreamT)
+        _ -> error "gunfold"
+    dataTypeOf _ = streamTDataType
+    dataCast1 f = gcast1 f
+
+streamTConstr :: Constr
+streamTConstr = mkConstr streamTDataType "StreamT" [] Prefix
+{-# NOINLINE streamTConstr #-}
+
+streamTDataType :: DataType
+streamTDataType = mkDataType "Control.Comonad.Trans.Stream.StreamT" [streamTConstr]
+{-# NOINLINE streamTDataType #-}
+
+#endif
diff --git a/Control/Comonad/Trans/Traced.hs b/Control/Comonad/Trans/Traced.hs
--- a/Control/Comonad/Trans/Traced.hs
+++ b/Control/Comonad/Trans/Traced.hs
@@ -35,6 +35,10 @@
 import Data.Functor.Identity
 import Data.Monoid
 
+#ifdef GHC_TYPEABLE
+import Data.Typeable
+#endif
+
 type Traced m = TracedT m Identity
 
 traced :: (m -> a) -> Traced m a
@@ -74,3 +78,19 @@
 
 censor :: Functor w => (m -> m) -> TracedT m w a -> TracedT m w a
 censor g = TracedT . fmap (. g) . runTracedT
+
+#ifdef GHC_TYPEABLE
+
+instance (Typeable s, Typeable1 w) => Typeable1 (TracedT s w) where
+  typeOf1 dswa = mkTyConApp tracedTTyCon [typeOf (s dswa), typeOf1 (w dswa)]
+    where
+      s :: TracedT s w a -> s
+      s = undefined
+      w :: TracedT s w a -> w a
+      w = undefined
+
+tracedTTyCon :: TyCon
+tracedTTyCon = mkTyCon "Control.Comonad.Trans.Traced.TracedT"
+{-# NOINLINE tracedTTyCon #-}
+
+#endif
diff --git a/comonad-transformers.cabal b/comonad-transformers.cabal
--- a/comonad-transformers.cabal
+++ b/comonad-transformers.cabal
@@ -1,6 +1,6 @@
 name:          comonad-transformers
 category:      Control, Comonads
-version:       0.6.1
+version:       0.6.2
 license:       BSD3
 cabal-version: >= 1.2
 license-file:  LICENSE
@@ -21,6 +21,11 @@
     comonad >= 0.6 && < 0.7,
     functor-apply >= 0.6 && < 0.8,
     transformers >= 0.2.0 && <= 0.3
+
+  extensions: CPP
+  if impl(ghc)
+    cpp-options: -DGHC_TYPEABLE
+    extensions: FlexibleContexts
 
   exposed-modules:
     Control.Comonad.Hoist.Class
