Hello All,
    
    I am trying to use both the websockets library and the pipes
    library. They seem like a natural fit. However, I wanted to use the
    websockets library to build a pipes 'Producer' and that does not
    seem possible without some heavy lifting.
    
    The websockets library does not give me a connection I can read from
    and write to. Instead, I need to supply an IO action (called a
    clientApp). And execute it using something like:
    
    
    --runClient :: String       -- ^ Host
    --          -> Int          -- ^ Port
    --          -> String       -- ^ Path
    --          -> ClientApp a  -- ^ Client application --
    
    type ClientApp a = Connection -> IO a
    --          -> IO a
    
    
    main :: IO ()
    main = withSocketsDo $ runClient "echo.websocket.org" 80 "/" app
    
    The problem happens when you couple this restriction with the
    requirement that ClientApps have type 'Connection -> IO a'. Pipes
    producers are Monad transformer stacks. For example, I would like to
    build something like: 
    messageProducer :: Producer' WebsocketMessage IO ()
    
    But this does not run in the IO monad and at the same time I cannot
    get a 'Connection' object unless I use runClient.
    
    So, it seems I have a catch22 situation. Or have I overlooked
    something? I'd rather not have to do "un-lifting" on the monad
    transformer stack.
    
    Has anyone done this before? Any suggestions on how to go about it?
    
    
    Thanks,
    
    
    Dimitri