Data.Semigroup ((<>)) 在这个 Haskell 排序代码中做了什么?

What does Data.Semigroup ((<>)) do in this Haskell sort code?

程序可以按制造商或年份对列表进行排序。什么是 (<>)?

import Data.Semigroup ((<>))

compare = comparing year <> comparing mfg
.
.
.

import Data.Semigroup ((<>)) 在您的程序中没有做任何有用的事情,自 2015 年发布 GHC 7.10 以来也没有。在此之前,它将 <> 运算符纳入范围,以便 compare = flip (comparing year) <> comparing mfg 可以使用它。在 GHC 7.10 中,该运算符已添加到 Prelude,因此即使不导入它,它现在也始终在范围内。

至于 <> 的作用,您正在使用 Vehicle -> Vehicle -> Ordering 类型。它来自 Semigroup b => Semigroup (a -> b) 实例(两次)和 Semigroup Ordering 实例。净效果是在对它应用两个 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