Я сделал функция это имя maptree
. А ниже мой код:Почему тип, предполагаемый для моей функции ML, отличается от ожидаемого?
datatype 'a tree = LEAF of 'a | NODE of 'a tree * 'a tree;
fun maptree(f, NODE(X, Y)) = NODE(maptree(f, X), maptree(f, Y))
| maptree(f, LEAF(X)) = LEAF(f X);
Я ожидал maptree иметь тип
('a -> 'a) -> 'a tree -> 'a tree
, но тип, выведенный с помощью компилятора
('a -> 'b) * 'a tree -> 'b tree
Почему это происходит?