-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Extensible exceptions for servant APIs @package servant-exceptions @version 0.1.1 module Servant.Exception data Throws (e :: *) class (Typeable e, Show e) => ToServantErr e status :: ToServantErr e => e -> Status message :: ToServantErr e => e -> Text headers :: ToServantErr e => e -> [Header] -- | A root exception type (see Control.Exception) to provide a -- common rendering format via MimeRender for builtin content -- types JSON and PlainText. data ServantException toServantException :: (Exception e, ToJSON e, ToServantErr e) => e -> SomeException fromServantException :: Exception e => SomeException -> Maybe e -- | Any type that you wish to throw or catch as an exception must be an -- instance of the Exception class. The simplest case is a new -- exception type directly below the root: -- --
-- data MyException = ThisException | ThatException -- deriving Show -- -- instance Exception MyException ---- -- The default method definitions in the Exception class do what -- we need in this case. You can now throw and catch -- ThisException and ThatException as exceptions: -- --
-- *Main> throw ThisException `catch` \e -> putStrLn ("Caught " ++ show (e :: MyException))
-- Caught ThisException
--
--
-- In more complicated examples, you may wish to define a whole hierarchy
-- of exceptions:
--
-- -- --------------------------------------------------------------------- -- -- Make the root exception type for all the exceptions in a compiler -- -- data SomeCompilerException = forall e . Exception e => SomeCompilerException e -- -- instance Show SomeCompilerException where -- show (SomeCompilerException e) = show e -- -- instance Exception SomeCompilerException -- -- compilerExceptionToException :: Exception e => e -> SomeException -- compilerExceptionToException = toException . SomeCompilerException -- -- compilerExceptionFromException :: Exception e => SomeException -> Maybe e -- compilerExceptionFromException x = do -- SomeCompilerException a <- fromException x -- cast a -- -- --------------------------------------------------------------------- -- -- Make a subhierarchy for exceptions in the frontend of the compiler -- -- data SomeFrontendException = forall e . Exception e => SomeFrontendException e -- -- instance Show SomeFrontendException where -- show (SomeFrontendException e) = show e -- -- instance Exception SomeFrontendException where -- toException = compilerExceptionToException -- fromException = compilerExceptionFromException -- -- frontendExceptionToException :: Exception e => e -> SomeException -- frontendExceptionToException = toException . SomeFrontendException -- -- frontendExceptionFromException :: Exception e => SomeException -> Maybe e -- frontendExceptionFromException x = do -- SomeFrontendException a <- fromException x -- cast a -- -- --------------------------------------------------------------------- -- -- Make an exception type for a particular frontend compiler exception -- -- data MismatchedParentheses = MismatchedParentheses -- deriving Show -- -- instance Exception MismatchedParentheses where -- toException = frontendExceptionToException -- fromException = frontendExceptionFromException ---- -- We can now catch a MismatchedParentheses exception as -- MismatchedParentheses, SomeFrontendException or -- SomeCompilerException, but not other types, e.g. -- IOException: -- --
-- *Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: MismatchedParentheses))
-- Caught MismatchedParentheses
-- *Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: SomeFrontendException))
-- Caught MismatchedParentheses
-- *Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: SomeCompilerException))
-- Caught MismatchedParentheses
-- *Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: IOException))
-- *** Exception: MismatchedParentheses
--
class (Typeable * e, Show e) => Exception e
toException :: Exception e => e -> SomeException
fromException :: Exception e => SomeException -> Maybe e
-- | Render this exception value in a human-friendly manner.
--
-- Default implementation: show.
displayException :: Exception e => e -> String
-- | Catch and rethrow using mapping function f.
mapException :: (Exception e1, Exception e2, MonadCatch m) => (e1 -> e2) -> m a -> m a
instance GHC.Show.Show Servant.Exception.ServantException
instance GHC.Exception.Exception Servant.Exception.ServantException
instance Servant.API.ContentTypes.MimeRender Servant.API.ContentTypes.JSON Servant.Exception.ServantException
instance Servant.API.ContentTypes.MimeRender Servant.API.ContentTypes.PlainText Servant.Exception.ServantException
instance Servant.Exception.ToServantErr Servant.Exception.ServantException
instance forall k e (ct :: [*]) (mt :: k) (st :: GHC.Types.Nat) a (context :: [*]). (GHC.Exception.Exception e, Servant.Exception.ToServantErr e, Servant.API.ContentTypes.AllMimeRender ct e, Servant.Server.Internal.HasServer (Servant.API.Verbs.Verb mt st ct a) context) => Servant.Server.Internal.HasServer (Servant.Exception.Throws e Servant.API.Sub.:> Servant.API.Verbs.Verb mt st ct a) context
instance forall k1 k (api :: k) e (upstream :: k1) (context :: [*]). Servant.Server.Internal.HasServer (api Servant.API.Sub.:> (Servant.Exception.Throws e Servant.API.Sub.:> upstream)) context => Servant.Server.Internal.HasServer (Servant.Exception.Throws e Servant.API.Sub.:> (api Servant.API.Sub.:> upstream)) context
instance Servant.Server.Internal.HasServer ((Servant.Exception.Throws e Servant.API.Sub.:> api1) Servant.API.Alternative.:<|> (Servant.Exception.Throws e Servant.API.Sub.:> api2)) context => Servant.Server.Internal.HasServer (Servant.Exception.Throws e Servant.API.Sub.:> (api1 Servant.API.Alternative.:<|> api2)) context