Stability | experimental |
---|---|
Maintainer | Alp Mestanogullari <alp@zalora.com> |
Safe Haskell | Safe-Inferred |
Everything you'll need when doing some kind of exception handling around your "database operations".
- data ExceptionCatcher err
- noCatch :: ExceptionCatcher err
- catchAnd :: Exception except => (except -> err) -> ExceptionCatcher err
- combineCatchers :: ExceptionCatcher err -> ExceptionCatcher err -> ExceptionCatcher err
- handledWith :: IO a -> ExceptionCatcher err -> IO (Either err a)
Creating an combining ExceptionCatcher
s
data ExceptionCatcher err Source
A container for zero or more exception catchers.
By exception catcher, we mean here a function that can convert
some precise instance of Exception
to the error type used in
your scotty app (the e
type in Servant.Resource Servant.Service)
Monoid (ExceptionCatcher err) | If you're into |
noCatch :: ExceptionCatcher errSource
Don't catch any exception.
catchAnd :: Exception except => (except -> err) -> ExceptionCatcher errSource
Create an ExceptionCatcher
from a function.
This will make the catcher aware of exceptions of type except
so that when you'll run a catcher against an IO
action
using raiseIfExc
or handledWith
, if an exception of this type
is thrown, it will be caught and converted to the error type of your
web application using the provided function.
combineCatchers :: ExceptionCatcher err -> ExceptionCatcher err -> ExceptionCatcher errSource
Combine two ExceptionCatcher
.
The resulting ExceptionCatcher
will be able to catch
exceptions using the catchers from both arguments.
Running IO
actions against an ExceptionCatcher
handledWith :: IO a -> ExceptionCatcher err -> IO (Either err a)Source
Run an IO
action by watching for all the exceptions
supported by the ExceptionCatcher
.
If an exception is thrown somewhere in the action and is caught
by the catcher, it will call the function given to catchAnd
to convert the exception value to the error type of your scotty application.
If an exception is thrown whose type isn't one for which there's a catcher
in the ExceptionCatcher
argument, you'll have to catch it yourself or let it
be sent to the default handler.
Since runService
sets up a defaultHandler
, you'll most
likely want to directly use raiseIfExc
which raise
s the error value
you got from the exception if some exception is thrown or just run some
scotty action if everything went smoothly. This means writing a handler
that'll set up a response with the proper HTTP status and send some JSON
to the client with an informative error message, which... isn't a bad thing :-)