packages feed

ixset-typed-0.6: CHANGELOG.md

0.6 (2026-08-19)
================

* BREAKING CHANGE to the semantics of interval selection operators (`getRange`,
  `(@><)`, `(@>=<)`, `(@><=)`, `(@>=<=)`): if an index has multiple values, it
  will now be returned by interval selection only if a single value falls in the
  range (see [#3](https://github.com/well-typed/ixset-typed/issues/3)).
  Previously, these operators used two ordinal lookups and rebuilt the index in
  between, meaning that an element would be returned by `getRange` if one of its
  index values was greater than or equal to the lower bound and a different
  index value was below the upper bound.  If you still need the old behaviour,
  replace calls to these functions with the alternatives given in the Haddocks.

* Add various new API functions:

  - Lookup: `lookupIx`, `lookupIxMany`, `lookupOne`

  - Bulk modification: `insertSet`, `insertMany`, `deleteSet`, `deleteMany`, `deleteIxMany`

  - Set operations: `filter`, `difference`, `(\\\)`

  - Project out indices from values of an `Indexable` type: `project`

* Significant performance-related changes, including changes to
  strictness/laziness and removal of intermediate datastructures, which should
  generally improve performance, but may have performance downsides or lead to
  space leaks in some cases:

  - An `IxSet` is no longer always strict in the head of the `IxList`.  This
    means queries are more lazy, and avoid rebuilding the first index if it is
    not needed.  Updates continue to be strict, to prevent thunk leaks as the
    `IxSet` is updated.

  - `fromSet` and `fromList` now compute the indices lazily (but remain
    spine-strict in the elements).

  - The existing `union` and `intersection` set operations, and the new `filter`
    and `difference`, compute the indices lazily (waiting until the index is
    accessed, then it is computed in full).  Previously `union` and
    `intersection` would compute the indices partially (walking the index list
    strictly, but then using lazy `Map` operations).

* Add `forceIndices`, which can be used to ensure the indices are evaluated
  after using operations that are now lazy in the index construction.

* Generalise `@+` and `@*` so they work on any `Foldable` structure, not just lists.

* Various documentation and performance improvements.

* Rename `Data.IxSet.Typed.Ix` to `Data.IxSet.Typed.Internal.Ix`, change its API
  and add other `.Internal` modules.  These modules should not normally be
  needed and are subject to change.

* Remove various redundant constraints.

* Limit supported versions to GHC 9.2 and later.

* Drop dependency on `syb`.


0.5.1.1 (2026-07-13)
====================

* GHC 9.4 through to 9.14 compatibility.

0.5.1.0 (2022-05-10)
====================

* GHC 9.0 and 9.2 compatibility.

0.5 (2020-03-18)
================

* GHC 8.8 (and possibly 8.10) compatibility.

* safecopy-0.10 compatibility.

0.4.0.1 (2018-10-01)
====================

* containers-0.6 compatibility.

0.4 (2018-03-18)
================

* GHC 8.4 compatibility.

* Drop compatibility with GHC 7. GHC 8.4 introduces `Semigroup` as a superclass
  for monoid, and `Semigroup` is not in `base` prior to GHC 8. To avoid
  a conditional interface or a dependency on the `semigroups` package, we drop
  compatibility with GHC 7. There are not other changes in this version, so
  `ixset-typed-0.3.1.1` remains usable with GHC 7.

0.3.1.1 (2017-08-14)
====================

* GHC 8.2 compatibility.

0.3.1 (2016-06-21)
==================

* GHC 8.0 compatibility.

0.3 (2014-07-23)
================

* `IxSet` internals are now more strict

* The `empty` method of `Indexable` is now called `indices` and has a slightly
  different path; to migrate your code, if you were using Template Haskell,
  you probably do not have to change anything. Otherwise, wherever you have
  an instance of `Indexable` that looks like this

       instance Indexable MyIndexSet MyType where  -- OLD
         empty = mkEmpty ...

  change it to

       instance Indexable MyIndexSet MyType where  -- NEW
         indices = ixList ...


0.2 (2014-04-06)
================

* Add testsuite (which is a port of the ixset testsuite).

* Cleaning up and documentation.

* Add 'Foldable' and 'NFData' instances.


0.1.4 (2014-04-03)
==================

* Documentation.


0.1.3 (2014-04-02)
==================

* Export `IsIndexOf` class.


0.1.2 (2014-04-02)
==================

* Clean up export list.

* Documentation.


0.1.1 (2014-04-02)
==================

* Clean up export list.

* Documentation.


0.1.0.0 (2014-03-31)
====================

* Initial release.