cgi-3001.1.7.5: A library for writing CGI programs

Portability | non-portable
Stability | experimental
Maintainer | Anders Kaseorg <andersk@mit.edu>
Safe Haskell | None

Network.CGI.Monad

Contents

- CGI monad class
- CGI monad transformer
- Request info
- Error handling

Description

Internal stuff that most people shouldn't have to use. This module mostly deals with the internals of the CGIT monad transformer.

Synopsis

- class Monad m => MonadCGI m where
  - cgiAddHeader :: HeaderName -> String -> m ()
  - cgiGet :: (CGIRequest -> a) -> m a
- newtype CGIT m a = CGIT {
  - unCGIT :: ReaderT CGIRequest (WriterT Headers m) a
  }
- type CGI a = CGIT IO a
- runCGIT :: Monad m => CGIT m a -> CGIRequest -> m (Headers, a)
- data CGIRequest = CGIRequest {
  - cgiVars :: Map String String
  - cgiInputs :: [(String, Input)]
  - cgiRequestBody :: ByteString
  }
- throwCGI :: (MonadCGI m, MonadIO m) => SomeException -> m a
- catchCGI :: CGI a -> (SomeException -> CGI a) -> CGI a
- tryCGI :: CGI a -> CGI (Either SomeException a)
- handleExceptionCGI :: CGI a -> (SomeException -> CGI a) -> CGI a

# CGI monad class

class Monad m => MonadCGI m where Source

The class of CGI monads. Most CGI actions can be run in any monad which is an instance of this class, which means that you can use your own monad transformers to add extra functionality.

Methods

cgiAddHeader :: HeaderName -> String -> m ()Source

Add a response header.

cgiGet :: (CGIRequest -> a) -> m aSource

Get something from the CGI request.

Instances

Monad m => MonadCGI (CGIT m) |

# CGI monad transformer

newtype CGIT m a Source

The CGIT monad transformer.

Constructors

CGIT |
Fields unCGIT :: ReaderT CGIRequest (WriterT Headers m) a

Instances

MonadTrans CGIT |
MonadError SomeException (CGIT IO) |
Monad m => Monad (CGIT m) |
(Functor m, Monad m) => Functor (CGIT m) |
MonadIO m => MonadIO (CGIT m) |
Monad m => MonadCGI (CGIT m) |
(Typeable1 m, Typeable a) => Typeable (CGIT m a) |

type CGI a = CGIT IO aSource

A simple CGI monad with just IO.

runCGIT :: Monad m => CGIT m a -> CGIRequest -> m (Headers, a)Source

Run a CGI action.

# Request info

data CGIRequest Source

The input to a CGI action.

Constructors

CGIRequest |
Fields cgiVars :: Map String String Environment variables. cgiInputs :: [(String, Input)] Input parameters. For better laziness in reading inputs, this is not a Map. cgiRequestBody :: ByteString Raw request body. To avoid memory leaks, this is the empty string if the request body has been interpreted as inputs in application/x-www-form-urlencoded or multipart/form-data format.

Instances

Show CGIRequest |

# Error handling

throwCGI :: (MonadCGI m, MonadIO m) => SomeException -> m aSource

Throw an exception in a CGI monad. The monad is required to be a `MonadIO`, so that we can use `throwIO` to guarantee ordering.

catchCGI :: CGI a -> (SomeException -> CGI a) -> CGI aSource

Catches any expection thrown by a CGI action, and uses the given exception handler if an exception is thrown.

tryCGI :: CGI a -> CGI (Either SomeException a)Source

Catches any exception thrown by an CGI action, and returns either the exception, or if no exception was raised, the result of the action.

handleExceptionCGI :: CGI a -> (SomeException -> CGI a) -> CGI aSource

Deprecated: Use catchCGI instead.

Deprecated version of `catchCGI`. Use `catchCGI` instead.