5

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

import Data.Semigroup ((<>))

compare = comparing year <> comparing mfg
.
.
.
4

1 回答 1

5

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

至于<>那里有什么,你在 type 使用它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
于 2020-04-06T03:00:51.297 回答