Я изучаю OCaml, и до сих пор мне трудно понять концепции типов.
Например, если у нас есть следующий код:
# let func x = x;;
val func : 'a -> 'a = <fun>
На официальном сайте мне сообщается, что 'a
перед стрелкой — это неизвестный тип ввода, а 'a
после стрелки — это вывод.
Однако, когда я пытаюсь использовать композицию функций:
# let composition f x = f(x);;
val composition : ('a -> 'b) -> 'a -> 'b = <fun>
Что означает ('a -> 'b)
? 'a
связано с f
и 'b
связано с x
?
Другая функциональная композиция, которая меня еще больше запутала:
# let composition2 f x = f(f(x));;
val composition2 : ('a -> 'a) -> 'a -> 'a = <fun>
Я действительно не понимаю, почему у нас нет 'b
в этом случае.
Заранее спасибо!