@@ -21,7 +21,7 @@ import Control.Monad.Reader (MonadReader (..), ReaderT,
21import Control.Monad.Trans (MonadIO (..), MonadTrans (..))
21import Control.Monad.Trans (MonadIO (..), MonadTrans (..))
22import Control.Monad.Trans.Control (ComposeSt, MonadBaseControl (..), MonadTransControl (..),
22import Control.Monad.Trans.Control (ComposeSt, MonadBaseControl (..), MonadTransControl (..),
23 defaultLiftBaseWith, defaultRestoreM)
23 defaultLiftBaseWith, defaultRestoreM)
24−import Control.Monad.Trans.Resource (MonadResource (..), ResourceT, runResourceT)
24+import Control.Monad.Trans.Resource (MonadResource (..), ResourceT, runResourceT, transResourceT)
25import Network.Wai (Application, Request, Response, ResponseReceived)
25import Network.Wai (Application, Request, Response, ResponseReceived)
26import Prelude ()
26import Prelude ()
27import Prelude.Compat
27import Prelude.Compat
@@ -197,8 +197,8 @@ instance MonadBaseControl IO DelayedIO where
197 liftBaseWith f = DelayedIO $ liftBaseWith $ \g -> f (g . runDelayedIO')
197 liftBaseWith f = DelayedIO $ liftBaseWith $ \g -> f (g . runDelayedIO')
198 restoreM = DelayedIO . restoreM
198 restoreM = DelayedIO . restoreM
200−runDelayedIO :: DelayedIO a -> Request -> IO (RouteResult a)
200+runDelayedIO :: DelayedIO a -> Request -> ResourceT IO (RouteResult a)
201−runDelayedIO m req = runRouteResultT $ runResourceT $ runReaderT (runDelayedIO' m) req
201+runDelayedIO m req = transResourceT runRouteResultT $ runReaderT (runDelayedIO' m) req
203-- | A 'Delayed' without any stored checks.
203-- | A 'Delayed' without any stored checks.
204emptyDelayed :: RouteResult a -> Delayed env a
204emptyDelayed :: RouteResult a -> Delayed env a
@@ -303,7 +303,7 @@ passToServer Delayed{..} x =
303runDelayed :: Delayed env a
303runDelayed :: Delayed env a
305 -> Request
305 -> Request
306− -> IO (RouteResult a)
306+ -> ResourceT IO (RouteResult a)
307runDelayed Delayed{..} env req =
307runDelayed Delayed{..} env req =
308 runDelayedIO
308 runDelayedIO
309 (do c <- capturesD env
309 (do c <- capturesD env
@@ -325,12 +325,12 @@ runAction :: Delayed env (Handler a)
325 -> (RouteResult Response -> IO r)
325 -> (RouteResult Response -> IO r)
326 -> (a -> RouteResult Response)
326 -> (a -> RouteResult Response)
328−runAction action env req respond k = do
328+runAction action env req respond k = runResourceT $ do
329− runDelayed action env req >>= go >>= respond
329+ runDelayed action env req >>= go >>= liftIO . respond
331 go (Fail e) = return $ Fail e
331 go (Fail e) = return $ Fail e
332 go (FailFatal e) = return $ FailFatal e
332 go (FailFatal e) = return $ FailFatal e
333− go (Route a) = do
333+ go (Route a) = liftIO $ do
334 e <- runHandler a
334 e <- runHandler a
335 case e of
335 case e of
336 Left err -> return . Route $ responseServantErr err
336 Left err -> return . Route $ responseServantErr err