noob“重复实例声明”(再次)(再次)

时间:2015-09-03 15:15:46

标签: haskell

(以更好的例子重新发布)与一个天真的OO头......我们去....

> class Drink a where

> class DrinkWithCaffeine a where

> class Fizzy a where

> class Still a where

> class Cola a where

> instance (Drink a) => DrinkWithCaffeine a
> instance (Drink a) => Fizzy a
> instance (Drink a) => Still a

> instance (Fizzy a) => Cola a
> instance (DrinkWithCaffeine a) => Cola a

和ghc去了

Duplicate instance declarations:
    instance forall (k :: BOX) (a :: k). Fizzy a => Cola a
    instance forall (k :: BOX) (a :: k). DrinkWithCaffeine a => Cola a

你看起来......并且有一个使用见证类型的解决方案,我可能会开始工作但是......我不明白这个问题是什么?

据称,编译器匹配右侧和bla bla ......?

我不明白....我想我说...如果我有类型的狗类...那么它也是类型动物类动物......所以如果我调用方法foo等然后这个是怎么做的(就狗而言)

我错过了什么

2 个答案:

答案 0 :(得分:1)

我理解的是instance (Fizzy a) => Cola a真正意味着什么,aCola,但如果a不是Fizzy则会失败}}。在确定重复时,不考虑上下文(Fizzy a)。

答案 1 :(得分:0)

请忽略我的问题,我没有正确阅读以前的回复...如果我做了我应该做的事

> class Drink a where

> class (Drink a) => DrinkWithCaffeine a where

> class (Drink a) => Fizzy a where

> class (Drink a) => Still a where

> class (DrinkWithCaffeine a,Fizzy a) => Cola a where

它有效。