-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | A class of monads which can do http requests
--   
--   A class of monads which can do http requests
@package monad-http
@version 0.1.0.0


module Control.Monad.Trans.Http

-- | Http monad transformer, essentially <tt>ReaderT</tt> <a>Manager</a>.
newtype HttpT m a
HttpT :: (Manager -> m a) -> HttpT m a
[runHttpT] :: HttpT m a -> Manager -> m a

-- | Lower <a>HttpT</a> with default <a>Manager</a> created with
--   <a>tlsManagerSettings</a>.
evalHttpT :: MonadIO m => HttpT m a -> m a
mapHttpT :: (m a -> m b) -> HttpT m a -> HttpT m b
liftHttpT :: m a -> HttpT m a
instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Trans.Http.HttpT m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Control.Monad.Trans.Http.HttpT m)
instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Logger.MonadLogger m => Control.Monad.Logger.MonadLogger (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Logger.MonadLoggerIO m => Control.Monad.Logger.MonadLoggerIO (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Trans.Class.MonadTrans Control.Monad.Trans.Http.HttpT
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Cont.Class.MonadCont m => Control.Monad.Cont.Class.MonadCont (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.RWS.Class.MonadRWS r w s m => Control.Monad.RWS.Class.MonadRWS r w s (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Random.Class.MonadRandom m => Control.Monad.Random.Class.MonadRandom (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.Random.Class.MonadSplit g m => Control.Monad.Random.Class.MonadSplit g (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.CryptoRandom.MonadCRandom e m => Control.Monad.CryptoRandom.MonadCRandom e (Control.Monad.Trans.Http.HttpT m)
instance Control.Monad.CryptoRandom.MonadCRandomR e m => Control.Monad.CryptoRandom.MonadCRandomR e (Control.Monad.Trans.Http.HttpT m)


module Control.Monad.Http.Class

-- | The monad capable to do HTTP requests.
class Monad m => MonadHttp m where brRead = id

-- | Get a single chunk of data from the response body, or an empty
--   bytestring if no more data is available.
--   
--   Note that in order to consume the entire request body, you will need
--   to repeatedly call this function until you receive an empty
--   <tt>ByteString</tt> as a result.
withResponse :: MonadHttp m => Request -> (Response (BodyReaderM m) -> m a) -> m a
brRead :: MonadHttp m => BodyReaderM m -> m ByteString
type BodyReaderM m = m ByteString

-- | A convenience wrapper around <a>withResponse</a> which reads in the
--   entire response body and immediately releases resources.
httpLbs :: MonadHttp m => Request -> m (Response ByteString)

-- | Strictly consume all remaining chunks of data from the stream.
brConsume :: MonadHttp m => BodyReaderM m -> m [ByteString]
instance Control.Monad.Http.Class.MonadHttp m => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.Identity.IdentityT m)
instance Control.Monad.Http.Class.MonadHttp m => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.Reader.ReaderT r m)
instance Control.Monad.Http.Class.MonadHttp m => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.State.Lazy.StateT r m)
instance Control.Monad.Http.Class.MonadHttp m => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.State.Strict.StateT r m)
instance (Control.Monad.Http.Class.MonadHttp m, GHC.Base.Monoid w) => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (Control.Monad.Http.Class.MonadHttp m, GHC.Base.Monoid w) => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.Writer.Strict.WriterT w m)
instance (Control.Monad.Http.Class.MonadHttp m, GHC.Base.Monoid w) => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
instance (Control.Monad.Http.Class.MonadHttp m, GHC.Base.Monoid w) => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.RWS.Strict.RWST r w s m)
instance Control.Monad.Http.Class.MonadHttp m => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.Maybe.MaybeT m)
instance Control.Monad.Http.Class.MonadHttp m => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.Except.ExceptT e m)
instance (Control.Monad.Http.Class.MonadHttp m, Control.Monad.Trans.Error.Error e) => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.Error.ErrorT e m)
instance Control.Monad.Http.Class.MonadHttp m => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.Random.Lazy.RandT g m)
instance Control.Monad.Http.Class.MonadHttp m => Control.Monad.Http.Class.MonadHttp (Control.Monad.CryptoRandom.CRandT g e m)
instance Control.Monad.Http.Class.MonadHttp m => Control.Monad.Http.Class.MonadHttp (Control.Monad.Logger.LoggingT m)
instance Control.Monad.Http.Class.MonadHttp m => Control.Monad.Http.Class.MonadHttp (Control.Monad.Logger.NoLoggingT m)
instance m ~ GHC.Types.IO => Control.Monad.Http.Class.MonadHttp (Control.Monad.Trans.Http.HttpT m)


-- | <a>MonadHttp</a> class with basic HTTP functionality.
module Control.Monad.Http

-- | The monad capable to do HTTP requests.
class Monad m => MonadHttp m where brRead = id

-- | Get a single chunk of data from the response body, or an empty
--   bytestring if no more data is available.
--   
--   Note that in order to consume the entire request body, you will need
--   to repeatedly call this function until you receive an empty
--   <tt>ByteString</tt> as a result.
withResponse :: MonadHttp m => Request -> (Response (BodyReaderM m) -> m a) -> m a
brRead :: MonadHttp m => BodyReaderM m -> m ByteString
type BodyReaderM m = m ByteString

-- | Http monad transformer, essentially <tt>ReaderT</tt> <a>Manager</a>.
newtype HttpT m a
HttpT :: (Manager -> m a) -> HttpT m a
[runHttpT] :: HttpT m a -> Manager -> m a

-- | Lower <a>HttpT</a> with default <a>Manager</a> created with
--   <a>tlsManagerSettings</a>.
evalHttpT :: MonadIO m => HttpT m a -> m a

-- | A convenience wrapper around <a>withResponse</a> which reads in the
--   entire response body and immediately releases resources.
httpLbs :: MonadHttp m => Request -> m (Response ByteString)

-- | Strictly consume all remaining chunks of data from the stream.
brConsume :: MonadHttp m => BodyReaderM m -> m [ByteString]

-- | All information on how to connect to a host and what should be sent in
--   the HTTP request.
--   
--   If you simply wish to download from a URL, see <tt>parseRequest</tt>.
--   
--   The constructor for this data type is not exposed. Instead, you should
--   use either the <tt>defaultRequest</tt> value, or <tt>parseRequest</tt>
--   to construct from a URL, and then use the records below to make
--   modifications. This approach allows http-client to add configuration
--   options without breaking backwards compatibility.
--   
--   For example, to construct a POST request, you could do something like:
--   
--   <pre>
--   initReq &lt;- parseRequest "http://www.example.com/path"
--   let req = initReq
--               { method = "POST"
--               }
--   </pre>
--   
--   For more information, please see
--   <a>http://www.yesodweb.com/book/settings-types</a>.
--   
--   Since 0.1.0
data Request :: *

-- | A simple representation of the HTTP response.
--   
--   Since 0.1.0
data Response body :: * -> *
