我想分級定義的數據類型,如:分層數據類型
data Cat = BigCat | SmallCat
data Animal = Cat | Dog
,然後編寫,將採取的動物作爲自變量的函數,並將其與模式匹配這樣寫:
bigger::Animal -> Animal -> Bool
bigger SmallCat BigCat = False
bigger BigCat SmallCat = True
bigger Dog Cat = True
bigger Cat Dog = False
編譯器抱怨。它不希望在功能簽名中明確寫入類型Animal
與第一行和第二行模式匹配中的類型Cat
相匹配。爲什麼Haskell不會承認一隻大貓或者小貓是的一種動物?
「爲什麼Haskell不承認一隻大貓或小貓是動物?」 - 因爲它不是。 'BigCat :: Cat'和'SmallCat :: Cat',但是'Cat :: Animal'。 *構造函數*'Cat'與* type *'Cat'沒有關係。 – delnan