cgi 3001.1.7.5 → 3001.1.8
raw patch · 9 files changed
+36/−53 lines, 9 filesdep +MonadCatchIO-mtldep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: MonadCatchIO-mtl
Dependency ranges changed: base
API changes (from Hackage documentation)
- Network.CGI.Monad: instance (Functor m, Monad m) => Functor (CGIT m)
- Network.CGI.Monad: instance Monad m => Monad (CGIT m)
- Network.CGI.Monad: instance Monad m => MonadCGI (CGIT m)
- Network.CGI.Monad: instance MonadError SomeException (CGIT IO)
- Network.CGI.Monad: instance MonadIO m => MonadIO (CGIT m)
+ Network.CGI.Monad: instance (Monad m) => Functor (CGIT m)
+ Network.CGI.Monad: instance (Monad m) => Monad (CGIT m)
+ Network.CGI.Monad: instance (Monad m) => MonadCGI (CGIT m)
+ Network.CGI.Monad: instance (MonadCatchIO m) => MonadCatchIO (CGIT m)
+ Network.CGI.Monad: instance (MonadCatchIO m) => MonadError SomeException (CGIT m)
+ Network.CGI.Monad: instance (MonadIO m) => MonadIO (CGIT m)
- Network.CGI: authType :: MonadCGI m => m (Maybe String)
+ Network.CGI: authType :: (MonadCGI m) => m (Maybe String)
- Network.CGI: catchCGI :: CGI a -> (SomeException -> CGI a) -> CGI a
+ Network.CGI: catchCGI :: (MonadCGI m, MonadCatchIO m) => m a -> (SomeException -> m a) -> m a
- Network.CGI: class Eq a => Acceptable a
+ Network.CGI: class (Eq a) => Acceptable a
- Network.CGI: class Monad m => MonadCGI m
+ Network.CGI: class (Monad m) => MonadCGI m
- Network.CGI: class Monad m => MonadIO (m :: * -> *)
+ Network.CGI: class (Monad m) => MonadIO m :: (* -> *)
- Network.CGI: deleteCookie :: MonadCGI m => Cookie -> m ()
+ Network.CGI: deleteCookie :: (MonadCGI m) => Cookie -> m ()
- Network.CGI: getBody :: MonadCGI m => m String
+ Network.CGI: getBody :: (MonadCGI m) => m String
- Network.CGI: getBodyFPS :: MonadCGI m => m ByteString
+ Network.CGI: getBodyFPS :: (MonadCGI m) => m ByteString
- Network.CGI: getCookie :: MonadCGI m => String -> m (Maybe String)
+ Network.CGI: getCookie :: (MonadCGI m) => String -> m (Maybe String)
- Network.CGI: getInput :: MonadCGI m => String -> m (Maybe String)
+ Network.CGI: getInput :: (MonadCGI m) => String -> m (Maybe String)
- Network.CGI: getInputContentType :: MonadCGI m => String -> m (Maybe String)
+ Network.CGI: getInputContentType :: (MonadCGI m) => String -> m (Maybe String)
- Network.CGI: getInputFPS :: MonadCGI m => String -> m (Maybe ByteString)
+ Network.CGI: getInputFPS :: (MonadCGI m) => String -> m (Maybe ByteString)
- Network.CGI: getInputFilename :: MonadCGI m => String -> m (Maybe String)
+ Network.CGI: getInputFilename :: (MonadCGI m) => String -> m (Maybe String)
- Network.CGI: getInputNames :: MonadCGI m => m [String]
+ Network.CGI: getInputNames :: (MonadCGI m) => m [String]
- Network.CGI: getInputs :: MonadCGI m => m [(String, String)]
+ Network.CGI: getInputs :: (MonadCGI m) => m [(String, String)]
- Network.CGI: getInputsFPS :: MonadCGI m => m [(String, ByteString)]
+ Network.CGI: getInputsFPS :: (MonadCGI m) => m [(String, ByteString)]
- Network.CGI: getMultiInput :: MonadCGI m => String -> m [String]
+ Network.CGI: getMultiInput :: (MonadCGI m) => String -> m [String]
- Network.CGI: getMultiInputFPS :: MonadCGI m => String -> m [ByteString]
+ Network.CGI: getMultiInputFPS :: (MonadCGI m) => String -> m [ByteString]
- Network.CGI: getVar :: MonadCGI m => String -> m (Maybe String)
+ Network.CGI: getVar :: (MonadCGI m) => String -> m (Maybe String)
- Network.CGI: getVarWithDefault :: MonadCGI m => String -> String -> m String
+ Network.CGI: getVarWithDefault :: (MonadCGI m) => String -> String -> m String
- Network.CGI: getVars :: MonadCGI m => m [(String, String)]
+ Network.CGI: getVars :: (MonadCGI m) => m [(String, String)]
- Network.CGI: handleErrors :: CGI CGIResult -> CGI CGIResult
+ Network.CGI: handleErrors :: (MonadCGI m, MonadCatchIO m) => m CGIResult -> m CGIResult
- Network.CGI: handleExceptionCGI :: CGI a -> (SomeException -> CGI a) -> CGI a
+ Network.CGI: handleExceptionCGI :: (MonadCGI m, MonadCatchIO m) => m a -> (SomeException -> m a) -> m a
- Network.CGI: liftIO :: MonadIO m => forall a. IO a -> m a
+ Network.CGI: liftIO :: (MonadIO m) => forall a. IO a -> m a
- Network.CGI: logCGI :: MonadIO m => String -> m ()
+ Network.CGI: logCGI :: (MonadIO m) => String -> m ()
- Network.CGI: negotiate :: Acceptable a => [a] -> Maybe (Accept a) -> [a]
+ Network.CGI: negotiate :: (Acceptable a) => [a] -> Maybe (Accept a) -> [a]
- Network.CGI: output :: MonadCGI m => String -> m CGIResult
+ Network.CGI: output :: (MonadCGI m) => String -> m CGIResult
- Network.CGI: outputFPS :: MonadCGI m => ByteString -> m CGIResult
+ Network.CGI: outputFPS :: (MonadCGI m) => ByteString -> m CGIResult
- Network.CGI: outputNothing :: MonadCGI m => m CGIResult
+ Network.CGI: outputNothing :: (MonadCGI m) => m CGIResult
- Network.CGI: parseContentType :: Monad m => String -> m ContentType
+ Network.CGI: parseContentType :: (Monad m) => String -> m ContentType
- Network.CGI: pathInfo :: MonadCGI m => m String
+ Network.CGI: pathInfo :: (MonadCGI m) => m String
- Network.CGI: pathTranslated :: MonadCGI m => m String
+ Network.CGI: pathTranslated :: (MonadCGI m) => m String
- Network.CGI: progURI :: MonadCGI m => m URI
+ Network.CGI: progURI :: (MonadCGI m) => m URI
- Network.CGI: queryString :: MonadCGI m => m String
+ Network.CGI: queryString :: (MonadCGI m) => m String
- Network.CGI: queryURI :: MonadCGI m => m URI
+ Network.CGI: queryURI :: (MonadCGI m) => m URI
- Network.CGI: redirect :: MonadCGI m => String -> m CGIResult
+ Network.CGI: redirect :: (MonadCGI m) => String -> m CGIResult
- Network.CGI: remoteAddr :: MonadCGI m => m String
+ Network.CGI: remoteAddr :: (MonadCGI m) => m String
- Network.CGI: remoteHost :: MonadCGI m => m (Maybe String)
+ Network.CGI: remoteHost :: (MonadCGI m) => m (Maybe String)
- Network.CGI: remoteUser :: MonadCGI m => m (Maybe String)
+ Network.CGI: remoteUser :: (MonadCGI m) => m (Maybe String)
- Network.CGI: requestAccept :: MonadCGI m => m (Maybe (Accept ContentType))
+ Network.CGI: requestAccept :: (MonadCGI m) => m (Maybe (Accept ContentType))
- Network.CGI: requestAcceptCharset :: MonadCGI m => m (Maybe (Accept Charset))
+ Network.CGI: requestAcceptCharset :: (MonadCGI m) => m (Maybe (Accept Charset))
- Network.CGI: requestAcceptEncoding :: MonadCGI m => m (Maybe (Accept ContentEncoding))
+ Network.CGI: requestAcceptEncoding :: (MonadCGI m) => m (Maybe (Accept ContentEncoding))
- Network.CGI: requestAcceptLanguage :: MonadCGI m => m (Maybe (Accept Language))
+ Network.CGI: requestAcceptLanguage :: (MonadCGI m) => m (Maybe (Accept Language))
- Network.CGI: requestContentLength :: MonadCGI m => m (Maybe Int)
+ Network.CGI: requestContentLength :: (MonadCGI m) => m (Maybe Int)
- Network.CGI: requestContentType :: MonadCGI m => m (Maybe String)
+ Network.CGI: requestContentType :: (MonadCGI m) => m (Maybe String)
- Network.CGI: requestHeader :: MonadCGI m => String -> m (Maybe String)
+ Network.CGI: requestHeader :: (MonadCGI m) => String -> m (Maybe String)
- Network.CGI: requestMethod :: MonadCGI m => m String
+ Network.CGI: requestMethod :: (MonadCGI m) => m String
- Network.CGI: requestURI :: MonadCGI m => m URI
+ Network.CGI: requestURI :: (MonadCGI m) => m URI
- Network.CGI: runCGI :: MonadIO m => CGIT m CGIResult -> m ()
+ Network.CGI: runCGI :: (MonadIO m) => CGIT m CGIResult -> m ()
- Network.CGI: scriptName :: MonadCGI m => m String
+ Network.CGI: scriptName :: (MonadCGI m) => m String
- Network.CGI: serverName :: MonadCGI m => m String
+ Network.CGI: serverName :: (MonadCGI m) => m String
- Network.CGI: serverPort :: MonadCGI m => m Int
+ Network.CGI: serverPort :: (MonadCGI m) => m Int
- Network.CGI: setCookie :: MonadCGI m => Cookie -> m ()
+ Network.CGI: setCookie :: (MonadCGI m) => Cookie -> m ()
- Network.CGI: setHeader :: MonadCGI m => String -> String -> m ()
+ Network.CGI: setHeader :: (MonadCGI m) => String -> String -> m ()
- Network.CGI: setStatus :: MonadCGI m => Int -> String -> m ()
+ Network.CGI: setStatus :: (MonadCGI m) => Int -> String -> m ()
- Network.CGI: tryCGI :: CGI a -> CGI (Either SomeException a)
+ Network.CGI: tryCGI :: (MonadCGI m, MonadCatchIO m) => m a -> m (Either SomeException a)
- Network.CGI.Monad: catchCGI :: CGI a -> (SomeException -> CGI a) -> CGI a
+ Network.CGI.Monad: catchCGI :: (MonadCGI m, MonadCatchIO m) => m a -> (SomeException -> m a) -> m a
- Network.CGI.Monad: cgiAddHeader :: MonadCGI m => HeaderName -> String -> m ()
+ Network.CGI.Monad: cgiAddHeader :: (MonadCGI m) => HeaderName -> String -> m ()
- Network.CGI.Monad: cgiGet :: MonadCGI m => (CGIRequest -> a) -> m a
+ Network.CGI.Monad: cgiGet :: (MonadCGI m) => (CGIRequest -> a) -> m a
- Network.CGI.Monad: class Monad m => MonadCGI m
+ Network.CGI.Monad: class (Monad m) => MonadCGI m
- Network.CGI.Monad: handleExceptionCGI :: CGI a -> (SomeException -> CGI a) -> CGI a
+ Network.CGI.Monad: handleExceptionCGI :: (MonadCGI m, MonadCatchIO m) => m a -> (SomeException -> m a) -> m a
- Network.CGI.Monad: runCGIT :: Monad m => CGIT m a -> CGIRequest -> m (Headers, a)
+ Network.CGI.Monad: runCGIT :: (Monad m) => CGIT m a -> CGIRequest -> m (Headers, a)
- Network.CGI.Monad: tryCGI :: CGI a -> CGI (Either SomeException a)
+ Network.CGI.Monad: tryCGI :: (MonadCGI m, MonadCatchIO m) => m a -> m (Either SomeException a)
- Network.CGI.Protocol: getCGIVars :: MonadIO m => m [(String, String)]
+ Network.CGI.Protocol: getCGIVars :: (MonadIO m) => m [(String, String)]
- Network.CGI.Protocol: hRunCGI :: MonadIO m => [(String, String)] -> Handle -> Handle -> (CGIRequest -> m (Headers, CGIResult)) -> m ()
+ Network.CGI.Protocol: hRunCGI :: (MonadIO m) => [(String, String)] -> Handle -> Handle -> (CGIRequest -> m (Headers, CGIResult)) -> m ()
- Network.CGI.Protocol: logCGI :: MonadIO m => String -> m ()
+ Network.CGI.Protocol: logCGI :: (MonadIO m) => String -> m ()
- Network.CGI.Protocol: maybeRead :: Read a => String -> Maybe a
+ Network.CGI.Protocol: maybeRead :: (Read a) => String -> Maybe a
- Network.CGI.Protocol: replace :: Eq a => a -> a -> [a] -> [a]
+ Network.CGI.Protocol: replace :: (Eq a) => a -> a -> [a] -> [a]
- Network.CGI.Protocol: runCGIEnvFPS :: Monad m => [(String, String)] -> ByteString -> (CGIRequest -> m (Headers, CGIResult)) -> m ByteString
+ Network.CGI.Protocol: runCGIEnvFPS :: (Monad m) => [(String, String)] -> ByteString -> (CGIRequest -> m (Headers, CGIResult)) -> m ByteString
Files
- LICENSE +2/−3
- Network/CGI.hs +4/−8
- Network/CGI/Compat.hs +3/−8
- Network/CGI/Cookie.hs +1/−1
- Network/CGI/Header.hs +1/−1
- Network/CGI/Monad.hs +16/−17
- Network/CGI/Multipart.hs +1/−1
- Network/CGI/Protocol.hs +3/−4
- cgi.cabal +5/−10
LICENSE view
@@ -1,6 +1,5 @@-Copyright 2001-2010, The University Court of the University of-Glasgow, Bjorn Bringert, Andy Gill, Anders Kaseorg, Ian Lynagh, Erik-Meijer, Sven Panne, Jeremy Shaw+Copyright 2001-2005, The University Court of the University of+Glasgow, Bjorn Bringert, Andy Gill, Ian Lynagh, Erik Meijer, Sven Panne All rights reserved.
Network/CGI.hs view
@@ -8,7 +8,7 @@ -- (c) Jeremy Shaw 2005 -- License : BSD-style ----- Maintainer : Anders Kaseorg <andersk@mit.edu>+-- Maintainer : bjorn@bringert.net -- Stability : experimental -- Portability : non-portable (uses Control.Monad.State) --@@ -94,13 +94,9 @@ , module Network.CGI.Compat ) where -#if MIN_VERSION_base(4,0,0)-import Control.Exception-#else-import Control.Exception.Extensible-#endif- (Exception(..), SomeException, ErrorCall(..))+import Control.Exception.Extensible (Exception(..), SomeException, ErrorCall(..)) import Control.Monad (liftM)+import Control.Monad.CatchIO (MonadCatchIO) import Control.Monad.Trans (MonadIO, liftIO) import Data.Char (toUpper) import Data.List (intersperse, sort, group)@@ -179,7 +175,7 @@ -- > -- > main :: IO () -- > main = runCGI (handleErrors cgiMain)-handleErrors :: CGI CGIResult -> CGI CGIResult+handleErrors :: (MonadCGI m, MonadCatchIO m) => m CGIResult -> m CGIResult handleErrors = flip catchCGI outputException --
Network/CGI/Compat.hs view
@@ -7,7 +7,7 @@ -- (c) Jeremy Shaw 2005 -- License : BSD-style ----- Maintainer : Anders Kaseorg <andersk@mit.edu>+-- Maintainer : bjorn@bringert.net -- Stability : experimental -- Portability : non-portable (uses Control.Monad.State) --@@ -20,12 +20,7 @@ ) where import Control.Concurrent (forkIO)-#if MIN_VERSION_base(4,0,0)-import Control.Exception-#else-import Control.Exception.Extensible-#endif- as Exception (SomeException, throw, catch, finally)+import Control.Exception.Extensible as Exception (SomeException,throw,catch,finally) import Control.Monad (unless) import Control.Monad.Trans (MonadIO, liftIO) import qualified Data.Map as Map@@ -94,7 +89,7 @@ (\ e -> abort "Cannot connect to CGI daemon." e) BS.hPut h str >> hPutStrLn h "" (sendBack h `finally` hClose h)- `Exception.catch` (\e -> unless (isEOFError e) (ioError e))+ `Prelude.catch` (\e -> unless (isEOFError e) (ioError e)) -- | Returns the query string, or the request body if it is -- a POST request, or the empty string if there is an error.
Network/CGI/Cookie.hs view
@@ -5,7 +5,7 @@ -- (c) Ian Lynagh 2005 -- License : BSD-style ----- Maintainer : Anders Kaseorg <andersk@mit.edu>+-- Maintainer : Bjorn Bringert <bjorn@bringert.net> -- Stability : experimental -- Portability : portable --
Network/CGI/Header.hs view
@@ -7,7 +7,7 @@ -- (c) Bjorn Bringert 2005-2006 -- License : BSD-style ----- Maintainer : Anders Kaseorg <andersk@mit.edu>+-- Maintainer : bjorn@bringert.net -- Stability : experimental -- Portability : non-portable --
Network/CGI/Monad.hs view
@@ -5,7 +5,7 @@ -- Copyright : (c) Bjorn Bringert 2006 -- License : BSD-style ----- Maintainer : Anders Kaseorg <andersk@mit.edu>+-- Maintainer : bjorn@bringert.net -- Stability : experimental -- Portability : non-portable --@@ -27,18 +27,14 @@ throwCGI, catchCGI, tryCGI, handleExceptionCGI, ) where -#if MIN_VERSION_base(4,0,0)-import Control.Exception-#else-import Control.Exception.Extensible-#endif- as Exception (SomeException, try, throwIO)+import Prelude hiding (catch)+import Control.Exception.Extensible as Exception (SomeException, throwIO) import Control.Monad (liftM)+import Control.Monad.CatchIO (MonadCatchIO, block, catch, try, unblock) import Control.Monad.Error (MonadError(..)) import Control.Monad.Reader (ReaderT(..), asks) import Control.Monad.Writer (WriterT(..), tell) import Control.Monad.Trans (MonadTrans, MonadIO, liftIO, lift)-import Data.Monoid (mempty) import Data.Typeable (Typeable(..), Typeable1(..), mkTyConApp, mkTyCon) @@ -59,7 +55,7 @@ typeOf _ = mkTyConApp (mkTyCon "Network.CGI.Monad.CGIT") [typeOf1 (undefined :: m a), typeOf (undefined :: a)] -instance (Functor m, Monad m) => Functor (CGIT m) where+instance Monad m => Functor (CGIT m) where fmap f c = CGIT (fmap f (unCGIT c)) instance Monad m => Monad (CGIT m) where@@ -71,6 +67,11 @@ instance MonadIO m => MonadIO (CGIT m) where liftIO = lift . liftIO +instance MonadCatchIO m => MonadCatchIO (CGIT m) where+ CGIT m `catch` h = CGIT (try m) >>= either h return+ block (CGIT m) = CGIT (block m)+ unblock (CGIT m) = CGIT (unblock m)+ -- | 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.@@ -97,7 +98,7 @@ -- * Error handling -- -instance MonadError SomeException (CGIT IO) where+instance MonadCatchIO m => MonadError SomeException (CGIT m) where throwError = throwCGI catchError = catchCGI @@ -108,17 +109,15 @@ -- | Catches any expection thrown by a CGI action, and uses the given -- exception handler if an exception is thrown.-catchCGI :: CGI a -> (SomeException -> CGI a) -> CGI a-catchCGI c h = tryCGI c >>= either h return+catchCGI :: (MonadCGI m, MonadCatchIO m) => m a -> (SomeException -> m a) -> m a+catchCGI = catch -- | Catches any exception thrown by an CGI action, and returns either -- the exception, or if no exception was raised, the result of the action.-tryCGI :: CGI a -> CGI (Either SomeException a)-tryCGI (CGIT c) = CGIT (ReaderT (\r -> WriterT (f (runWriterT (runReaderT c r)))))- where- f = liftM (either (\ex -> (Left ex,mempty)) (\(a,w) -> (Right a,w))) . try+tryCGI :: (MonadCGI m, MonadCatchIO m) => m a -> m (Either SomeException a)+tryCGI = try {-# DEPRECATED handleExceptionCGI "Use catchCGI instead." #-} -- | Deprecated version of 'catchCGI'. Use 'catchCGI' instead.-handleExceptionCGI :: CGI a -> (SomeException -> CGI a) -> CGI a+handleExceptionCGI :: (MonadCGI m, MonadCatchIO m) => m a -> (SomeException -> m a) -> m a handleExceptionCGI = catchCGI
Network/CGI/Multipart.hs view
@@ -7,7 +7,7 @@ -- (c) Bjorn Bringert 2005-2006 -- License : BSD-style ----- Maintainer : Anders Kaseorg <andersk@mit.edu>+-- Maintainer : bjorn@bringert.net -- Stability : experimental -- Portability : non-portable --
Network/CGI/Protocol.hs view
@@ -4,7 +4,7 @@ -- Copyright : (c) Bjorn Bringert 2006 -- License : BSD-style ----- Maintainer : Anders Kaseorg <andersk@mit.edu>+-- Maintainer : bjorn@bringert.net -- Stability : experimental -- Portability : non-portable --@@ -39,7 +39,7 @@ import Data.Maybe (fromMaybe, listToMaybe, isJust) import Network.URI (unEscapeString,escapeURIString,isUnescapedInURI) import System.Environment (getEnvironment)-import System.IO (Handle, hPutStrLn, stderr, hFlush, hSetBinaryMode)+import System.IO (Handle, hPutStrLn, stderr, hFlush) import qualified Data.ByteString.Lazy.Char8 as BS import Data.ByteString.Lazy.Char8 (ByteString)@@ -104,8 +104,7 @@ -> (CGIRequest -> m (Headers, CGIResult)) -- ^ CGI action -> m () hRunCGI env hin hout f = - do liftIO $ hSetBinaryMode hin True- inp <- liftIO $ BS.hGetContents hin+ do inp <- liftIO $ BS.hGetContents hin outp <- runCGIEnvFPS env inp f liftIO $ BS.hPut hout outp liftIO $ hFlush hout
cgi.cabal view
@@ -1,5 +1,5 @@ Name: cgi-Version: 3001.1.7.5+Version: 3001.1.8 Copyright: Bjorn Bringert, Andy Gill, Anders Kaseorg, Ian Lynagh, Erik Meijer, Sven Panne, Jeremy Shaw Category: Network@@ -16,7 +16,6 @@ Flag split-base Flag bytestring-in-base-Flag extensible-exceptions-in-base Library Exposed-Modules:@@ -29,16 +28,16 @@ Network.CGI.Accept, Network.CGI.Multipart, Network.CGI.Header- Extensions:- CPP,- MultiParamTypeClasses+ Extensions: MultiParamTypeClasses ghc-options: -Wall Build-depends: network >= 2.0, parsec >= 2.0, mtl >= 1.0,- xhtml >= 3000.0.0+ MonadCatchIO-mtl,+ xhtml >= 3000.0.0,+ extensible-exceptions If flag(split-base) Build-depends: base >= 3 && < 5, old-time, old-locale, containers Else@@ -47,10 +46,6 @@ Build-depends: base >= 2 && < 3 Else Build-depends: base < 2 || < 5, bytestring- If flag(extensible-exceptions-in-base)- Build-depends: base >= 4- Else- Build-depends: base < 4, extensible-exceptions --Executable: printinput --Main-Is: printinput.hs