mirror of
https://github.com/cachix/stamina.hs.git
synced 2024-09-11 18:37:48 +03:00
1.4 KiB
1.4 KiB
Stamina.hs
WIP: doesn't work yet, in design phase.
A retry Haskell library for humans:
- Exponential backoff with jitter between retries.
- Limit the number of retries and total time.
Stamina.HTTP
for retrying retriable HTTP Exceptions- Introspectable retry state for logging
Design goals
- Defaults that make sense most of the time.
- Simple interface.
- Documented.
API
defaultRetrySettings :: RetrySettings
-- Retry on all sync exceptions
retry :: MonadIO m => RetrySettings -> (RetryStatus -> m a) -> m a
-- Retry on specific exceptions
retryOnExceptions :: (Exception e, MonadIO m) => RetrySettings -> [Handler RetryAction] -> (RetryStatus -> m a) -> m a
data RetryAction = Skip | Retry | RetryAfter Int
Example
import qualified Stamina
main :: IO ()
main = do
Stamina.retry Stamina.defaultRetrySettings $ \retryStatus -> do
... monadic logic that raises exceptions
Development
-
Install devenv.sh.
-
devenv shell
-
stack build
Credits
- Heavily inspired by stamina for Python.
- retry as case study for what needs to be supported