代数的データ型を使用してhaskellでツリーまたはリストを表すのは簡単です。しかし、どのようにグラフを活版印刷で表現するのでしょうか。ポインタが必要なようです。私はあなたが次のようなものを持つことができると思います
type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours
そして、それは実行可能でしょう。ただし、少し切り離されているように感じます。構造内の異なるノード間のリンクは、リスト内の現在の前の要素と次の要素、またはツリー内のノードの親と子の間のリンクほど実際には「感じ」がありません。私が定義したように、グラフ上で代数的操作を行うことは、タグシステムを通じて導入される間接性のレベルによって多少妨げられるだろうという予感があります。
私がこの質問をするのは、主にこの疑念と優雅さの認識です。Haskellでグラフを定義するより良い/より数学的にエレガントな方法はありますか?それとも、本質的にハード/ファンダメンタルなものに遭遇しましたか?再帰的なデータ構造はすばらしいですが、これは別のことのようです。ツリーとリストが自己参照する方法とは異なる意味での自己参照データ構造。これは、リストとツリーがタイプレベルで自己参照であるように見えますが、グラフは値レベルで自己参照です。
では、実際に何が起こっているのでしょうか。
fgl
パッケージには、このうち開発しました。