Я изучаю haskell, и я хочу напечатать все узлы в дереве (в зависимости от высоты на дереве, где height = 0 => leafs). И я думаю, что создаю хорошую функцию, но у меня проблема с функцией show.Haskell Tree - Показать экземпляр
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Show)
tree4 = Node 1 (Node 2 Empty (Node 0 Empty Empty)) (Node 4 Empty Empty)
tree5 = Empty
heightTree::Tree a -> Integer
heightTree Empty = 0
heightTree (Node x l r) = 1 + max (heightTree l) (heightTree r)
treeLev::Tree a -> Integer -> [a]
treeLev Empty a = []
treeLev (Node x l r) a = if a == heightTree l || a == heightTree r then [x] else treeLev l (a-1) ++ treeLev r (a-1)
и когда я использую
*Main> treeLev tree4
<interactive>:105:1:
No instance for (Show (Integer -> [Integer]))
arising from a use of `print'
Possible fix:
add an instance declaration for (Show (Integer -> [Integer]))
In a stmt of an interactive GHCi command: print it
*Main>
Может кто-нибудь объяснить, что я делаю неправильно? :)
'treeLev' получает два аргумента. Поэтому 'treeLev tree4' является функцией. Вы не можете печатать функции. – user3237465