HaskellでGraphvizのデータをパースする
Graphvizとはオープンソースのグラフ描画ソフトでDOT言語というグラフを表現するための言語を読み込んでグラフを描画してpngやepsなどの形式で出力することができます。このあたりの詳細はWikipediaを参照したりするとわかると思います。
Haskellでグラフの処理をするときの入出力形式としてDOT言語が使えると便利です。Happyとかを使って自分でパーサを書いても問題ないですが、ライブラリにパーサがあるならそれを使ったほうが楽ですね。Haskell用のGraphvizのライブラリgraphvizがあります。グラフの描画などGrapvhvizを用いた諸々の処理を行えるらしいですが、今回はこれをパーサとして使います。使うのはparseDotGraphで、Textを入力として受け取ってParseDotReprを出力します。ParseDotReprはグラフの表現の型クラスで、例えばDotGraphでラベルとしてStringを用いる場合はparseDotGraphの出力の型が"DotGraph String"に推論されるように型を記述するとよいです。=graphNodes (parseDotGraph $ pack “digraph {a -> b}” ::DotGraph String)=とか書くとこのグラフのノードのリストが得られます。