diff --git a/free-http.cabal b/free-http.cabal
--- a/free-http.cabal
+++ b/free-http.cabal
@@ -1,6 +1,6 @@
 name:                free-http
 
-version:             0.1.1.1
+version:             0.1.1.2
 
 synopsis:            An HTTP Client based on Free Monads.
 
diff --git a/src/Network/HTTP/Client/Free/HttpClient.hs b/src/Network/HTTP/Client/Free/HttpClient.hs
--- a/src/Network/HTTP/Client/Free/HttpClient.hs
+++ b/src/Network/HTTP/Client/Free/HttpClient.hs
@@ -34,9 +34,15 @@
 -------------------------------------------------------------------------------
 -- | Peel a layer of the 'HttpF' functor and run an http request with the data
 -- provided.
-iterTHttp :: (Monad m, MonadIO m)
+iterTHttp :: ( Request ~ RequestType client
+             -- ^ The foundational request must be of type 'Request'
+             , Response ByteString ~ ResponseType client
+             -- ^ The foundational response must be of type 'Response ByteString'
+             , Monad m
+             , MonadIO m
+             )
           => Manager
-          -> HttpF HttpClient (m a)
+          -> HttpF client (m a)
           -> m a
 iterTHttp manager (HttpF m r next) =
     let !req = setMethod m r in liftIO (httpLbs req manager) >>= next
@@ -44,9 +50,17 @@
 -------------------------------------------------------------------------------
 -- | Peel a layer of the 'HttpF' functor and run an http request with the data.
 -- the base monad for this action is 't m'.
-iterTMHttp :: (Monad m, MonadTrans t, Monad (t m), MonadIO m)
+iterTMHttp :: ( Request ~ RequestType client
+             -- ^ The foundational request must be of type 'Request'
+              , Response ByteString ~ ResponseType client
+             -- ^ The foundational response must be of type 'Response ByteString'
+              , Monad m
+              , MonadTrans t
+              , Monad (t m)
+              , MonadIO m
+              )
     => Manager
-    -> HttpF HttpClient (t m a)
+    -> HttpF client (t m a)
     -> t m a
 iterTMHttp manager (HttpF m r next) =
     let !req = setMethod m r in (lift . liftIO $ httpLbs req manager) >>= next
@@ -54,9 +68,15 @@
 -------------------------------------------------------------------------------
 -- | The main http-client interpreter. The client is free to specify the base
 -- effect monad so long as there is an instance of 'MonadIO' for it in scope.
-runHttp :: (Monad m, MonadIO m)
+runHttp :: ( Request ~ RequestType client
+           -- ^ The foundational request must be of type 'Request'
+           , Response ByteString ~ ResponseType client
+           -- ^ The foundational response must be of type 'Response ByteString'
+           , Monad m
+           , MonadIO m
+           )
          => Manager
-         -> FT (HttpF HttpClient) m a
+         -> FT (HttpF client) m a
          -> m a
 runHttp manager = iterT (iterTHttp manager)
 
@@ -64,8 +84,16 @@
 -- | The main http-client interpreter. The client is free to specify the base
 -- effect monad ('m'), and in thise case this the result can be lifted into a
 -- higher monad transformer stack ('t')
-runTHttp :: (Monad m, MonadIO m, MonadTrans t, Monad (t m))
+runTHttp :: ( Request ~ RequestType client
+            -- ^ The foundational request must be of type 'Request'
+            , Response ByteString ~ ResponseType client
+            -- ^ The foundational response must be of type 'Response ByteString'
+            , Monad m
+            , MonadIO m
+            , MonadTrans t
+            , Monad (t m)
+            )
         => Manager
-        -> FT (HttpF HttpClient) m a
+        -> FT (HttpF client) m a
         -> t m a
 runTHttp manager = iterTM (iterTMHttp manager)
