Hello Haskellers and Haskellettes,
Я довольно долго возился с Haskell, но есть концепция классов, которую я не совсем понимаю. В следующем примере у меня есть тип данных ExprTree
data Val a = Num a | Var String deriving (Eq, Ord, Show)
data ExprTree = Leaf {lab::Label, val::(Val a)=> a}
| Node {lab::Label, fun::Fun, lBranch::ExprTree, rBranch::ExprTree}
deriving(Eq,Ord)
, который приводит к
Type constructor `Val' used as a class In the definition
of data constructor `Leaf' In the data type declaration for `ExprTree'
. Я также пробовал
data ExprTree' = Leaf {lab::Label, val::Val}
...
, но произвольно менял сигнатуру типа - ни звучит эффективно, ни просветляет.
теперь, насколько я знаю. Num a
обозначает что-то из класса Num
, но это не экземпляр типа данных - и не позволяет мне компилировать.
Итак, что мне нужно сделать, чтобы сделать ExprTree
хорошо определенным.
Заранее спасибо за подсказки и идеи!
Edit :
1) Спасибо за быстрые ответы !
2) Я изменил val: :( Val a) => a
на val :: Val a
Я имел в виду нечто подобное - но затем ошибка: Не в переменной типа области видимости встречается
у вас есть дополнительный совет ??