]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Abortion.hs
Fixed build failure on recent GHC and other libraries
[Lucu.git] / Network / HTTP / Lucu / Abortion.hs
index dc33eb125bfda4027413bb5782aaac51b09cca8c..db0c55262c62d9a568cf22347ace59c1f60f7e5b 100644 (file)
@@ -1,4 +1,4 @@
--- #prune
+{-# OPTIONS_HADDOCK prune #-}
 
 -- |Aborting the computation of 'Network.HTTP.Lucu.Resource.Resource'
 -- in any 'Prelude.IO' monads or arrows.
@@ -28,8 +28,7 @@ import           Network.HTTP.Lucu.Response
 import           System.IO.Unsafe
 import           Text.XML.HXT.Arrow.WriteDocument
 import           Text.XML.HXT.Arrow.XmlArrow
-import           Text.XML.HXT.Arrow.XmlIOStateArrow
-import           Text.XML.HXT.DOM.XmlKeywords
+import           Text.XML.HXT.Arrow.XmlState
 
 
 data Abortion = Abortion {
@@ -38,13 +37,15 @@ data Abortion = Abortion {
     , aboMessage :: !(Maybe String)
     } deriving (Show, Typeable)
 
+instance Exception Abortion
+
 -- |Computation of @'abort' status headers msg@ aborts the
 -- 'Network.HTTP.Lucu.Resource.Resource' monad with given status,
 -- additional response headers, and optional message string.
 --
--- What this really does is to just throw a special
--- 'Control.Exception.DynException'. The exception will be caught by
--- the Lucu.
+-- What this really does is to throw a special
+-- 'Control.Exception.Exception'. The exception will be caught by the
+-- Lucu system.
 --
 -- 1. If the 'Network.HTTP.Lucu.Resource.Resource' is in the /Deciding
 --    Header/ or any precedent states, it is possible to use the
@@ -66,9 +67,8 @@ abort :: MonadIO m => StatusCode -> [ (String, String) ] -> Maybe String -> m a
 abort status headers msg
     = status `seq` headers `seq` msg `seq`
       let abo = Abortion status (toHeaders $ map pack headers) msg
-          exc = DynException (toDyn abo)
       in
-        liftIO $ throwIO exc
+        liftIO $ throwIO abo
     where
       pack (x, y) = (C8.pack x, C8.pack y)
 
@@ -101,14 +101,13 @@ abortPage conf reqM res abo
             -> let [html] = unsafePerformIO 
                             $ runX ( mkDefaultPage conf (aboStatus abo) (txt msg)
                                      >>>
-                                     writeDocumentToString [(a_indent, v_1)]
+                                     writeDocumentToString [ withIndent True ]
                                    )
                in
                  html
         Nothing
             -> let res'  = res { resStatus = aboStatus abo }
                    res'' = foldl (.) id [setHeader name value
-                                             | (name, value) <- fromHeaders $ aboHeaders abo]
-                           $ res'
+                                             | (name, value) <- fromHeaders $ aboHeaders abo] res'
                in
                  getDefaultPage conf reqM res''