performWith ::
     BackoffPolicy
  -> RateManager
  -> (b -> (Maybe Int, IO (Result a b)))
  -> IO (Result a b)
  -> IO a
performWith policy R{countT, throttledT} mkNextJob job = do
  jobId <- freshJobId countT
  performJob policy throttledT jobId mkNextJob Nothing job
performWith ::
     BackoffPolicy
  -> RateManager
  -> (b -> (Maybe Int, IO (Result a b)))
  -> IO (Result a b)
  -> IO a
performWith policy R{countT, throttledT} mkNextJob job = do
  jobId <- freshJobId countT
  performJob policy throttledT jobId mkNextJob Nothing job
performWith policy R{countT, throttledT} mkNextJob job = do
  jobId <- freshJobId countT
  performJob policy throttledT jobId mkNextJob Nothing job