Достаточно просто представить дерево или список в haskell, используя алгебраические типы данных. Но как бы вы представили график типографически? Похоже, вам нужны указатели. Я предполагаю, что у вас может быть что-то вроде
type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours
И это было бы возможным. Однако он кажется немного разобщенным; Связи между различными узлами в структуре на самом деле не «кажутся» такими прочными, как связи между текущими предыдущим и следующим элементами в списке или родителями и потомками узла в дереве. У меня есть подозрение, что выполнение алгебраических манипуляций с графом, как я определил, будет несколько затруднено из-за уровня косвенности, вводимого через систему тегов.
Именно это чувство сомнения и ощущение неэлегантности заставляет меня задавать этот вопрос. Есть ли лучший / более математически элегантный способ определения графиков в Haskell? Или я наткнулся на что-то сложное / фундаментальное? Рекурсивные структуры данных хороши, но, похоже, это нечто другое. Самореференциальная структура данных в ином смысле, чем деревья и списки. Это похоже на то, что списки и деревья самореферентны на уровне типа, а графы самореферентны на уровне значений.
Так что же на самом деле происходит?
fgl
Пакет разработан из -за этого.