Questa potrebbe essere una domanda stupida, ma visto che non ho nessuno con cui discutere per un caffè, penso che lo chiederei qui. Quindi, sto leggendo il libro "The Haskell School of Expression" per imparare un po 'di Haskell e hanno il seguente tipo:
data Picture = Region Color Region
| Picture 'Over' Picture
| EmptyPic
deriving Show
In seguito, quando devono convertire un'immagine in un elenco di regioni, lo fanno in modo ricorsivo in questo modo:
picToList EmptyPic = []
picToList (Region c r) = [(c, r)]
picToList (p1 'Over' p2) = picToList p1 ++ picToList p2
Questo è tutto buono e piuttosto facile, ma quello che mi ha fatto pensare è che dovevano farlo manualmente. Haskell è pieno di astrazioni, quindi mi chiedo, ha un'astrazione per iterare su tipi di dati ricorsivi? Dopotutto, il compilatore conosce la struttura del tipo di dati e internamente probabilmente rappresenta i dati sotto forma di un grafico di qualche tipo, quindi può attraversarlo per me in un modo generico? Non ho idea di come funzionerebbe nella pratica, ma Haskell è abbastanza diverso da tutti gli altri linguaggi di programmazione che conosco, quindi forse c'è un concetto che non riesco nemmeno a immaginare.