packages feed

cached-io-1.4.0.0: CHANGELOG.md

# Revision history for cached-io

## 1.4.0.0

- **Breaking** All `cached...` functions now require `MonadMask` for the monad
  running the refresh action. This was required to support the following bug
  fix.
- Fix a subtle bug: if you used a monad with explicit early-exit semantics like
  `MaybeT m` or `ExceptT e m`, and your cached action uses this to exit early, the
  cache would get stuck in `Initializing` state and subsequent requests for the
  cached data would hang forever waiting for initialisation to complete.

## 1.3.2.0

- Add `Functor` instance for `Cached`.
- Add `cachedIOFromConfig` and `cachedSTMFromConfig` (and a supporting `Config`
  type), which let the freshness check inspect the cached value in addition to
  its timestamp.

## 1.3.1.0

- Add `cachedSTM` versions of all bindings.
- Correctly transition the internal state to `Initializing` when filling the cache for the first time.
- Remove unused `transformer` dependency

## 1.3.0.0

- **Breaking** Caching functions previously returned `m (t a)`, but it was easy to accidentally use `join` when `m` and `t` were the same monad (eg. `IO (IO a)`), and not get any caching at all. These functions now use a `Cached` newtype for `t a` to make it more difficult to misuse.

### Migrating from <=1.2.0.0 to 1.3.0.0

```haskell
-- Previous versions
f :: IO ()
f = do
  cachedAction <- cachedIO action :: IO (IO a)
  cachedResult <- cachedAction

-- New version
f :: IO ()
f = do
  cachedAction <- cachedIO action :: IO (Cached IO a)
  cachedResult <- runCached cachedAction
```

## 1.2.0.0

Thank you [glasserc](https://github.com/glasserc) for your work on previous versions, and a special thanks to
[Arguggi](https://github.com/Arguggi) for contributing many of the improvements incorporated into this
version.

- [Bellroy](https://github.com/bellroy) is the new maintainer of this package. See https://github.com/glasserc/haskell-cached-io/pull/1.
- New `cachedIO'` and `cachedIOWith'` support generating an action depending on the most recent cached value and its timestamp, if there was one.
- `cachedIO ttl f` can now be run in a different monad to `f`. Similarly for `cachedIO'`, `cachedIOWith`, `cachedIOWith'`.
- Fixes uncaught exceptions leaving the cache in a deadlocked state and other problems.

## 1.1.0.0 and prior

These versions were published by [glasserc](https://github.com/glasserc).