Changelog for hegg-0.5.0.0
Revision history for hegg
Unreleased
0.5.0.0 -- 2023-10-31
-
Change
'modifyA'to instead operate over e-graphs, instead of being constrained to editing the e-class that prompted the modification. (Remember that the e-graph lenses in'Data.Equality.Graph.Lens'are the preferred way to edit the e-graph and the desired e-class (by id), and its data, etc...) -
Fix compilation of Data.Equality.Graph.Dot, the graphviz rendering backend (despite there being some usability bugs still) (by @BinderDavid)
-
Dropped support for GHC 9.0 because of the QuantifiedConstraints bug (by @phadej)
-
Add
AnalysisM, a class for e-graph analysis that are only well-defined within a certain monadic context. Accordingly, we also add versions of the current e-graph transformation functions (such asaddandmerge) for analysis defined monadically (such asaddMandmergeM). -
Add operation to create empty e-classes with explicit domain data (experimental, not sure whether this is something good to keep in the API)
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.