diff --git a/Control/Constraint/Combine.hs b/Control/Constraint/Combine.hs
--- a/Control/Constraint/Combine.hs
+++ b/Control/Constraint/Combine.hs
@@ -29,7 +29,7 @@
 type c `And` d = c :&: d
 infixl 7 `And`
 
--- | An empty constraint which implies nothing.
+-- | An empty constraint, which implies nothing.
 --
 --  @':&:'@ and @'Empty'@ form a type-level monoid with @'Empty'@ as the identity element.
 class    Empty a
diff --git a/Data/Exists.hs b/Data/Exists.hs
--- a/Data/Exists.hs
+++ b/Data/Exists.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE TypeFamilies, ConstraintKinds, FlexibleInstances, MultiParamTypeClasses #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
--- | Existential datatypes holding evidence of constraints and type classes for existential datatypes.
+-- | Existential datatypes holding evidence of constraints, and type classes for existential datatypes.
 module Data.Exists (module Data.Exists.Internal) where
 
 import Data.Exists.Internal
@@ -11,7 +11,7 @@
 import Unsafe.Coerce                   (unsafeCoerce)
 import qualified Data.Traversable as T (foldMapDefault, fmapDefault)
 import Data.Dynamic                    (toDyn, fromDyn)
-import Control.Comonad                 (liftW)
+--import Control.Comonad                 (liftW)
 import Control.Constraint.Combine      (Empty)
 import Data.Typeable                   (Typeable)
 import Control.Exception               (Exception)
@@ -27,13 +27,14 @@
 import Data.Foldable                   (Foldable      (..))
 import Data.Traversable                (Traversable   (..))
 import Data.Functor.Contravariant      (Contravariant (..))
+{-
 import Data.Functor.Extend             (Extend        (..))
 import Control.Comonad                 (Comonad       (..))
 import Control.Comonad.Env.Class       (ComonadEnv    (..))
 import Control.Comonad.Traced.Class    (ComonadTraced (..))
 import Control.Comonad.Store.Class     (ComonadStore  (..))
 import Data.Copointed                  (Copointed     (..))
-
+-}
 
 -- | @'ConstraintOf' 'Any' = 'Empty'@
 instance Existential Any where
@@ -123,9 +124,11 @@
     mapM      = mapMDefault
     sequence  = sequenceDefault
 
+
 instance   Contravariant (Exists1 Contravariant)     where
     contramap = contramapDefault
 
+{-
 instance         Functor (Exists1 Extend)            where
     fmap f    = apply1 (exists1 . fmap f)
 
@@ -183,3 +186,4 @@
 
 instance       Copointed (Exists1 Copointed)         where
     copoint   = copointDefault
+-}
diff --git a/Data/Exists/CPS.hs b/Data/Exists/CPS.hs
new file mode 100644
--- /dev/null
+++ b/Data/Exists/CPS.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE ConstraintKinds, TypeFamilies, RankNTypes #-}
+
+-- | CPS-transformed versions of @Exists@ and @Exists1@, provided for completeness and curiosity.
+
+module Data.Exists.CPS(Exists(..), Exists1(..)) where
+
+import Data.Exists.Internal(Existential(..), Existential1(..))
+
+newtype Exists c = Exists { withExists :: forall r. (forall a. c a => a -> r) -> r }
+
+-- | @'ConstraintOf' ('Exists' c) = c@
+instance Existential (Exists c) where
+    type ConstraintOf (Exists c) = c
+    exists  a = Exists $ \f -> f a
+    apply f e = withExists e f
+
+newtype Exists1 c a = Exists1 { withExists1 :: forall r. (forall f. c f => f a -> r) -> r }
+
+-- | @'ConstraintOf1' ('Exists1' c) = c@
+instance Existential1 (Exists1 c) where
+    type ConstraintOf1 (Exists1 c) = c
+    exists1  a = Exists1 $ \f -> f a
+    apply1 f e = withExists1 e f
diff --git a/Data/Exists/Defaults.hs b/Data/Exists/Defaults.hs
--- a/Data/Exists/Defaults.hs
+++ b/Data/Exists/Defaults.hs
@@ -15,12 +15,14 @@
 import Data.Foldable                  (Foldable      (..))
 import Data.Traversable               (Traversable   (..))
 import Data.Functor.Contravariant     (Contravariant (..))
+{-
 import Data.Functor.Extend            (Extend        (..))
 import Control.Comonad                (Comonad       (..))
 import Control.Comonad.Env.Class      (ComonadEnv    (..))
 import Control.Comonad.Traced.Class   (ComonadTraced (..))
 import Control.Comonad.Store.Class    (ComonadStore  (..))
 import Data.Copointed                 (Copointed     (..))
+-}
 
 -- * Prelude.Show
 showDefault      :: ExistentialWith Show e                          => e -> String
@@ -69,6 +71,7 @@
 contramapDefault :: ExistentialWith1 Contravariant e                => (a -> b) -> e b -> e a
 contramapDefault f     = apply1 (exists1 . contramap f)
 
