Вы думаете, что написали fromroot
, чтобы принять Tree a
в качестве третьего аргумента, но вместо этого вы написали, что Tree [a]
.
Это потому, что вы используете x
в качестве списка, вместо добавления его к списку, возвращенному из рекурсивного вызова.
Чтобы добавить один элемент в список, вы используете :
. ++
предназначен для объединения двух списков вместе.
(я также думаю, что ваше условие if должно быть 0 /= (j `div` (2^(i-1)))
вместо j div (2^(i-1))
, потому что (1) для использования именованных функций в качестве оператора они должны быть заключены в обратные черты, а (2) if
принимает Bool
и не приводится, например, из Int
для вас. Но это не то, на что жаловалось сообщение об ошибке, которое вы опубликовали.)
Могут быть и другие ошибки; Я не проверял.