Досить просто представити дерево або список у haskell, використовуючи алгебраїчні типи даних. Але як би ти почав типографічно представляти графік? Здається, що вам потрібно мати покажчики. Я здогадуюсь, ти можеш мати щось подібне
type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours
І це було б працездатно. Однак він відчуває себе трохи розв'язаним; Зв'язки між різними вузлами в структурі насправді не "відчувають себе" настільки міцними, як зв'язки між поточним попереднім та наступним елементами у списку, або батьками та дітьми вузла на дереві. У мене є думка, що виконання алгебраїчних маніпуляцій на графіку, як я його визначив, було б дещо перешкоджене рівнем непрямості, що вводиться через систему тегів.
Саме це почуття сумніву і сприйняття неелегантності змушує мене задати це питання. Чи є кращий / більш математично елегантний спосіб визначення графіків у Haskell? Або я натрапив на щось суто важке / фундаментальне? Рекурсивні структури даних є приємними, але це здається чимось іншим. Структура даних самореференції, що відрізняється від того, наскільки дерева та списки є самореференційними. Це як списки та дерева є самореференційними на рівні типу, але графіки є самореференційними на рівні значення.
Так що насправді відбувається?
fgl
Пакет розроблений з -за цього.