mongoDB
est suffisamment générique pour fonctionner dans n'importe quelle monade qui est une instance de MonadBaseControl IO
et MonadIO
.
Par exemple, vous pouvez choisir IO
monade. Dans ce cas, vous avez besoin de liftIO . runQuery
dans l'action de scotty :
import Web.Scotty
import Database.MongoDB
import qualified Data.Text.Lazy as T
import Control.Monad.IO.Class
runQuery :: Pipe -> Query -> IO [Document]
runQuery pipe query = access pipe master "nutrition" (find query >>= rest)
main = do
pipe <- connect $ host "127.0.0.1"
scotty 3000 $ do
get "/" $ do
res <- liftIO $ runQuery pipe (select [] "stock_foods")
text $ T.pack $ show res
Après @Sebastian Philipp
ajouté
MonadBaseControl
instance pour Scotty.ActionT
, il n'est pas nécessaire de soulever quoi que ce soit. Vous pouvez travailler de manière transparente avec le formulaire mongoDB scotty. Changez simplement la signature de type et supprimez liftIO
s :
runQuery :: Pipe -> Query -> ActionM [Document]
...
get "/" $ do
res <- runQuery pipe (select [] "stock_foods")
text $ T.pack $ show res