]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Abortion.hs
Optimization
[Lucu.git] / Network / HTTP / Lucu / Abortion.hs
index 9ff629df73e84db0eac2a50073e06b2494eb120b..0a5ed07ff5435913e02beaba0cfbf7a905ed9a50 100644 (file)
@@ -16,8 +16,9 @@ import           Control.Arrow.ArrowIO
 import           Control.Concurrent.STM
 import           Control.Exception
 import           Control.Monad.Trans
-import           GHC.Conc (unsafeIOToSTM)
+import           Data.ByteString.Base (ByteString)
 import           Data.Dynamic
+import           GHC.Conc (unsafeIOToSTM)
 import           Network.HTTP.Lucu.Config
 import           Network.HTTP.Lucu.DefaultPage
 import           Network.HTTP.Lucu.Headers
@@ -60,24 +61,24 @@ data Abortion = Abortion {
 -- > abort MovedPermanently
 -- >       [("Location", "http://example.net/")]
 -- >       (Just "It has been moved to example.net")
-abort :: MonadIO m => StatusCode -> [ (String, String) ] -> Maybe String -> m a
+abort :: MonadIO m => StatusCode -> [ (ByteString, ByteString) ] -> Maybe String -> m a
 abort status headers msg
     = status `seq` headers `seq` msg `seq`
-      let abo = Abortion status headers msg
+      let abo = Abortion status (toHeaders headers) msg
           exc = DynException (toDyn abo)
       in
         liftIO $ throwIO exc
 
 -- |Computation of @'abortSTM' status headers msg@ just computes
 -- 'abort' in a 'Control.Monad.STM.STM' monad.
-abortSTM :: StatusCode -> [ (String, String) ] -> Maybe String -> STM a
+abortSTM :: StatusCode -> [ (ByteString, ByteString) ] -> Maybe String -> STM a
 abortSTM status headers msg
     = status `seq` headers `seq` msg `seq`
       unsafeIOToSTM $! abort status headers msg
 
 -- | Computation of @'abortA' -< (status, (headers, msg))@ just
 -- computes 'abort' in an 'Control.Arrow.ArrowIO.ArrowIO'.
-abortA :: ArrowIO a => a (StatusCode, ([ (String, String) ], Maybe String)) c
+abortA :: ArrowIO a => a (StatusCode, ([ (ByteString, ByteString) ], Maybe String)) c
 abortA 
     = arrIO3 abort
 
@@ -99,7 +100,7 @@ abortPage conf reqM res abo
         Nothing
             -> let res'  = res { resStatus = aboStatus abo }
                    res'' = foldl (.) id [setHeader name value
-                                             | (name, value) <- aboHeaders abo]
+                                             | (name, value) <- fromHeaders $ aboHeaders abo]
                            $ res'
                in
                  getDefaultPage conf reqM res''