úÎ!yq·      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None‹dynamic-graphs%Slow, only for debugging and testing.NoneHVX?dynamic-graphs4These methods can be used for testing and debugging. dynamic-graphs”The chosen represenation of the tree has a big impact on the performance of the algorithms. This typeclass allows us to swap them out more easily. dynamic-graphs/A management structure used to create new trees dynamic-graphsCreate a tree gen itselfdynamic-graphs$Create a tree with a single element.dynamic-graphsJoin two trees together.dynamic-graphsPrepend a singleton treedynamic-graphsAppend a singleton treedynamic-graphsiSplit a tree, turning the argument into a singleton and returning the left and right halves of the tree.dynamic-graphs*Check if two nodes belong to the same treedynamic-graphsFind the root of a treedynamic-graphs^Read the root of a tree. This is not allowed to modify the tree (e.g., no splaying allowed).dynamic-graphsRead the label from a treedynamic-graphsRead the aggregate of a treedynamic-graphsConvert a tree to a list     None "#=HVX`%dynamic-graphs>NOTE (jaspervdj): There are two ways of indicating the parent  left V right is not set (we want to avoid Maybe's since they cause a lot of indirections).&Imagine that we are considering tLeft. WWe can set tLeft of x to the MutVar that holds the tree itself (i.e. a self-loop).#We can set tLeft to some nil value.òThey seem to offer similar performance. We choose to use the latter since it is less likely to end up in infinite loops that way, and additionally, we can move easily move e.g. x's left child to y's right child, even it is an empty child.dynamic-graphslv must be a singleton treedynamic-graphsrv must be a singleton treedynamic-graphs1Appends two trees. Returns the root of the tree.$dynamic-graphsFor debugging/testing.%dynamic-graphsFor debugging/testing. !"#$%&' !"#$%&'None "#=HVX`1O€dynamic-graphs>NOTE (jaspervdj): There are two ways of indicating the parent  left V right is not set (we want to avoid Maybe's since they cause a lot of indirections).&Imagine that we are considering tLeft. WWe can set tLeft of x to the MutVar that holds the tree itself (i.e. a self-loop).#We can set tLeft to some nil value.òThey seem to offer similar performance. We choose to use the latter since it is less likely to end up in infinite loops that way, and additionally, we can more easily move e.g. x's left child to y's right child, even it is an empty child..dynamic-graphs1Appends two trees. Returns the root of the tree.3dynamic-graphsFor debugging/testing.4dynamic-graphsFor debugging/testing.+,-./012345678+,./0-12345678None "#>HV`7ÆEdynamic-graphsFor debugging/testing.dynamic-graphs2Replace X by Y in the tree. X must have a parent.‚dynamic-graphs-Recompute the aggregate and height of a node.ƒdynamic-graphsCRecompute aggregate and height all the way to the root of the tree.Gdynamic-graphsFor debugging/testing.dynamic-graphs X's parentdynamic-graphsXdynamic-graphsY<=>?@ABCDEFGHIJK<=A?F@>BCDEGHIJKNone"#&'X_WüQdynamic-graphsSimple graph type.Rdynamic-graphs?Graph type polymorphic in the tree used to represent sequences.Sdynamic-graphsGThe most general type for an Euler Tour Forest. Used by other modules.Tdynamic-graphsO(1)Create the empty tree.Udynamic-graphsSimple version of T.Vdynamic-graphs O(v*log(v))4Create a graph with the given vertices but no edges.Wdynamic-graphsSimple version of V.Xdynamic-graphsCreate a graph from a „1. Note that the values in nodes must be unique.Ydynamic-graphsSimple version of X.[dynamic-graphs O(log(v))šRemove an edge in between two vertices. If there is no edge in between these vertices, do nothing. Return whether or not an edge was actually removed.\dynamic-graphs Version of [ which ignores the result.…dynamic-graphsOreroot the represented tree by shifting the euler tour. Returns the new root.]dynamic-graphs O(log(v))'Check if this edge exists in the graph.^dynamic-graphs O(log(v)))Check if this vertex exists in the graph._dynamic-graphs O(log(v))/Check if a path exists in between two vertices.`dynamic-graphs O(log(v))¾Insert an edge in between two vertices. If the vertices are already connected, we don't do anything, since this is an acyclic graph. Returns whether or not an edge was actually inserted.adynamic-graphs Version of ` which ignores the result.bdynamic-graphs O(log(v))uInsert a new vertex. Do nothing if it is already there. Returns whether or not a vertex was inserted in the graph.cdynamic-graphs Version of b which ignores the result.ddynamic-graphs O(log(v) + n where n is the number of neighbours'Get all neighbours of the given vertex.edynamic-graphs O(n*log(v)) where n is the number of neighbours²Remove a vertex from the graph, if it exists. If it is connected to any other vertices, those edges are cut first. Returns whether or not a vertex was removed from the graph.fdynamic-graphs Version of e which ignores the result.idynamic-graphs#Obtain the current spanning forest.QRSTUVWXYZ[\]^_`abcdefghiSRQTUVWXY_]^d`a[\bcefZhigNone "#&'X_`q ldynamic-graphsO(1)Create an empty graph.mdynamic-graphsSimple version of l.ndynamic-graphs4Create a graph with the given vertices but no edges.odynamic-graphsSimple version of n.pdynamic-graphs2Create the complete graph with the given vertices.qdynamic-graphsSimple version of prdynamic-graphs O(log(v))¦Insert an edge in between two vertices. If the vertices already have an edge between them don't do anything. Returns whether or not an edge was actually inserted.sdynamic-graphs Version of r which ignores the result.tdynamic-graphs O(log(v))/Check if a path exists in between two vertices.udynamic-graphs'Check if this edge exists in the graph.vdynamic-graphs)Check if this vertex exists in the graph.wdynamic-graphs Ammortized  O(log² v)šRemove an edge in between two vertices. If there is no edge in between these vertices, do nothing. Return whether or not an edge was actually removed.xdynamic-graphs Version of w which ignores the result.ydynamic-graphsuInsert a new vertex. Do nothing if it is already there. Returns whether or not a vertex was inserted in the graph.zdynamic-graphs Version of y which ignores the result.{dynamic-graphs²Remove a vertex from the graph, if it exists. If it is connected to any other vertices, those edges are cut first. Returns whether or not a vertex was removed from the graph.|dynamic-graphs Version of { which ignores the result.}dynamic-graphs'Get all neighbours of the given vertex.~dynamic-graphs#Obtain the current spanning forest.jklmnopqrstuvwxyz{|}~kjlmnopqtuv}rswxyz{|~†        !"#$ !"#$  %!"$#&'()*+,-./01234567 89 :;<()+,-.=>674523 8 :9<??@ABCDEF,dynamic-graphs-0.1.0.3-GDALwZQslrO8iJtpvykyU%Data.Graph.Dynamic.Internal.HashTable Data.Graph.Dynamic.Internal.Tree!Data.Graph.Dynamic.Internal.Splay"Data.Graph.Dynamic.Internal.RandomData.Graph.Dynamic.Internal.AvlData.Graph.Dynamic.EulerTourData.Graph.Dynamic.Levels HashTablenewinsertdeletelookuptoListTestTreeprintassertInvariantsassertSingleton assertRootTreeTreeGen newTreeGen singletonappendconssnocsplit connectedrootreadRootlabel aggregateconcatfreeze$fTestTreeTree $fTreeTree$fEqTreejoin$fEqAggs $fShowAggsGraph'GraphForestemptyempty'edgeless edgeless'fromTree fromTree'findRootcutcut_edgevertexlinklink_insert_ neighboursdelete_ componentSizespanningForestcomplete complete'nilreplace updateAggsupdateAggsToRootcontainers-0.6.0.1 Data.Treereroot