Voglio creare un'applicazione Happstack con un sacco di accesso a un database. Penso che una pila Monade con IO in basso e un database Write-come monade in alto (con lo scrittore registro al centro) lavorerà per avere una chiara funzione di ogni accesso, ad esempio:Come creare uno stack del database Monad in Happstack?
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
Con:
getItemList :: MyDBMonad (Error [Item])
getItemList = do
-- etc...
Ma ho poca conoscenza di Monade e Monade Transformers (vedo questa domanda come un esercizio per imparare a questo proposito), e non ho idea di come iniziare la creazione di database Monade, come sollevare il iO da happstack allo stack del database, ecc.
Ho provato a utilizzare 'unsafePerformIO' per eseguire l'I/O. come l'Happstack usa una combinazione puramente, forse è il tuo unico modo di fare IO. – Nybble
@Wu Xingbo, E 'possibile fare IO su happstack con liftIO, ma non so chi passare ad un altro stack di monad. – Zhen