Java-friendly version of ThreadSafeRateLimiter.
Used by JRateLimiter in lieu of call-by-name from java.
Used to rate-limit calls to a work function, e.
For objects that need their lifecycle to be managed and can't be just throw-away.
Fairly heavy-handed thread safe version of the above.
To avoid tight loops around errors.
Helper to retry potentially failing functions
Church boolean types for use in type-level programming