Changelog of @hackage/hegg 0.3.0.0

Revision history for hegg

Unreleased

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.