Typically it would look something like this:

myApp :: AppConfig -> Application

main = do
  appConfig <- getAppConfig
  run 3000 $ myApp appConfig

Within myApp, you can now access the AppConfig value and use runReaderT to unwrap your MyApp transformer.

On Sat, May 16, 2015 at 3:03 PM Alex <alex323@gmail.com> wrote:
Hello:

I am writing a small application which receives HTTP requests,
translates them to JSON, and queues the requests using RabbitMQ.

I created a Monad transformer stack (ReaderT AppConfig IO a) to carry
around my application configuration and AMQP connection handle (MVar
Connection within AppConfig), but I am having difficulty determining how
to integrate it with my Warp application.

The function which is responsible for accepting Requests and returning
Responses (app :: Application) needs to call functions which require
AppConfig. For example: (sendToRabbitMQ :: RPCRequest -> MyApp
ByteString) is a blocking call which requires the AMQP connection
handle found within AppConfig, which is why it returns a MyApp
ByteString as opposed to a IO ByteString. If I want to call
`sendToRabbitMQ' from `app', then the type of `app' needs to change
from Application to something else, but I am not sure what that should
be.

What's the best way to proceed?

--
Alex
_______________________________________________
web-devel mailing list
web-devel@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/web-devel