
"Kevin Quick"
On Mon, 05 Jul 2010 19:26:34 -0700, Ivan Miljenovic
wrote: Graphviz (http://graphviz.org/) has the option to convert provided Dot code for visualising a graph into a canonical form. For example, take the sample Dot code: [snip] I've recently thought up a way that I can duplicate this functionality (in terms of what it does, not necessarily the actual output) in my graphviz library (http://hackage.haskell.org/package/graphviz), however I'm not sure how closely to follow what Graphviz does.
There doesn't seem to be a clear definition of "canon" output is, and the implication in the documentation is that this mode might better have been named "pprint" (thus my hesitance to refer to it as "canonical form"). Based on this, I'd suggest that you don't need strict adherence to graphviz.
Even better; after sending that email out yesterday I wrote a Dot-graph by hand and it had some very weird characteristics; try to guess what this looks like: ,---- | digraph { | a; | subgraph cluster { | a -> b; | } | } `---- Note that it isn't the location of the definition of `a' that's the problem; it's the definition of the location of the edge: edges should be defined in the innermost context where _both_ nodes are. As such, I probably won't be implementing the canonical form stuff any time soon in graphviz, and might need to examine Graphviz's source code to compare it and ensure that it's at least similar :s -- Ivan Lazar Miljenovic Ivan.Miljenovic@gmail.com IvanMiljenovic.wordpress.com