与 Haskell 中的排序函数有点混淆

A little confusion with the sorted function in Haskell

sorted :: Ord a => [a] -> Bool
sorted xs = and [x <= y | (x,y) <- pairs xs]

任何人都可以向我解释一下这个随机 and= 之后做了什么吗?它在我编译时有效,但对我来说没有逻辑意义。是因为 Haskell 递归工作并且它使用 and 来比较下一项吗?

非常感谢任何见解。

如果某处定义了函数pairs :: [a] -> [(a, a)],表达式

[x <= y | (x,y) <- pairs xs]

是一个布尔值列表(即它的类型是[Bool])。 and 是一个类型为 [Bool] -> Bool 的函数:它接受一个布尔值列表,如果列表中的所有布尔值都是 True 和 [=17,它会返回 True =] 否则。

and [x <= y | (x,y) <- pairs xs] 是一个函数应用程序(and 被应用到列表理解创建的值)。

需要注意的一件事是 Haskell 相对而言没有很多特殊关键字。许多操作由函数而不是特殊语法或关键字表示。

and 不是取两个布尔值逻辑与的函数;那是 &&(类型 Bool -> Bool -> Bool)。

相反 and 的类型为 [Bool] -> Bool;它通过 "anding them all".

将任意数量的布尔值压缩为单个值