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