[英]Haskell inheritance: What's inherity about it?
这里是类继承中的http://en.wikibooks.org/wiki/Haskell/Classes_and_types ,我读到“一个类可以继承其他几个类:只需将所有祖先类放在=>之前的括号中。”
当“(...)=>”被描述为“继承”时,我很困惑。 据我所知,它只是一个类约束。 它只是说这个新定义的类(在示例中为Real)适用于已经列出的类(Num和Ord)的成员(具有实例)的类型。
简而言之,“(...)=>”似乎对于可以创建此类实例的类型所需的质量的过滤器起作用,并且不用于增强类或其实例。
我错过了什么吗? 是否有某种意义上“(...)=>”实际上从“父母”传递给“孩子”?
实际上,这意味着子类的所有成员都必须提供超类的所有方法。
因此,如在链接示例中,我们可以编写一个需要Eq
的方法,但只给它一个Ord
约束,并且我们隐含了Eq
方法。
(请注意,继承可能是一个可怕的术语,因为它带有许多在我们的上下文中没有意义的关联。但是,我想我也可以解释它。)
后来回复,@ gwideman,我认为你原来的理解是正确的。
简而言之,“(...)=>”似乎对于可以创建此类实例的类型所需的质量的过滤器起作用,并且不会用于增强类或其实例
那个wiki页面的“类继承”是错误的。 这是我的理由。 在页面中,它说。
这里,这意味着对于一个类型是Ord的实例,它也必须是Eq的一个实例,因此需要实现==和/ =操作
如果你运行ghci,并输入:info Ord ,它会显示以下信息:
class Eq a => Ord a where
compare :: a -> a -> Ordering
(<) :: a -> a -> Bool
(<=) :: a -> a -> Bool
(>) :: a -> a -> Bool
(>=) :: a -> a -> Bool
max :: a -> a -> a
min :: a -> a -> a
{-# MINIMAL compare | (<=) #-}
https://downloads.haskell.org/~ghc/7.8.1/docs/html/users_guide/pragmas.html ,解释“MINIMAL”
看看“ MINIMAL ”,它说,Ord的一个实例只需要实现比较或 (<=),这意味着,你不需要“实现==和/ =操作”。 只有那个多态'a'需要实现==或/ =(检查Eq的MINIMAL编译指示)
(...)=>是类型类约束,而不是类似接口继承的Java。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.