partial-handler: A composable exception handler
If you have ever had to compose an exception handler for exceptions of multiple types, you know how frustraiting it can get. This library approaches this issue by providing a composable exception handler type, which has instances of the standard classes.
Composability means that you can define custom partial handlers and reuse them by composing other handlers from them.
Here is an example of a composable partial handler, which only defines what to do in case of a ThreadKilled exception (the code uses the LambdaCase extension):
ignoreThreadKilled :: PartialHandler () ignoreThreadKilled = typed $ \case ThreadKilled -> Just $ return () _ -> Nothing
Here's how you can construct a handler of type SomeException -> IO ()
using this library:
totalizeRethrowing $ ignoreThreadKilled <> onAlreadyExists (putStrLn "Already exists")
and here is how you would do it traditionally (with the MultiWayIf extension):
\e -> if | Just ThreadKilled <- fromException e -> return () | Just e' <- fromException e, isAlreadyExistsError e' -> putStrLn "Already exists" | otherwise -> throwIO e
Putting all the syntactic trickery to make it shorter aside, this handler is a monolith block of code. Unlike with PartialHandler you can neither decompose it into simpler ones, nor compose it with other handlers to form a more complex one.
Downloads
- partial-handler-1.0.3.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
Versions [RSS] | 0.1.0, 0.1.1, 1.0.0.0, 1.0.1, 1.0.2, 1.0.3 |
---|---|
Dependencies | base (>=4.6 && <5), semigroups (>=0.11 && <0.19) [details] |
License | MIT |
Copyright | (c) 2014, Nikita Volkov |
Author | Nikita Volkov <nikita.y.volkov@mail.ru> |
Maintainer | Nikita Volkov <nikita.y.volkov@mail.ru> |
Category | Exceptions, Error Handling, Failure |
Home page | https://github.com/nikita-volkov/partial-handler |
Bug tracker | https://github.com/nikita-volkov/partial-handler/issues |
Source repo | head: git clone git://github.com/nikita-volkov/partial-handler.git |
Uploaded | by NikitaVolkov at 2018-02-12T14:44:13Z |
Distributions | LTSHaskell:1.0.3, NixOS:1.0.3, Stackage:1.0.3 |
Reverse Dependencies | 2 direct, 51 indirect [details] |
Downloads | 6248 total (26 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs available [build log] Last success reported on 2018-02-12 [all 1 reports] |