import Data.Semigroup ((<>))
не делает ничего полезного в вашей программе, и с тех пор не был выпущен GH C 7.10 в 2015 году. До этого он включил оператор <>
в область действия, чтобы compare = flip (comparing year) <> comparing mfg
мог использовать Это. В GH C 7.10 этот оператор был добавлен в Prelude, поэтому теперь он всегда находится в области действия, даже не импортируя его.
Что касается того, что <>
делает, вы используете его в типе Vehicle -> Vehicle -> Ordering
. Это происходит от экземпляра Semigroup b => Semigroup (a -> b)
(дважды) и экземпляра Semigroup Ordering
. Эффект net заключается в том, что после применения к нему обоих Vehicles
он будет использовать результат сравнения с левой стороны (flip (comparing year)
), если только это не EQ
, в этом случае он будет использовать правое -обратное сравнение (comparing mfg
) вместо них. Если бы вы написали от руки именно то, что делали, это было бы так:
compare x y = case flip (comparing year) x y of
LT -> LT
EQ -> comparing mfg x y
GT -> GT