# async-refresh About ===== This is Haskell library implementing the logic for refreshing of expiring data according to user-provided actions. Usage ===== - Create a new configuration using `newAsyncRefreshConf`, providing the action to be used for data refreshing. - Adjust the configuration using the `asyncRefreshConfSet*` functions, in particular using `asyncRefreshConfSetCallback`. - Use `newAsyncRefresh` to initiate a new thread managing the asynchronous refreshing. Example ======= The following IO action produces a `TVar` which is updated every ten seconds to contain the current time (wrapped in an `Either SomeException`, because refreshing may fail). ``` periodicTimeUpdater :: IO (TVar (Either SomeException UTCTime)) periodicTimeUpdater = runStderrLoggingT $ do timeStore <- liftIO $ newTVarIO (Left (toException NotFound)) let conf = newAsyncRefreshConf (RefreshResult <$> liftIO getCurrentTime <*> pure Nothing) & asyncRefreshConfSetLabel "CurrentTime updated every 10 seconds" & asyncRefreshConfSetDefaultInterval (10 * 10^3) & asyncRefreshConfSetCallback (liftIO . atomically . writeTVar timeStore . fmap refreshResult) _ <- newAsyncRefresh conf return timeStore ```