Changelog for hegg-0.4.0.0
Revision history for hegg
Unreleased
0.4.0.0 -- 2023-06-24
- Make
Languagea constraint type synonym instead of a standalone empty class - Use
QuantifiedConstraintsinstead ofEq1,Ord1,Show1in the implementation, which results in the user only having to provide anEq a => Eq (language a)instance rather than aEq1 languageone (which is much simpler and can usually be done automatically!) - Make
_classesaTraversallens over all e-classes rather than aLensintoIntMap EClass
0.3.0.0 -- 2022-12-09
-
A better
Analysistutorial in the README. -
Complete
Analysisredesign.- The
Analysisclass now has two type parameters: adomainand alanguage, and no longer has an associated type family - The analysis no longer has any knowledge of the e-graph:
makeAnow has typel 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.joinAis unchanged.modifyAnow has typeEClass 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
EGraphnow also has two type parameters instead of one (the latter is the language is the former the domain of the analysis).
- The
-
Allow customization of Schedulers through parameters (by accepting a scheduler rather than a proxy for it)
0.2.0.0 -- 2022-09-19
- Expose
runEqualitySaturationto run equality saturation on existing e-graphs whole instead of focusing on individual expressions - (Very) significant performance improvements!
- Make
CostFunctionpolymorphic over theCosttype, requiring that type to instanceOrd - 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.