OCaml - rekonstrukcja typów (typ funkcji)

0

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.

1

Zauważ że z pattern matchingu wynika że accu oraz wynik funkcji f (a także wynik funkcji fold_right) muszą być tym samym typem, bo w zależności od dopasowania zwracasz jedną albo drugą wartość

1 użytkowników online, w tym zalogowanych: 0, gości: 1