Haskell -класс vs класс типов - в чем разница

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

Я имел в виду нечто подобное - но затем ошибка: Не в переменной типа области видимости встречается у вас есть дополнительный совет ??

8
задан epsilonhalbe 29 June 2011 в 16:51
поделиться