{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleContexts #-}
module Main where
import Pipes.MongoDB as MP
import Pipes
import Data.Text
import Database.MongoDB
import Control.Monad.Trans.Control (MonadBaseControl)
import Control.Monad ((>=>))
import qualified Pipes.Prelude as P
runAction :: Action IO a -> IO a
runAction a = do
pipe <- connect (host "127.0.0.1")
access pipe master "pipes-mongodb-example" a
main :: IO ()
main = runAction tasks
cities :: Producer (Maybe Text) (Action IO) ()
cities = MP.find (select [] "team")
>-> P.map (look "home" >=> cast >=> look "city" >=> cast)
tasks :: Action IO ()
tasks = do
clearTeams
insertTeams
-- pipes stuff
runEffect (cities >-> P.print)
clearTeams :: MonadIO m => Action m ()
clearTeams = delete (select [] "team")
t :: Text -> Text
t v = v
insertTeams :: MonadIO m => Action m [Value]
insertTeams = insertMany "team" [
["name" =: t "Yankees", "home" =: ["city" =: t "New York", "state" =: t "NY"], "league" =: t "American"],
["name" =: t "Mets", "home" =: ["city" =: t "New York", "state" =: t "NY"], "league" =: t "National"],
["name" =: t "Phillies", "home" =: ["city" =: t "Philadelphia", t "state" =: t "PA"], "league" =: t "National"],
["name" =: t "Red Sox", "home" =: ["city" =: t "Boston", "state" =: t "MA"], "league" =: t "American"] ]