[Haskell-cafe] ANNOUNCE: graphviz-2999.5.0.0

Ivan Lazar Miljenovic ivan.miljenovic at gmail.com
Wed Sep 9 05:59:07 EDT 2009

I am pleased to announce version 2999.5.0.0 [1] of the graphviz [2]
package for Haskell.  This is what I like to think of as the "Hey, this
is almost getting to be a decent library!" version :p

[1] http://hackage.haskell.org/packages/archive/graphviz/2999.5.0.0/graphviz-2999.5.0.0.tar.gz
[2] http://hackage.haskell.org/package/graphviz

The graphviz package provides bindings to the GraphViz [3] suite of programs
by providing the ability to generate and parse GraphViz's Dot [4]
language as well as wrappers around the tools themselves.

[3] http://www.graphviz.org/
[4] http://www.graphviz.org/doc/info/lang.html

This is an almost complete re-write of the previously released version
(2999.1.0.2): I do not mean that this version was re-written from
scratch, but substantial portions of the library have been improved or
replaced.  As such, current users of this library will unfortunately
have to update their code that uses it.  The major changes (becuase
there's probably heaps of smaller changes I've forgotten about) are:

* Parsing and printing of Dot code was re-written to use the new
  ParseDot and PrintDot classes rather than the old Parseable class and
  the Show class.  What this means for the end-user is that quotation
  problems should finally all be resolved (I hope...).  In particular,
  proper quotation of String values is now done automagically: if it is
  found that the String to be printed requires quoting (because it does
  not match the format required for non-quoted String values), then
  quotes within the String are escaped and the entire String is quoted.
  As part of this, the Data.GraphViz.ParserCombinators module has been
  moved to Data.GraphViz.Types.Parsing.

* Re-write the various Dot* datatypes in Data.GraphViz.Types.
  Sub-graphs/clusters are now their own entity rather than being part
  of DotNode and the Node ID type is now a type parameter rather than
  being just Int.  Sub-graphs/clusters can now also be parsed.  DotGraph
  and DotSubGraph now both contain a "DotStatements" value, which in
  turn contains global attributes, subgraphs, nodes and edges.

* The various conversion functions in Data.GraphViz now come in two
  flavours: the unprimed versions take in a Bool indicating if the
  graph is directed or not; the primed versions attempt to
  automatically detect this.  Also add cluster support for the graph
  -> dot -> graph conversion-style functions, as requested by Nikolas

* Allow custom arrow types as supported by GraphViz; as requested by
  Han Joosten.

* Fixed a bug in HSV-style Color values where Int was used instead of
  Double; spotted by Michael deLorimier.

* Properly resolved the situation initially spotted by Neil Brown:
  Matthew Sackman was following Dot terminology for an edge `a -> b'
  when using "head" for `b' and "tail" for `a' (this is presumably
  because the head/tail of the arrow are at those nodes).  DotEdge now
  uses "from" and "to" avoid ambiguity; the various Attribute values
  still follow upstream usage.

This should hopefully be the last update that is such an intrusive
change.  The next release will most likely contain updates on how to
specify a particular output to use (including variants), with most of
the rest remain as-is.

Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com

More information about the Haskell-Cafe mailing list