Я играю с написанием веб-приложения. В этом случае я использую 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
Блок do в get имеет тип: Web.Scotty.ActionM ()
. Все команды redis имеют тип Database.Redis.Redis a
. Ни редис, ни Скотти не имеют монадного трансформатора.
Какой лучший способ объединить их? Я новичок в haskell, но мне удалось заставить ReaderT работать с веб-монадой в happstack.
В идеале я мог бы каким-то образом создать новый стек монад, поддерживающий как keys
, так и html
в одном блоке do.