{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE OverloadedStrings #-} module MyLib (someFunc) where import System.Environment (lookupEnv) import Control.Monad.Trans.Maybe (MaybeT(..)) import Network.AMQP import qualified Data.Text as T import Data.Text (Text) import Control.Exception (bracket) import Control.Concurrent (newEmptyMVar, readMVar) import Control.Monad (void) data AMQP = AMQP { host :: String , vhost :: Text , username :: Text , password :: Text } getAMQP :: IO (Maybe AMQP) getAMQP = runMaybeT $ AMQP <$> lookupEnvM "AMQP_HOST" <*> lookupEnvMText "AMQP_VHOST" <*> lookupEnvMText "AMQP_USER" <*> lookupEnvMText "AMQP_PASS" where lookupEnvM = MaybeT . lookupEnv lookupEnvMText = fmap T.pack . lookupEnvM someFunc :: IO () someFunc = do Just AMQP{..} <- getAMQP let rabbitConnect = openConnection host vhost username password bracket rabbitConnect closeConnection $ \conn -> do chan <- openChannel conn qos chan 0 1 False declareQueue chan newQueue {queueName="reddit_tags"} bindQueue chan "reddit_tags" "reddit_posts" "key" consumeMsgs chan "reddit_tags" Ack $ \(msg, env) -> do print msg ackEnv env void getLine