я бы с удовольствием, чтобы получить некоторые полезные замечания относительно примера приведены на:
http://caml.inria.fr/pub/docs/manual-ocaml-400/manual021.html#toc79OCaml аннотации Явного полиморфного типа
7.12 Explicit polymorphic type annotations
type 'a t = Leaf of 'a | Node of ('a * 'a) t
let rec depth : 'a. 'a t -> 'b = function
|Leaf _ -> 1
| Node x -> 1 + depth x
Я понимаю, этот пример функции, но когда я пытаюсь определить «карту -как»функция типа
'a. 'a t -> ('a -> 'b) -> 'b t
например:
let rec tmap: 'a. 'a t ->(f:'a->'b) -> 'b t = function
|Leaf x -> Leaf(f x)
|Node x -> let res = tmap x in Node(res);;
Я получаю следующее сообщение об ошибке:
Characters 67-77:
|Leaf x -> Leaf(f x)
^^^^^^^^^^
Error: This expression has type 'c t but an expression was expected of type
(f:'a -> 'b) -> 'b t
, которые я не совсем понимаю. Буду признателен за любые полезные комментарии.
Вы хотели написать let rec tmap: 'a. 'a t -> (' a -> 'b) ->' b t = fun f -> function ...? – camlspotter