繁体   English   中英

Haskell继承:它的遗传是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM