Ответ 1
vitus указывает на очень классный пример Monoid
для Ordering
. Если вы объедините его с экземпляром instance Monoid b => Monoid (a -> b)
, то окажется, что ваша композиционная функция просто (готовьтесь):
mappend
Проверьте это:
Prelude Data.Monoid> let f a b = EQ
Prelude Data.Monoid> let g a b = LT
Prelude Data.Monoid> :t f `mappend` g
f `mappend` g :: t -> t1 -> Ordering
Prelude Data.Monoid> (f `mappend` g) undefined undefined
LT
Prelude Data.Monoid> let f a b = GT
Prelude Data.Monoid> (f `mappend` g) undefined undefined
GT
+1 для мощных и простых абстракций