Il est assez facile de représenter un arbre ou une liste dans haskell en utilisant des types de données algébriques. Mais comment procéder pour représenter typographiquement un graphique? Il semble que vous ayez besoin de pointeurs. Je suppose que tu pourrais avoir quelque chose comme
type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours
Et ce serait réalisable. Cependant, cela semble un peu découplé; Les liens entre les différents nœuds de la structure ne "se sentent" pas vraiment aussi solides que les liens entre les éléments précédents et suivants actuels d'une liste, ou les parents et enfants d'un nœud dans un arbre. J'ai l'impression que faire des manipulations algébriques sur le graphique tel que je l'ai défini serait quelque peu gêné par le niveau d'indirection introduit par le système de balises.
C'est principalement ce sentiment de doute et cette perception d'inélégance qui m'amènent à poser cette question. Existe-t-il un moyen meilleur / plus élégant mathématiquement de définir des graphes dans Haskell? Ou suis-je tombé sur quelque chose de fondamentalement dur / fondamental? Les structures de données récursives sont douces, mais cela semble être autre chose. Une structure de données auto-référentielle dans un sens différent de la façon dont les arbres et les listes sont auto-référentiels. C'est comme si les listes et les arbres sont auto-référentiels au niveau du type, mais les graphiques sont auto-référentiels au niveau des valeurs.
Alors qu'est-ce qui se passe vraiment?
fgl
package s'est développé à partir de cela.