簡體   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