You probably want to use "ReaderT":
type MyMonad a = ReaderT DbHandle ServerPart a
Reader ask - , , , .
DbHandle - .
"ReaderT" happstack-server, happstack-server .
, , - :
runMyMonad :: String -> MyMonad a -> ServerPart a
runMyMonad connectionString m = do
db <- liftIO $ connect_to_your_db connectionString
result <- runReaderT m db
liftIO $ close_your_db_connection db
(, "" , , ServerPart)
, - ? - :
type MyMonad a = ReaderT (DbHandle, LogHandle) ServerPart a
:
askDb :: MyMonad DbHandle
askDb = fst <$> ask
askLogger :: MyMonad LogHandle
askLogger = snd <$> ask
. . runMyMonad, LogHandle, .
, , .