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

eye*_*erg 1 recursion haskell functional-programming

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

任何人都可以向我解释这个随机and是怎么=回事?它在我编译它时起作用,但它对我来说没有逻辑意义.是因为Haskell以递归方式工作并且使用它and来比较下一个项目吗?

任何见解都受到高度赞赏.

Dav*_*vid 8

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

[x <= y | (x,y) <- pairs xs]
Run Code Online (Sandbox Code Playgroud)

是一个布尔值列表(也就是它的类型[Bool]).and是一个函数,其类型是[Bool] -> Bool:它采用一个布尔列表,True如果列表中的所有布尔值都是True,False则返回.

and [x <= y | (x,y) <- pairs xs]是一个函数应用程序(and正在应用于列表推导创建的值).

有一点需要注意的是,相比之下,Haskell没有很多特殊的关键词.许多操作由函数表示,而不是由特殊语法或关键字表示.