winterland1989 / magic-haskell

魔力haskell官方网站
293 stars 28 forks source link

14.1节 ordering #19

Closed boboyada closed 7 years ago

boboyada commented 7 years ago

instance Monoid Ordering where mempty = EQ LT 'mappend' _ = LT

EQ ........... GT............ 有什么意义?好像参与运算的对象集合,也就这三个元素?

而且,这与该书前一页的定义 class Monid a where .......... 不符,Ordering的半群实例中缺少a这类型变量

顺祝节日快乐

winterland1989 commented 7 years ago

有什么意义?好像参与运算的对象集合,也就这三个元素?

是这样的,但这并没有什么问题,正如newtype All = All {getAll :: Bool}只有两个元素也可以是Monoid一样,他的意义是可以用来提供一系列基于Ord的实例的,举个例子:

 instance Ord a => Ord [a] where
    a `compare` b = mconcat (zipWith compare a b)

当然base里面也许不是这样定义的(甚至顺序和结果也不同),但是你理解利用Monoid实例合并顺序的思路就可以了。

而且,这与该书前一页的定义 class Monid a where ......... 不符,Ordering的半群实例中缺少a这类型变量

你应该还是对类型类/实例的概念不熟悉,再回去反复看看概念,这个问题并不存在。