组成两个比较函数?

我想先sorting一个属性,然后再sorting(如果第一个属性是相同的)。

Haskell中sortBy两个比较函数的惯用方法是什么,即与sortBy使用的函数?

特定

 f :: Ord a => a -> a -> Ordering g :: Ord a => a -> a -> Ordering 

构成fg会产生:

 hxy = case v of EQ -> gxy otherwise -> v where v = fxy 

维古斯指出了Monoid for Order的非常酷的例子。 如果你将它与实例instance Monoid b => Monoid (a -> b)起来,你的组合函数就是(准备就绪):

 mappend 

一探究竟:

 Prelude Data.Monoid> let fab = EQ Prelude Data.Monoid> let gab = LT Prelude Data.Monoid> :tf `mappend` g f `mappend` g :: t -> t1 -> Ordering Prelude Data.Monoid> (f `mappend` g) undefined undefined LT Prelude Data.Monoid> let fab = GT Prelude Data.Monoid> (f `mappend` g) undefined undefined GT 

+1强大和简单的抽象