列出自定义列表类型的语法

时间:2013-05-31 07:48:39

标签: haskell functional-programming pattern-matching recursive-datastructures

给定自定义类型的列表,例如

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

为什么会这样?

1 个答案:

答案 0 :(得分:3)

与提到的shachaf一样,您的列表类型与Prelude中提供的Haskell列表类型不同。这意味着您不能对自定义列表类型使用列表括号语法,除非您使用OverloadedLists语言扩展,您可以阅读更多有关here的内容。

但是,让我们暂时假设你没有重载列表语法。然后,您可以调用null'函数的唯一方法是使用您定义的构造函数:

>>> null' EmptyList
True
>>> null' (NonEmptyList 1 (NonEmptyList 2 EmptyList))
False