Haskell:类型类:多继承示例

时间:2016-04-14 17:52:54

标签: haskell inheritance

我开始知道我们可以使用类型类实现多重继承。我写过小的haskell代码,但无法弄清楚问题。

{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE StandaloneDeriving #-}

class (Eq a, Show a) => C a where
    getHashCode :: a -> Integer
    getHashCode obj = 123


type Id = Int
type Name = String

data Employee = Employee Id Name deriving C

当我尝试加载上面的代码时,我收到以下错误。对此有任何帮助。

 No instance for (Eq Employee)
      arising from the 'deriving' clause of a data type declaration
   Possible fix:
      use a standalone 'deriving instance' declaration,
        so you can specify the instance context yourself
    When deriving the instance for (C Employee)
Failed, modules loaded: none.

我搜索谷歌一段时间,但无法找到多重继承的好例子。如果您提供一些信息,例如Haskell中的多重继承,将会很有帮助。

参考:https://www.haskell.org/tutorial/classes.html

1 个答案:

答案 0 :(得分:7)

C

并不意味着实现Eq的类型会自动实现ShowEq,这意味着他们必须先实施ShowC才能实现实施class

Haskell中的class与Java中的Eq不同,它更接近于接口,但它不能以相同的方式使用(并且不应该使用) 。 Haskell实际上并没有OOP意义上的继承或类的概念,因为它不是OOP语言。

但是,如果您希望自动为某个类型设置Showderiving实例,只需将它们添加到数据类型的{{1}}子句中。