Jest funkcja
let rec fold_right f l accu =
match l with
[] -> accu
| a::l -> f a (fold_right f l accu);;
Zadanie polega na tym, aby podać typ funkcji fold_right. No to ja zrobiłem to w ten sposób:
val l: 'a list
val a: 'a
val accu: 'b
val f: 'a -> 'b -> 'c
val fold_right: ('a->'b->'c) -> 'a list -> 'b -> 'b
Ale kompilator się ze mną nie zgadza. Poprawny wynik to:
val fold_right : ('a -> 'b -> 'b) -> 'a list -> 'b -> 'b = <fun>
Mój problem polega na tym, że nie wiem w jaki sposób jesteśmy w stanie stwierdzić, że funkcja zwraca typ 'b, a nie jakiś nieznany typ 'c.