È abbastanza facile rappresentare un albero o un elenco in haskell utilizzando tipi di dati algebrici. Ma come rappresenteresti tipograficamente un grafico? Sembra che tu abbia bisogno di suggerimenti. Immagino che potresti avere qualcosa del genere
type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours
E sarebbe fattibile. Tuttavia sembra un po 'disaccoppiato; I collegamenti tra i diversi nodi nella struttura non "sembrano" così solidi come i collegamenti tra gli elementi precedenti e successivi correnti in un elenco, o i genitori e i figli di un nodo in un albero. Ho la sensazione che fare manipolazioni algebriche sul grafico come l'ho definito sarebbe in qualche modo ostacolato dal livello di indiretto introdotto attraverso il sistema di tag.
È principalmente questa sensazione di dubbio e la percezione di ineleganza che mi fa porre questa domanda. Esiste un modo migliore / più matematicamente elegante per definire i grafici in Haskell? O mi sono imbattuto in qualcosa di intrinsecamente difficile / fondamentale? Le strutture dati ricorsive sono carine, ma questo sembra essere qualcos'altro. Una struttura dati autoreferenziale in un senso diverso dal modo in cui alberi ed elenchi sono autoreferenziali. È come se gli elenchi e gli alberi fossero autoreferenziali a livello di tipo, ma i grafici sono autoreferenziali a livello di valore.
Allora cosa sta succedendo veramente?
fgl
pacchetto si è sviluppato da questo.