+{-
 -- * Data.Functor.Extend.Extend
 duplicateDefault :: ExistentialWith1 Extend e                       => e a -> e (e a)
 duplicateDefault       = apply1 (exists1 . fmap exists1 . duplicate)
@@ -107,6 +110,7 @@
 -- * Data.Copointed.Copointed
 copointDefault   :: ExistentialWith1 Copointed e                    => e a -> a
 copointDefault         = apply1 copoint
+-}
 
 {-# INLINE showDefault      #-}
 {-# INLINE showsPrecDefault #-}
@@ -122,14 +126,14 @@
 {-# INLINE mapMDefault      #-}
 {-# INLINE sequenceDefault  #-}
 {-# INLINE contramapDefault #-}
-{-# INLINE duplicateDefault #-}
+{-  INLINE duplicateDefault  -}
 {-  INLINE extendDefault     -}
-{-# INLINE extractDefault   #-}
-{-# INLINE askDefault       #-}
-{-# INLINE traceDefault     #-}
-{-# INLINE posDefault       #-}
-{-# INLINE peekDefault      #-}
-{-# INLINE peeksDefault     #-}
-{-# INLINE seekDefault      #-}
-{-# INLINE seeksDefault     #-}
-{-# INLINE copointDefault   #-}
+{-  INLINE extractDefault    -}
+{-  INLINE askDefault        -}
+{-  INLINE traceDefault      -}
+{-  INLINE posDefault        -}
+{-  INLINE peekDefault       -}
+{-  INLINE peeksDefault      -}
+{-  INLINE seekDefault       -}
+{-  INLINE seeksDefault      -}
+{-  INLINE copointDefault    -}
diff --git a/Data/Exists/Internal.hs b/Data/Exists/Internal.hs
--- a/Data/Exists/Internal.hs
+++ b/Data/Exists/Internal.hs
@@ -43,7 +43,7 @@
 --
 --   > foo :: (Existential e, ConstraintOf e ~ Show) => e
 --
---   GHC would have output an error message, because the instance of @'Existential'@ to use would have been ambiguous. (The @'apply' f '.' 'exists'@ problem is the same as the @'show' '.' 'read'@ problem.)
+--   GHC would have given us an error message, because the instance of @'Existential'@ to use would have been ambiguous. (The @'apply' f . 'exists'@ problem is the same as the @'show' . 'read'@ problem.)
 class Existential e where
     type ConstraintOf e :: * -> Constraint
     -- | Construct 'e' from a value of a type satisfying the constraint.
@@ -80,7 +80,7 @@
 -- | A version of @'Existential'@ for kind @* -> *@.
 class Existential1 e where
     type ConstraintOf1 e :: (* -> *) -> Constraint
-    -- | Construct 'e' from a value of a type constructor applied to a type where the type constructor satisfies the constraint.
+    -- | Construct 'e' from a value of a type constructor applied to a type, where the type constructor satisfies the constraint.
     exists1 :: (ConstraintOf1 e) f => f a -> e a
     -- | Apply a function requiring the constraint to the held value.
     apply1  :: (forall f. (ConstraintOf1 e) f => f a -> r) -> e a -> r
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2011 Gábor Lehel
+Copyright 2012 Gábor Lehel
 
 All rights reserved.
 
diff --git a/exists.cabal b/exists.cabal
--- a/exists.cabal
+++ b/exists.cabal
@@ -1,10 +1,10 @@
 name:          exists
 category:      Constraints
-version:       0.1
+version:       0.2
 author:        Gábor Lehel
 maintainer:    Gábor Lehel <illissius@gmail.com>
 homepage:      http://github.com/glehel/exists
-copyright:     Copyright (C) 2011 Gábor Lehel
+copyright:     Copyright (C) 2012 Gábor Lehel
 license:       BSD3
 license-file:  LICENSE
 stability:     experimental
@@ -24,9 +24,17 @@
     .
         * A type-level combinator for combining constraint constructors.
     .
-    Some of these should maybe be split off into separate packages.
+    (Some of these might be better off as separate packages.)
     .
-    "Data.Exists" is the important module, the rest are peripheral.
+    "Data.Exists" has most of the important things.
+    .
+    Minimum GHC: 7.4
+    .
+    Changes in 0.2:
+    .
+        * Removed @Comonad@-related things (they were probably useless anyways)
+    .
+        * Added @Data.Exists.CPS@
 
 source-repository head
     type:      git
@@ -50,6 +58,7 @@
     exposed-modules:
         Data.Anything
         Data.Exists
+        Data.Exists.CPS
         Data.Exists.Defaults
         Control.Constraint.Combine
 
@@ -58,10 +67,10 @@
 
     build-depends:
         base          >= 4.5 && < 5,
-        contravariant == 0.1.*,
-        comonad       == 1.1.*,
-        comonads-fd   == 2.0.*,
-        pointed       == 2.0.*
+        contravariant >= 0.1 && < 0.3
+--        comonad       == 1.1.*,
+--        comonads-fd   == 2.0.*,
+--        pointed       == 2.0.*
 
     ghc-options:
         -Wall
