úÎ8?4ê:      !"#$%&'()*+,-./0123456789 Safe-Inferred$This is just a simple inductive listSimple lookup function.(We overwrite with rightward prescedence.)Delete a node from a collection of nodes.>Uniquely append, or overwrite a node to a collection of nodes.Smart constructor for GNil. :;<=;:<=None!"&'(2468=HJKM edges is a list of types with kind EdgeKind, while  nearLoops< is a map of the nodes transitively reachable by each node. 0Update the exclusion map with the new edge: the from key gets to& added, likewise with keys that have from= in it's value list. We need to track if the key exists yet. PAdd an explicit element to the head of a list, if the test is inside that list.ÌSimply reject anything that's been reached in the other direction. We expect an explicit type signature when uniqueness is needed, otherwise we will wait until invocation to see if the edges are unique./Trivial inequality for non-reflexivity of edges A simple Data.List.lookup function for type maps. not . elem/ for lists of types, resulting in a constraint.ˆSome people just want to watch the world burn. Ideally, this shouldn't exist; poor error messages, and is very square peg - round hole.-We need this for type-level computation list.&We use promoted symbol values for the from and toU type parameters. This is the user-level data type when declaring the list of edges.Utility for constructing an  EdgeSchema) incrementally without a type signature.     None!"'(-234=JKMTrivial rose tree for creating spanning trees. We make control structure instances "parallel" (instead of cartesian) by default for simplicity.%Expects edges to already be type-safe*Auxilliary function normally defined in a where clause for manual folding.Add to as a child to every from node in the accumulator.We need to track if from3 has is a root node or not. TODO: Some code repeat.Adds c$ as a child of any tree with a root t. Assumes unique roots. Adds an empty c# tree to the list of trees uniquely([Gives us a generic way to get our spanning trees of the graph, as a value. Credit goes to  rhttp://stackoverflow.com/questions/28030118/reflecting-heterogeneous-promoted-types-back-to-values-compositionally András Kovács.*Get the spanning trees of an  EdgeSchema?. Operate on the assumtion that the data returned is actually  [Tree String].+Get a single tree.,Degenerate (but type-safe!) head.-%For now, we only suport unique edges..RGet a first-class list of edges from spanning trees. Only works on uniqely edged  EdgeSchema's./Get the  First-Class edges of a uniquely-edged  EdgeSchema. !"#$%&'()*+,-./01234 !"#$%&'()*+,-.//!&$%"#4'4'4'4'4'4'4'4'4'4'3210( )*+,-./ !"#$%&()*+,-./01234'None!"(3:M5KA (potentially sparse) directed acyclic graph, composed of edges and nodes.9Data.Map.lookup duplicate.>Spanning trees of a graph.?ISpanning tree of a particular node. "A possible tree of possible results"56789>?@3  !"#$%&'()*+,-./567895678956789>?@A      !"#$%&'()*+,-./0123456789::;<=>?@ABCDEdag-0.1Data.Graph.DAG.Edge.UtilsData.Graph.DAG.NodeData.Graph.DAG.EdgeData.Graph.DAGRTree:@->Equals_1627432871 NodeSchemanlookupncombinenremovenaddnempty EdgeSchemaEConsENil DisallowIn PrependIfElem Acceptable=/=Lookup Excluding DeducibleEdgeKindEdgeType EdgeValueEdgeunique notUnique"$fAcceptableEdgeTypeexcludeMapTrue#$fAcceptableEdgeTypeexcludeMapFalse SpanningTreesSpanningTrees'AddEdgeAddEdge' AddChildToAppendIfNotElemTreesSRTree:@->$:@->$###:@->$$ :@->$$###:@->$$$:%@->reflectgetSpanningTreesespanningtreesetreeehead eTreeToEdgeseForestToEdgesfcEdges$fFoldableRTree $fMonoidRTree $fMonadRTree$fApplicativeRTreeTFCo:R:DemoteRepRTreeKProxyDAG getEdgeSchema getNodeSchemaglookupGConsGNil$fMonoidNodeSchema$fFunctorNodeSchemagspanningtreesgtree $fFunctorDAG