問題の一つは、循環があると構造が再帰的にならないこと

data List a = List a (List a) | Nil
とか
data Tree a = Tree a [Tree a]
と定義するのと同じような感じで
data Node a = Node a [Node a]
と定義してしまうと、Eqのインスタンスにすることさえできない (有限なグラフに対しても(==)が停止しない可能性がある)

循環構造を考えないとしても、グラフには、リストの頭や木の根みたいな「どこからも参照されていない唯一の基準点」がない
仮に木構造の参照の向きを全部逆にしたような構造があったとき、その根が変更されたら、それをどうやって全てのノードに伝えたらいいのだろうか
唯一のエントリーポイントが存在するなら、そこから変更点までの、影響を受ける全てのノードを(陰にせよ陽にせよ)記憶しておけばいいけど、グラフだとそうはいかなくなってしまう