packages feed

hegg-0.4.0.0: CHANGELOG.md

# Revision history for hegg

## Unreleased

## 0.4.0.0 -- 2023-06-24

* Make `Language` a constraint type synonym instead of a standalone empty class
* Use `QuantifiedConstraints` instead of `Eq1,Ord1,Show1` in the implementation,
    which results in the user only having to provide an `Eq a => Eq (language
    a)` instance rather than a `Eq1 language` one (which is much simpler and can
    usually be done automatically!)
* Make `_classes` a `Traversal` lens over all e-classes rather than a `Lens` into `IntMap EClass`

## 0.3.0.0 -- 2022-12-09

* A better `Analysis` tutorial in the README.

* Complete `Analysis` redesign.
    * The `Analysis` class now has two type parameters: a `domain` and a
        `language`, and no longer has an associated type family
    * The analysis no longer has any knowledge of the e-graph:
        * `makeA` now has type `l domain -> domain`, that is, to make a domain
            of a new node we only have to take into consideration the data of
            the sub-nodes of the new node.
        * `joinA` is unchanged.
        * `modifyA` now has type `EClass domain lang -> (EClass domain lang,
            [Fix lang])`. It takes an e-class and optionally modifies it,
            possibly by adding nodes to it. The return value is the modified
            e-class, and a list of expressions from the language to add to the
            e-class.
    * We can now compose analysis and create language-polymorphic analysis. Such
        two examples are the analysis with domain `()` which regardless of the
        language simply ignores the domain: `instance Analysis () l`; and the
        second example is the product of analysis, which composes two separate
        analysis into one: `instance (Analysis a l, Analysis b l) => Analysis
        (a,b) l`.
    * An `EGraph` now also has two type parameters instead of one (the latter is
      the language is the former the domain of the analysis).

* Allow customization of Schedulers through parameters (by accepting a scheduler
    rather than a proxy for it)

## 0.2.0.0 -- 2022-09-19

* Expose `runEqualitySaturation` to run equality saturation on existing e-graphs
    whole instead of focusing on individual expressions
* (Very) significant performance improvements!
* Make `CostFunction` polymorphic over the `Cost` type, requiring that type
    to instance `Ord`
* Make e-graph abstract. The internal structure can still be modified through
    the available lenses in `Data.Equality.Graph.Lens`
* Fix a bug related to `NodeMap`'s size.

## 0.1.0.0 -- 2022-08-25

* First version. Released on an unsuspecting world.