将空列表与[(a,b)] Haskell进行比较

Noo*_*pty 2 haskell boolean tuples list

我对Haskell中的列表的工作方式有些困惑。我知道这[]是类型为[a]的空列表。有没有办法定义类型为[(a,b)]的空列表?

例如,我知道这null [1] == []会给我们True

null [(1,2)] == [] 给了我我所假设的类型不匹配的错误。

我想知道是否可以说类似的话null [(1,2)] == [(,)]会给我们True

lef*_*out 7

我知道这[]是带有类型的空列表[a]

是的,但是了解“类型[a]”的实际含义很重要。实际上,它的意思是type forall a . [a],即,这不是某个特定类型“ a”的元素的列表,而是给定类型的任何选择a,而是该类型的列表。特别地,它也可以是元组类型的列表。因此,null对元组列表和任何其他类型的列表一样有效。

要实际查看null此类元组列表的实际操作,您只需提供一个即可。例如,null [(1,2)]将其用于元组列表。但是,如果列表为空,则列表中没有内容会限制类型。从上下文中可能很清楚,例如

Prelude> [null l | l <- [ [], [(1,2)], [(1,3)] ]]
[True,False,False]
Run Code Online (Sandbox Code Playgroud)

或者您可以使用签名明确指定

Prelude> null ([] :: [(String, Double)])
True
Run Code Online (Sandbox Code Playgroud)


Wil*_*sem 5

有没有一种方法可以定义类型为空的列表[(a,b)]

简单地说[]。确实[]是一个空列表,但是元素的类型是自由的。它具有type [a],但a可以(b, c)与具有两个不同类型的2元组相同。

例如,我知道这null [1] == []会给我们True

null :: Foldable f => f a -> Bool是一个函数,该函数采用f a(在这种情况下为[a])并返回Bool。它检查列表是否为空。它并没有产生一个列表。