Se ho questa funzione di inserimento:Haskell: foldr vs foldr1
insert x [] = [x]
insert x (h:t)
| x <= h = x:(h:t)
| otherwise = h:(insert x t)
questo produce un elenco ordinato:
foldr insert [] [1,19,-2,7,43]
ma questo:
foldr1 insert [1,19,-2,7,43]
produce 'non può costruire il tipo infinito: a0 = [a0] '
Sono confuso sul motivo per cui la seconda chiamata non può funzionare.
Ho esaminato le definizioni per foldr e foldr1 e ho tracciato entrambe con semplici funzioni aritmetiche, ma non riesco ancora a trovare una spiegazione chiara del motivo per cui la seconda chiamata fallisce.