Haskell自定义isordered函数来检查整数列表

che*_*rns 1 recursion haskell function list

我正在尝试编写一个Haskell函数,该函数检查整数列表是否有序而不使用任何已存在的函数来排序或检查列表的顺序.我写了下面的代码,但我不明白为什么它不起作用.我收到错误:

No instance for (Ord integer)
      arising from a use of `<='
    In the expression: x <= (head xs)
Run Code Online (Sandbox Code Playgroud)

我不明白这意味着什么.我应该用不同的方式编写这个函数吗?到目前为止,这是我的代码.

isordered :: [integer] -> Bool
isordered [] = True
isordered (x:[]) = True
isordered (x:xs)|x <= (head xs) = isordered xs
                |otherwise = False
Run Code Online (Sandbox Code Playgroud)

提前致谢!!!

sep*_*p2k 8

在Haskell类型中,名称以大写字母开头,类型变量以小写字母开头.所以如果你写integer,那是一个类型变量.所以你的类型是相同的[a] -> Bool,即你拿一个任何东西的列表并返回一个Bool.因此,对列表中可能包含的项目类型没有限制,您不能使用<=它.

要解决此问题,您可以将其更改Integer为您想要的,或者添加如下的Ord约束:Ord a => [a] -> Bool.后者将使您的函数适用于任何实现Ord类型类的类型(提供比较运算符,例如<=).