mongoDB
đủ chung để hoạt động trong bất kỳ đơn nguyên nào là bản sao của MonadBaseControl IO và MonadIO .
Ví dụ:bạn có thể chọn IO đơn nguyên. Trong trường hợp này, bạn cần liftIO . runQuery hành động bên trong của 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
Sau @Sebastian Philipp
đã thêm
MonadBaseControl ví dụ cho Scotty.ActionT , không cần phải nâng bất cứ thứ gì. Bạn có thể làm việc rõ ràng với scotty biểu mẫu mongoDB. Chỉ cần thay đổi chữ ký loại và thả liftIO s:
runQuery :: Pipe -> Query -> ActionM [Document]
...
get "/" $ do
res <- runQuery pipe (select [] "stock_foods")
text $ T.pack $ show res