hegg v0.3
-
A better
Analysistutorial in the README. -
Complete
Analysisredesign.- The
Analysisclass now has two type parameters: adomainand a
language, 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)