Cukup mudah untuk merepresentasikan pohon atau daftar di haskell menggunakan tipe data aljabar. Tapi bagaimana Anda akan merepresentasikan grafik secara tipografis? Sepertinya Anda perlu memiliki petunjuk. Saya menduga Anda bisa mendapatkan sesuatu seperti
type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours
Dan itu bisa diterapkan. Namun itu terasa agak terpisah; Hubungan antara node yang berbeda dalam struktur tidak benar-benar "terasa" sekokoh link antara elemen sebelumnya dan selanjutnya dalam daftar, atau orang tua dan turunan dari node dalam pohon. Saya memiliki firasat bahwa melakukan manipulasi aljabar pada grafik seperti yang saya definisikan akan terhalang oleh tingkat tipuan yang diperkenalkan melalui sistem tag.
Perasaan ragu-ragu dan persepsi tentang ketidaksengajaan inilah yang menyebabkan saya mengajukan pertanyaan ini. Apakah ada cara yang lebih baik / lebih elegan secara matematis untuk mendefinisikan grafik di Haskell? Atau apakah saya tersandung pada sesuatu yang secara inheren keras / mendasar? Struktur data rekursif memang bagus, tetapi tampaknya ini adalah sesuatu yang lain. Struktur data referensi mandiri dalam arti yang berbeda tentang bagaimana pohon dan daftar merujuk pada diri sendiri. Ini seperti daftar dan pohon yang merujuk pada diri sendiri pada tingkat jenis, tetapi grafik merujuk pada diri sendiri pada tingkat nilai.
Jadi apa yang sebenarnya terjadi?
fgl
paket yang dikembangkan dari ini.