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