Я играю с написанием веб-приложения. В данном случае я использую scotty и redis, но эта проблема возникает при любом сочетании web/db. До этого я использовал happstack, поэтому хотелось бы получить пример и там.
Scotty позволяет определять маршруты во вложенной монаде, что упрощает доступ к соединению с базой данных внутри маршрута:
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
. Ни redis, ни scotty не имеют трансформатора монад.
Какой лучший способ объединить их? Я новичок в haskell, но мне удалось заставить ReaderT работать с веб-монадой в happstack.
В идеале, я мог бы как-то сделать новый стек монад, который поддерживает и keys
и html
в одном блоке do.