mongoDB
è abbastanza generico da funzionare in qualsiasi monade che sia istanza di MonadBaseControl IO
e MonadIO
.
Ad esempio, puoi scegliere IO
monade. In questo caso è necessario liftIO . runQuery
all'interno dell'azione di 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
Dopo @Sebastian Philipp
aggiunto
MonadBaseControl
esempio per Scotty.ActionT
, non è necessario sollevare nulla. Puoi lavorare in modo trasparente con mongoDB form scotty. Basta cambiare la firma del tipo e rilasciare liftIO
s:
runQuery :: Pipe -> Query -> ActionM [Document]
...
get "/" $ do
res <- runQuery pipe (select [] "stock_foods")
text $ T.pack $ show res