Ord允许我使用"=="吗?

Joa*_*nte 4 haskell typeclass

我正在做一些测试函数来了解更多关于Haskell的信息,我这样做了:

constroiMSet :: Ord a => [a] -> [(a,Int)] 
constroiMSet( x:x1:xs) |x1==x =[(x,2)]
Run Code Online (Sandbox Code Playgroud)

我没有得到的是为什么这个功能有效.这个功能Ord a但它==用来比较a.是不是Ord a只为>=,<=,<,>

Wil*_*sem 11

如果我们看一下类的定义Ord,我们会看到:

class Eq a => Ord a where
  compare :: a -> a -> Ordering
  (<) :: a -> a -> Bool
  (<=) :: a -> a -> Bool
  (>) :: a -> a -> Bool
  (>=) :: a -> a -> Bool
  max :: a -> a -> a
  min :: a -> a -> a
Run Code Online (Sandbox Code Playgroud)

所以这意味着每种类型的a地方Ord a,也意味着Eq a.所以a支持Ord,也支持Eq,从而(==)(/=).