13
我正在玩寫一個網絡應用程序。在這種情況下,我使用的是scotty和redis,但是這個問題出現在任何web/db組合中。在此之前我使用過happstack,所以我也喜歡那裏的例子。將兩個單元組合在一起時沒有變壓器?
斯科蒂有你在一個嵌套的單子,這使得它易於訪問的路線內的數據庫連接定義路由:
main = do
db <- connect defaultConnectInfo
scotty 3000 $ do
get "/keys" $ do
keys <- liftIO $ runRedis db $ keys "*"
html $ T.pack $ show keys
的不阻止GET有類型:Web.Scotty.ActionM()
。所有的redis命令都有類型Database.Redis.Redis a
。 redis或scotty都沒有monad變換器。
結合這些的最佳方法是什麼?我對haskell很陌生,但是我確實設法讓ReaderT與hamonstack中的web monad一起工作。
理想情況下,我可以以某種方式創建一個新的monad堆棧,在同一個do塊中同時支持keys
和html
。
人們通常只會在haskell的web框架中解決liftIO嗎? – 2012-01-27 14:30:18
我不知道這裏有答案,但我認爲你的問題類似於monad變形金剛。基本上,你想要實現一個類型,我們稱之爲'IdentityTT m'ma',這樣'IdentityTT m''的行爲完全像['IdentityT'](http://hackage.haskell.org/packages/archive/transformers /0.2.1.0/doc/html/Control-Monad-Trans-Identity.html)。當然,第一個要回答的問題是,如果這甚至是可能的。 – 2012-01-27 18:57:00
另一種解釋問題的方法是:你是否使用liftIO來查詢所有haskell框架中的數據庫?當數據庫沒有被納入框架時,最常見的模式是什麼? – 2012-01-28 00:49:38