Servant recently got support for returning multiple types of responses from a single endpoint with the `UVerb`: https://github.com/haskell-servant/servant/pull/1314 It might be possible to rewrite servant-checked-exceptions (and simplify parts of it) by using this new `UVerb` functionality.