sorting - modelos - problemas verbales de graficación de funciones lineales
componiendo dos funciones de comparación? (1)
vitus señala la genial instancia de Monoid
para Ordering
. Si lo combina con la instancia instance Monoid b => Monoid (a -> b)
resulta que su función de composición es justa (prepárese):
mappend
Echale un vistazo:
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 para abstracciones poderosas y simples
Me gustaría ordenar por una propiedad y luego por otra (si la primera propiedad es la misma).
¿Cuál es la forma idiomática en Haskell de componer dos funciones de comparación, es decir, una función utilizada con sortBy
?
Dado
f :: Ord a => a -> a -> Ordering
g :: Ord a => a -> a -> Ordering
componer f
y g
produciría:
h x y = case v of
EQ -> g x y
otherwise -> v
where v = f x y