import Control.Concurrent
import Control.Concurrent.STM
import Control.Exception
+import Control.Monad hiding (mapM_)
import Control.Monad.IO.Class
-import Control.Monad.Reader
+import Control.Monad.Reader (ReaderT, runReaderT, ask)
import Control.Monad.Unicode
import Data.Ascii (Ascii, CIAscii)
import qualified Data.Ascii as A
import qualified Data.ByteString as Strict
-import Data.List
+import Data.Collections
+import Data.List (intersperse, nub)
import Data.Maybe
import Data.Monoid
import Data.Monoid.Unicode
#if defined(HAVE_SSL)
import OpenSSL.X509
#endif
-import Prelude hiding (catch)
+import Prelude hiding (catch, concat, mapM_, tail)
import Prelude.Unicode
import System.IO
-- in the response. Hooray!
flip runResource ni $
do setStatus $ aboStatus abo
- mapM_ (uncurry setHeader) $ H.fromHeaders $ aboHeaders abo
+ mapM_ (uncurry setHeader) (aboHeaders abo)
setHeader "Content-Type" defaultPageContentType
deleteHeader "Content-Encoding"
putBuilder $ abortPage niConfig (Just niRequest) res abo
$ do state ← readTVar $ niState ni
when (state > DecidingHeader)
$ fail "Too late to declare the response status."
- setResponseStatus ni sc
+ res ← readTVar $ niResponse ni
+ writeTVar (niResponse ni) $ setStatusCode sc res
-- |@'setHeader' name value@ declares the value of the response header
-- @name@ as @value@. Note that this function is not intended to be