给定自定义类型的列表,例如
data List' a = EmptyList | NonEmptyList a (List' a)
deriving Show
和一个判断这样的列表是否为非空的函数
null' xs = case xs of
EmptyList -> True
_ -> False
为什么不在GHCi中使用像
这样的列表参数调用它null' NonEmptyList [1,2,3]
或
null' EmptyList []
工作?使用定义的构造函数调用函数确实有效。
null' Emptylist
为什么会这样?
答案 0 :(得分:3)
与提到的shachaf一样,您的列表类型与Prelude中提供的Haskell列表类型不同。这意味着您不能对自定义列表类型使用列表括号语法,除非您使用OverloadedLists
语言扩展,您可以阅读更多有关here的内容。
但是,让我们暂时假设你没有重载列表语法。然后,您可以调用null'
函数的唯一方法是使用您定义的构造函数:
>>> null' EmptyList
True
>>> null' (NonEmptyList 1 (NonEmptyList 2 EmptyList))
False