データベースへのアクセスが多い Happstack アプリケーションを作成したいと考えています。一番下にIOがあり、一番上にデータベース書き込みのようなモナド(真ん中にログライターがある)を持つモナドスタックは、各アクセスで明確な機能を持つように機能すると思います。例:
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 に持ち上げる方法もわかりません。 ...等。