Указывает, что функция count
имеет три аргумента, а это не то, что вам нужно:
count Node label [childrenTree a] = ...
-- ^1 ^2 ^3
Далее,
count [] = ...
указывает, что существует один аргумент, которыйдолжен быть список (пустой список, если быть точным). Вы хотите, чтобы count
принимал деревья в качестве аргумента, а не списки.
Правильный способ написания кода:
count:: Tree a -> Integer
count (Node subtrees) = ... -- here, we have subtrees :: [Tree a]
В качестве альтернативы:
count:: Tree a -> Integer
count (Node []) = ...
count (Node (t:ts)) = ...
--here t is the first tree in the list, ts is the list of remaining ones
Вот полная рабочая программа:
data Tree a = Node [Tree a]
count:: Tree a -> Integer
count (Node []) = 1
count (Node (t:ts)) = count t + count (Node ts)
-- a little test
main :: IO ()
main = print (count (Node [Node [], Node [Node[], Node[]]]))
Выходное значение равно 5
, то есть числу Node
с на входе.