diff --git a/Data/Profunctor/Corepresentable.hs b/Data/Profunctor/Corepresentable.hs
--- a/Data/Profunctor/Corepresentable.hs
+++ b/Data/Profunctor/Corepresentable.hs
@@ -10,7 +10,7 @@
 import Data.Profunctor.Composition
 import Data.Functor.Compose
 
-class Functor (Corep k) => CorepresentableProfunctor k where
+class (Profunctor k, Functor (Corep k)) => CorepresentableProfunctor k where
   type Corep k :: * -> *
   cotabulatePro :: (d -> Corep k c) -> k d c
   coindexPro :: k d c -> d -> Corep k c 
@@ -20,7 +20,7 @@
   cotabulatePro f = runIdentity . f
   coindexPro f = Identity . f 
 
-instance Functor m => CorepresentableProfunctor (Kleisli m) where
+instance (Monad m, Functor m) => CorepresentableProfunctor (Kleisli m) where
   type Corep (Kleisli m) = m
   cotabulatePro = Kleisli
   coindexPro = runKleisli 
diff --git a/Data/Profunctor/Representable.hs b/Data/Profunctor/Representable.hs
--- a/Data/Profunctor/Representable.hs
+++ b/Data/Profunctor/Representable.hs
@@ -10,7 +10,7 @@
 import Data.Profunctor.Composition
 import Control.Comonad
 
-class Functor (Rep k) => RepresentableProfunctor k where
+class (Profunctor k, Functor (Rep k)) => RepresentableProfunctor k where
   type Rep k :: * -> *
   tabulatePro :: (Rep k d -> c) -> k d c
   indexPro :: k d c -> Rep k d -> c 
diff --git a/representable-profunctors.cabal b/representable-profunctors.cabal
--- a/representable-profunctors.cabal
+++ b/representable-profunctors.cabal
@@ -1,6 +1,6 @@
 name:          representable-profunctors
 category:      Control, Categories
-version:       0.3.1
+version:       0.4.0
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
