【发布时间】:2011-12-02 17:13:01
【问题描述】:
我想分层定义数据类型,比如:
data Cat = BigCat | SmallCat
data Animal = Cat | Dog
然后编写一个将 Animals 作为参数的函数,并使用这样的模式匹配编写它:
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。 constructorCat与 typeCat无关。
标签: haskell