Сумма полиморфного дерева Haskell

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

Заранее спасибо за вашу помощь!

Саймон

10
задан saimn 31 July 2012 в 14:26
поделиться