Я написал следующий код для обработки полиморфного двоичного дерева в 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 должен быть типом, который можно подсчитать/перечислить? Возможно, с экземпляром класса такого типа?
Заранее благодарим за помощь!
Саймон