--- #prune
+{-# OPTIONS_HADDOCK prune #-}
-- |Aborting the computation of 'Network.HTTP.Lucu.Resource.Resource'
-- in any 'Prelude.IO' monads or arrows.
, aboMessage :: !(Maybe String)
} deriving (Show, Typeable)
+instance Exception Abortion where
+ toException = SomeException
+ fromException (SomeException e) = cast e
+
-- |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
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)