@@ -21,7 +21,7 @@ import Control.Monad.Reader (MonadReader (..), ReaderT,
2121import Control.Monad.Trans (MonadIO (..), MonadTrans (..))
2222import Control.Monad.Trans.Control (ComposeSt, MonadBaseControl (..), MonadTransControl (..),
2323 defaultLiftBaseWith, defaultRestoreM)
24−import Control.Monad.Trans.Resource (MonadResource (..), ResourceT, runResourceT)
24+import Control.Monad.Trans.Resource (MonadResource (..), ResourceT, runResourceT, transResourceT)
2525import Network.Wai (Application, Request, Response, ResponseReceived)
2626import Prelude ()
2727import Prelude.Compat
@@ -197,8 +197,8 @@ instance MonadBaseControl IO DelayedIO where
197197 liftBaseWith f = DelayedIO $ liftBaseWith $ \g -> f (g . runDelayedIO')
198198 restoreM = DelayedIO . restoreM
199199
200−runDelayedIO :: DelayedIO a -> Request -> IO (RouteResult a)
201−runDelayedIO m req = runRouteResultT $ runResourceT $ runReaderT (runDelayedIO' m) req
200+runDelayedIO :: DelayedIO a -> Request -> ResourceT IO (RouteResult a)
201+runDelayedIO m req = transResourceT runRouteResultT $ runReaderT (runDelayedIO' m) req
202202
203203-- | A 'Delayed' without any stored checks.
204204emptyDelayed :: RouteResult a -> Delayed env a
@@ -303,7 +303,7 @@ passToServer Delayed{..} x =
303303runDelayed :: Delayed env a
304304 -> env
305305 -> Request
306− -> IO (RouteResult a)
306+ -> ResourceT IO (RouteResult a)
307307runDelayed Delayed{..} env req =
308308 runDelayedIO
309309 (do c <- capturesD env
@@ -325,12 +325,12 @@ runAction :: Delayed env (Handler a)
325325 -> (RouteResult Response -> IO r)
326326 -> (a -> RouteResult Response)
327327 -> IO r
328−runAction action env req respond k = do
329− runDelayed action env req >>= go >>= respond
328+runAction action env req respond k = runResourceT $ do
329+ runDelayed action env req >>= go >>= liftIO . respond
330330 where
331331 go (Fail e) = return $ Fail e
332332 go (FailFatal e) = return $ FailFatal e
333− go (Route a) = do
333+ go (Route a) = liftIO $ do
334334 e <- runHandler a
335335 case e of
336336 Left err -> return . Route $ responseServantErr err