我很確定我的問題源於我是Haskell的新手,並不完全理解類型系統。「SubTypes」與自己的顯示和其他模塊中可用
我將使用Haskell的維基用在
以下類型定義
data Suit = Club | Diamond | Heart | Spade
現在第一個問題是主題類型的例子,我想實現Show
每一個「子鍵入「(俱樂部,鑽石,心臟,黑桃),但這似乎不工作,因爲它是一個DataKinds
。所以我把它分成他們自己的類型。 (屬性沒有太大的意義,但我說他們是更接近真實的代碼)
data ClubType = ClubType {
clubName :: String,
icon :: String
}
instance Show ClubType where
show (ClubType cn i) = "name: " ++ cn ++ ", icon: " ++ i
在西裝式
data Suit = Club ClubType
| Diamond DiamondType
| Heart HeartType
| Spade SpadeType
現在我想用衣服和使用它們「子類型「(俱樂部,鑽石,心臟,黑桃)在不同的module
。我只出口了Suit (..)
。
使用
import Module1 (Suit(..))
getSuit :: String -> Suit
getSuit "Club" = getClub
getSuit "Heart" = getHeart
...
getClub ::() -> Club
現在再次Club
,Heart
,Diamond
和Spade
不能使用,因爲它們DataKinds
。我如何使用「子類型」?我是否需要導出所有類型?如果我這樣做,是否符合getSuit
的退貨類型?
(很抱歉,如果該示例沒有一大堆的道理,但我希望你能按照我需要的結果)
感謝
我正要問爲什麼答案如此之短。 :)抱着我的馬! – Alec
感謝您的好評。我能否以任何方式引用*構造函數?是否可以定義一個返回「Club」的函數,或者我應該只是使用'Suit'到處? – KenavR
你不能談論類型級別的構造函數(除非像我在GADT例子中展示的那樣,但我不會擔心,直到你更有經驗),只需使用'Suit'。 – luqui