组成两个比较函数?
我想先sorting一个属性,然后再sorting(如果第一个属性是相同的)。
Haskell中sortBy
两个比较函数的惯用方法是什么,即与sortBy
使用的函数?
特定
f :: Ord a => a -> a -> Ordering g :: Ord a => a -> a -> Ordering
构成f
和g
会产生:
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强大和简单的抽象