我想创建一个可以大量访问数据库的 Happstack 应用程序。我认为底部带有 IO 的 Monad 堆栈和顶部的类似数据库写入的 monad(中间带有日志写入器)将有助于在每次访问中具有清晰的功能,例如:
itemsRequest :: ServerConfig -> ServerPart Response
itemsRequest cf = dir "items" $ do
methodM [GET,HEAD]
liftIO $ noticeM (scLogger cf) "sended job list"
items <- runDBMonad (scDBConnString cf) $ getItemLists
case items of
(Right xs) -> ok $ toResponse $ show xs
(Left err) -> internalServerError $ toResponse $ show err
和:
getItemList :: MyDBMonad (Error [Item])
getItemList = do
-- etc...
但是我对 Monad 和 Monad Transformers 知之甚少(我将这个问题视为学习它的练习),并且我不知道如何开始创建 Database Monad,如何将 IO 从 happstack 提升到 Database Stack, ...ETC。