diff --git a/lib/Polysemy/Http/Data/Request.hs b/lib/Polysemy/Http/Data/Request.hs
--- a/lib/Polysemy/Http/Data/Request.hs
+++ b/lib/Polysemy/Http/Data/Request.hs
@@ -128,6 +128,10 @@
     _query :: [(QueryKey, Maybe QueryValue)],
     _body :: Body
   }
-  deriving (Eq, Show, Generic)
+  deriving (Show, Generic)
 
 makeClassy ''Request
+
+instance Eq Request where
+  Request lm lh lp lt lpa lhe _ lq lb == Request rm rh rp rt rpa rhe _ rq rb =
+    lm == rm && lh == rh && lp == rp && lt == rt && lpa == rpa && lhe == rhe && lq == rq && lb == rb
diff --git a/lib/Polysemy/Http/Data/Response.hs b/lib/Polysemy/Http/Data/Response.hs
--- a/lib/Polysemy/Http/Data/Response.hs
+++ b/lib/Polysemy/Http/Data/Response.hs
@@ -5,14 +5,14 @@
 
 import Network.HTTP.Client (BodyReader, CookieJar)
 import Network.HTTP.Types (
-  Status(Status),
+  Status (Status),
   statusIsClientError,
   statusIsInformational,
   statusIsRedirection,
   statusIsServerError,
   statusIsSuccessful,
   )
-import qualified Text.Show as Text (Show(show))
+import qualified Text.Show as Text (Show (show))
 
 import Polysemy.Http.Data.Header (Header)
 
@@ -28,11 +28,15 @@
     -- |The native cookie jar.
     _cookies :: CookieJar
   }
-  deriving (Eq, Show)
+  deriving (Show)
 
 instance {-# overlapping #-} Show (Response BodyReader) where
   show (Response s _ hs _) =
     [qt|StreamingResponse { status :: #{s}, headers :: #{hs} }|]
+
+instance Eq b => Eq (Response b) where
+  Response ls lb lh _ == Response rs rb rh _ =
+    ls == rs && lb == rb && lh == rh
 
 -- |Match on a response with a 1xx status.
 pattern Info ::
diff --git a/lib/Polysemy/Http/Manager.hs b/lib/Polysemy/Http/Manager.hs
--- a/lib/Polysemy/Http/Manager.hs
+++ b/lib/Polysemy/Http/Manager.hs
@@ -7,7 +7,6 @@
 import Polysemy.Http.Data.Manager (Manager(..))
 
 interpretManagerWith ::
-  Member (Embed IO) r =>
   HTTP.Manager ->
   InterpreterFor Manager r
 interpretManagerWith manager = do
diff --git a/lib/Polysemy/Http/Native.hs b/lib/Polysemy/Http/Native.hs
--- a/lib/Polysemy/Http/Native.hs
+++ b/lib/Polysemy/Http/Native.hs
@@ -118,7 +118,7 @@
 interpretHttpNativeWith =
   interpretH \case
     Http.Response request f -> do
-      distribEither =<< withResponse request (runTSimple . f)
+      distribEither =<< withResponse request ((\x -> runTSimple x) . f)
     Http.Request request -> do
       Log.debug [qt|http request: #{request}|]
       manager <- Manager.get
@@ -127,7 +127,7 @@
         response <$ Log.debug [qt|http response: #{response}|]
     Http.Stream request handler -> do
       Log.debug [qt|http stream request: #{request}|]
-      distribEither =<< withResponse request (runTSimple . handler)
+      distribEither =<< withResponse request ((\x -> runTSimple x). handler)
     Http.ConsumeChunk body ->
       pureT . first HttpError.ChunkFailed =<< tryAny body
 {-# INLINE interpretHttpNativeWith #-}
diff --git a/polysemy-http.cabal b/polysemy-http.cabal
--- a/polysemy-http.cabal
+++ b/polysemy-http.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-http
-version:        0.4.0.3
+version:        0.4.0.4
 synopsis:       Polysemy effect for http-client
 description:    See <https://hackage.haskell.org/package/polysemy-http/docs/Polysemy-Http.html>
 category:       Network
