Haskell:类型类:多重继承示例
问题描述:
我开始知道我们可以使用类型类实现多重继承。我写了小的haskell代码,但无法找出问题所在。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中多重继承的信息,那将会很有帮助。
答
说
class (Eq a, Show a) => C a where
并不意味着实现C
类型自动实现Eq
和Show
,这意味着他们必须首先实现Eq
和Show
他们可以实现C
之前。
Haskell中的A class
与Java中的class
不一样,或者它更接近于接口,但不能以相同的方式使用(也不应该)。 Haskell实际上并没有OOP意义上的继承或类的概念,因为它不是OOP语言。
但是,如果您想为某个类型自动创建Eq
和Show
实例,只需将它们添加到数据类型的deriving
子句中即可。
感谢您的回答。我们可以派生多个类型的类,但是我的问题是我想使用语句'class(Eq a,Show a)=> C a where',我该如何解决这个错误。 –