
The type signature for catch is --
catch :: Exception e => IO a -> (e -> IO a) -> IO a
This is Spock's monad: https://hackage.haskell.org/package/Spock-core-0.11.0.0/docs/Web-Spock-Actio... (it has MonadTrans, MonadIO, Monad, Functor, Applicative, Alternative instances).
How do I catch an exception coming out of an action in the ActionCtxT monad?
The problem is: ActionCtxT includes a custom error system, which is orthogonal to that provided by exceptions. So to handle exceptions in such a monad, you'd need to bend over backwards to make these two systems work together. To be honest I'm not even sure if this is possible, at least in a way that doesn't have surprising edge cases. My recommendation is to catch the exception in IO first, before it is lifted into the ActionCtxT. If your business logic is decoupled from the web framework (as it should be) then it should be easy enough to do this. -- Chris Wong (https://lambda.xyz) "I had not the vaguest idea what this meant and when I could not remember the words, my tutor threw the book at my head, which did not stimulate my intellect in any way." -- Bertrand Russell