Я думаю, что это просто опечатка, когда вы пишете
size (Node x y z) = size x + size y + size z
что должно быть просто
size (Node x y z) = size x + size z + 1
, поскольку у не поддерево, а просто сохраненный элемент.
Или, чтобы сделать его еще яснее
size (Node left elem right) = size left + size right + 1
Технически, ваша ошибка возникает из-за того, что термин size y
имеет смысл, только если y
снова дерево, размер которого можно вычислить. Поэтому тип этого пункта будет выведен на Tree (Tree a) -> Int
, что по сравнению с фактическим Tree a -> Int
, не является общим
достаточно .