h&EM=S      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  Safe-Inferred!)*/589:;=?}'overeasyThe result of trying to merge multiple sets of keys, if you care.overeasy9The result of trying to merge multiple keys, if you care.overeasy4The result of trying to merge two keys, if you care. overeasy>Result of adding something to the equiv, if you're interested. overeasyA "Union-Find" implementation using explicit equivalence classes. Sure, the asympotics aren't as good, but we eventually have to construct these classes, so we might as well just do it as we go!overeasyMap of root to equivalent leaves Invariant: Map keys are only roots Invariant: Sets only contain leaf keys (and not the root itself)overeasyMap of leaf to root Invariant: Map keys are only leaves, values are only rootsovereasyNumber of roots in the equiv.overeasyNumber of leaves in the equiv.overeasy"Total number of keys in the equiv.overeasyCanonicalize the given expression functor by replacing leaves with roots. If any elements are missing, the first is returned.overeasyCanonicalize the given expression functor by replacing leaves with roots. If any elements are missing, they are simply skipped.overeasyCreates an empty equivovereasyCreates a singleton equivovereasy-Add the given key to the equiv (raw version).overeasy-Add the given key to the equiv (raw version).overeasyAll keys equivalent to the given key in the equiv. Always returns a set with the given key, even if it's not present.overeasy:Set of all keys equivalent to the given keys in the equiv.overeasy9Find the root equivalent to the given key (if it exists).overeasy live root node`overeasy3Removes the given keys from the assoc (raw version)aovereasyRemoves the given keys from the assoc (state version). Values will only be removed from the assoc if the key is a singleton root. If a key is not found, it is simply ignored.bovereasy,Join two assocs (uses the first as the base)covereasyReturns the footprint of the given value - all keys that map to it (root and leaf) DEFGHILJKMNOPQRSTUVWXYZ[\]^_`abc IJKLMNODEFGHPQRSTUVWXYZ[\]^_`abc Safe-Inferred!)*/589:;=?XjovereasyA source of unique idskovereasy$How many ids have ever been created?lovereasyCreates a new j from a starting idmovereasy.Generates the next id from the source (purely)novereasy2Generates the next id from the source (statefully)oovereasy Skips past the given id (purely)povereasy$Skips past the given id (statefully)qovereasyPeek at the next idjklmnopqjklmnopq Safe-Inferred )*/589:;?vovereasy+A stream of results. Just a wrapper around  to keep things tidy.wovereasyChoose one of many alteratives and process it with the given function.xovereasyChoose one of many alteratives.yovereasy%Produces all results from the stream.vwxywxvy Safe-Inferred!)*/589:;=?!?overeasyA nicely-named  for tracking state changesovereasy#Constraint for recursive structuresovereasyOften f is primary, not t#. Relate them with this constraint.overeasyTraverses a recursive structureovereasy5Embeds a function that may fail in a stateful contextovereasy5Embeds a function that may fail in a stateful contextovereasyEmbeds a function that may fail in a stateful context with change trackingovereasy specialized and flipped.   Safe-Inferred")*/589:;=?0h!overeasyAn E-Graph implementationovereasyId source for classesovereasyId source for nodesovereasyClass equivalencesovereasy must be a join semilattice. This function must be monotonic.overeasyAn opaque node id Constructor exported for coercibility. Num instance for literals only.overeasyAn opaque class id. Constructor exported for coercibility. Num instance for literals only.overeasyA disabled analysisovereasy$Number of equivalent classes in the  (see ufSize)overeasyNumber of nodes in the overeasyLookup info for the given EClassovereasyFind the class of the given node, if it exists. Note that you may have to canonicalize first to find it!overeasy.Find the class of the given term, if it existsovereasyCreates a new overeasyYields all root classesovereasyFind the canonical form of a node. If any classes are missing, the first missing is returned.overeasyFind the canonical form of a node. If any classes are missing, simply skip them.overeasyAdds a term (recursively) to the graph. If already in the graph, returns + and existing class id. Otherwise returns  and a new class id.overeasyMerges two classes: Returns  if the classes are not found or if they're already equal. Otherwise returns the class remapping. Note that it's MUCH more efficient to accumulate a  and use .overeasy&Merges many sets of classes. Returns  if the classes are not found or if they're already equal. Otherwise returns the class remapping (equiv map of root to set of leaf classes). It is important to note that the leaf classes in the returned mapping have been REMOVED from the egraph, so they cannot be used to lookup classes in the future. Therefore, if you have any class ids stored externally, you'll want to (partially) canonicalize with the returned mapping. Also note that the analysis of a given class is going to be an UNDER-APPROXIMATION of the true analysis value, because per-node analyses are not recomputed.overeasyReanalyze a subset of classes - touched roots from merging is sufficient to ensure complete reanalysis. (Note this is implemented in a simplistic way, just taking the fixed point of rounds of analysis. The number of rounds can be no more than the size of the given set.) It may be necessary to call this because merging may leave class analyses in an under-approximating state. This method gives you the true analysis by fixed point.overeasy#Reanalyze all classes in the graph.)) Safe-Inferred!)*/589:;?:tovereasy9The set of constraints necessary to search for solutions.overeasyA stream of solutions. Can be demanded all at once or interleaved.overeasy;The set of constraints necessary to build a solution graph.overeasyA solution graph - must be created from an e-graph each merge/rebuild.overeasyMap of var -> classes. Contains all vars. If the inner map is empty, that means the pattern was not matched. The inner set will not be empty.overeasy"Map of node structures to classes.overeasy:The set of constraints necessary to build a pattern graph.overeasyA pattern graph - can be created once for each pattern and reused for many iterations of search. g is the pattern group functor. f is the language functor.overeasy7An opaque var id Constructor exported for coercibilityovereasy!A apri of match and substitution.overeasy!Tie the knot - the inner part of .overeasyThe base functor of overeasy*Tie the knot - the inner layer of a match.overeasy     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        %overeasy-0.2.0-7Shit7pE5Ru2Ny0HoLxUG4Overeasy.EquivFindOvereasy.AssocOvereasy.SourceOvereasy.Streams Overeasy.UtilOvereasy.EGraphOvereasy.MatchingOvereasy.ExamplePaths_overeasyEquivMergeSetsResEquivMergeSetsResEmptySetEquivMergeSetsResMissingEquivMergeSetsResUnchangedEquivMergeSetsResChanged EquivMergeResEquivMergeResMissingEquivMergeResUnchangedEquivMergeResChanged EquivAddResEquivAddResAlreadyRootEquivAddResAlreadyLeafOfEquivAddResNewRoot EquivFindefFwdefBwd efRootsSize efLeavesSize efTotalSizeefCanonicalizeefCanonicalizePartialefNew efSingletonefAddIncefAddefEquivs efClosure efFindRoot efFindLeavesefSubset efLookupRootefLookupLeaves efFindAllefMemberefRootsefLeaves efMembers efUnsafeMerge efMergeIncefMergeefMergeSetsInc efMergeSets efCanCompact efCompactInc efCompactefRemoveAllInc efRemoveAllefUnsafeAddLeafInc$fEqEquivMergeSetsRes$fShowEquivMergeSetsRes$fGenericEquivMergeSetsRes$fNFDataEquivMergeSetsRes$fEqEquivMergeManyRes$fShowEquivMergeManyRes$fGenericEquivMergeManyRes$fNFDataEquivMergeManyRes$fEqEquivMergeRes$fShowEquivMergeRes$fGenericEquivMergeRes$fNFDataEquivMergeRes$fEqEquivAddRes$fShowEquivAddRes$fGenericEquivAddRes$fNFDataEquivAddRes $fEqEquivFind$fShowEquivFind$fGenericEquivFind$fNFDataEquivFindAssocInsertResAssocInsertResUnchangedAssocInsertResCreatedAssocInsertResUpdatedAssocInsertResMergedAssocassocFwdassocBwd assocEquiv assocSizeassocNewassocSingletonassocInsertInc assocInsert assocFromList assocToList assocMemberassocLookupByKeyassocPartialLookupByKeyassocLookupByValueassocPartialLookupByValueassocLookupRoot assocRoots assocLeaves assocMembersassocCanCompactassocCompactInc assocCompactassocRemoveAllIncassocRemoveAll assocUnionassocFootprint$fEqAssocInsertRes$fShowAssocInsertRes $fEqAssoc $fShowAssoc$fGenericAssoc $fNFDataAssocSource sourceSize sourceNew sourceAddInc sourceAdd sourceSkipInc sourceSkip sourcePeek $fEqSource $fShowSource$fGenericSource$fNFDataSourceStream chooseWithchoose streamAll$fFunctorStream$fApplicativeStream $fMonadStream$fMonadReaderrStream$fMonadStatesStream$fMonadLogicStream$fAlternativeStream$fMonadPlusStream$fSemigroupStream$fMonoidStream $fFunctorM$fApplicativeM$fMonadM$fMonadReaderrM$fMonadStatesMChanged ChangedNo ChangedYesRecursiveWholeWhole foldWholeM stateFail stateOptionstateFailChanged stateFold$fMonoidChanged$fSemigroupChanged $fEqChanged $fOrdChanged $fShowChanged$fGenericChanged$fHashableChanged$fNFDataChangedEGraph egClassSource egNodeSource egEquivFind egClassMap egNodeAssoc egHashCons MergeResultMergeResultUnchangedMergeResultMissingMergeResultChangedClassReplacementsWorkListWorkItem EClassInfoeciDataeciNodes eciParents EAnalysisENodeId unENodeIdEClassId unEClassId noAnalysis egClassSize egNodeSize egClassInfo egFindNode egFindTermegNew egClassesegCanonicalizeegCanonicalizePartial egAddTermegMerge egMergeManyegReanalyzeSubset egReanalyze$fMonoidAddNodeRes$fSemigroupAddNodeRes$fEqAddNodeRes$fShowAddNodeRes$fGenericAddNodeRes$fNFDataAddNodeRes$fGenericEGraph$fEqMergeResult$fShowMergeResult$fFunctorMergeResult$fFoldableMergeResult$fTraversableMergeResult$fGenericEClassInfo$fEqENodeTriple$fShowENodeTriple$fGenericENodeTriple$fNFDataENodeTriple $fShowENodeId $fEqENodeId $fOrdENodeId $fEnumENodeId$fHashableENodeId$fNFDataENodeId $fNumENodeId$fShowEClassId $fEqEClassId $fOrdEClassId$fEnumEClassId$fHashableEClassId$fNFDataEClassId $fNumEClassId$fNFDataEGraph $fShowEGraph $fEqEGraph$fNFDataEClassInfo$fShowEClassInfo$fEqEClassInfoSolveC SolStream SolGraphCSolGraphsgByVarsgNodes PatGraphCPatGraphpgRootspgNodespgVarsVarIdunVarId MatchSubstmsMatchmsSubst MatchPatF MatchPatPureFMatchPatEmbedFMatchF matchClassF matchPatFMatchPat MatchPatPure MatchPatEmbedMatch matchAnnomatchPatSubstPatGroupPatpatVars substVars matchVars matchClassespatGraphsinglePatGraphsolGraphsolvematch$fCorecursiveMatch$fRecursiveMatch $fEqSolState$fShowSolState $fEqRecord $fShowRecord $fShowVarId $fEqVarId $fOrdVarId $fEnumVarId$fHashableVarId $fNFDataVarId$fFunctorMatchF$fFoldableMatchF$fTraversableMatchF$fFunctorMatchPatF$fFoldableMatchPatF$fTraversableMatchPatF$fFunctorMatchPat$fFoldableMatchPat$fTraversableMatchPat$fFunctorMatch$fFoldableMatch$fTraversableMatch$fShowSolGraph $fEqSolGraph$fShowPatGraph $fEqPatGraph$fShowMatchSubst$fEqMatchSubst$fShowMatchPat $fEqMatchPat $fShowMatch $fEqMatchArith ArithPlus ArithTimes ArithShiftL ArithShiftR ArithConst $fEqArith $fShowArith$fGenericArith$fHashableArith $fNFDataArithArithF ArithPlusF ArithTimesF ArithShiftLF ArithShiftRF ArithConstF exampleGraph examplePat exampleMain$fCorecursiveArith$fRecursiveArith$fFunctorArithF$fFoldableArithF$fTraversableArithF$fNFDataArithF$fHashableArithF$fGenericArithF $fShowArithF $fEqArithFEquivMergeManyRes$logict-0.8.0.0-2F7o9vLwpfJsoGlZ1kTQ3Control.Monad.LogicLogicTghc-prim GHC.TypesBoolbase Control.MonadfoldM GHC.MaybeNothingData.Functor.IdentityIdentityPatFversiongetDataFileName getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDir