Changelog for 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: adomain
and alanguage
, and no longer has an associated type family - The analysis no longer has any knowledge of the e-graph:
makeA
now 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.joinA
is unchanged.modifyA
now 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
EGraph
now 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
runEqualitySaturation
to run equality saturation on existing e-graphs whole instead of focusing on individual expressions - (Very) significant performance improvements!
- Make
CostFunction
polymorphic over theCost
type, 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.