0

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

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

为什么是这样?

4

1 回答 1

3

就像提到的 shachaf 一样,您的列表类型与 Prelude 中提供的 Haskell 的列表类型不同。这意味着您不能对自定义列表类型使用列表括号语法,除非您使用OverloadedLists语言扩展,您可以在此处阅读更多信息。

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

>>> null' EmptyList
True
>>> null' (NonEmptyList 1 (NonEmptyList 2 EmptyList))
False
于 2013-05-31T17:53:27.830 回答