# Changes in version 2.0.0.0

  * Completely rewritten internals to support arbitrarily overlapping
    I/O and computation.  Haxl no longer runs batches of I/O in
    "rounds", waiting for all the I/O to complete before resuming the
    computation. In Haxl 2, we can spawn I/O that returns results in
    the background and computation fragments are resumed when the
    values they depend on are available.  See
    `tests/FullyAsyncTest.hs` for an example.

  * A new `PerformFetch` constructor supports the new concurrency
    features: `BackgroundFetch`. The data source is expected to call
    `putResult` in the background on each `BlockedFetch` when its
    result is ready.

  * There is a generic `DataSource` implementation in
    `Haxl.DataSource.ConcurrentIO` for performing each I/O operation
    in a separate thread.

  * Lots of cleanup and refactoring of the APIs.

  * License changed from BSD+PATENTS to plain BSD3.

# Changes in version 0.5.1.0

  * 'pAnd' and 'pOr' were added
  * 'asyncFetchAcquireRelease' was added
  * 'cacheResultWithShow' was exposed
  * GHC 8.2.1 compatibility

# Changes in version 0.5.0.0
  * Rename 'Show1' to 'ShowP' ([#62](https://github.com/facebook/Haxl/issues/62))

# Changes in version 0.3.0.0

  * Some performance improvements, including avoiding quadratic
    slowdown with left-associated binds.

  * Documentation cleanup; Haxl.Core is the single entry point for the
    core and engine docs.

  * (>>) is now defined to be (*>), and therefore no longer forces
    sequencing.  This can have surprising consequences if you are
    using Haxl with side-effecting data sources, so watch out!

  * New function withEnv, for running a sub-computation in a local Env

  * Add a higher-level memoization API, see 'memo'

  * Show is no longer required for keys in cachedComputation

  * Exceptions now have `Eq` instances