Я написал следующий код для обработки полиморфного двоичного дерева на Haskell в качестве подготовки к экзамену по функциональному программированию на следующей неделе:
data ITree t = Leaf | Node t (ITree t) (ITree t)
deriving (Eq, Ord, Show)
treeSum :: ITree t -> Int
treeSum Leaf = 0
treeSum (Node n t1 t2) = n + (treeSum t1) + (treeSum t2)
Теперь у меня проблема, что код не компилируется:
...\tree.hs:8:26:
Couldn't match type `t' with `Int'
`t' is a rigid type variable bound by
the type signature for treeSum :: ITree t -> Int
at...\tree.hs:7:1
In the first argument of `(+)', namely `n'
In the first argument of `(+)', namely `n + (treeSum t1)'
In the expression: n + (treeSum t1) + (treeSum t2)
Failed, modules loaded: none.
Prelude>
Вы знаете, что не так с treeSum? Я думаю, что это как-то связано с полиморфным типом ITree, но я не знаю, как это решить. Должен ли я указывать, что тип t должен быть типом, который можно подсчитывать/перечислять? Вероятно, с экземпляром класса такого типа класса?
Заранее спасибо за вашу помощь!
Саймон