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

标签 sorting haskell compare semigroup

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

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

关于sorting - Data.Semigroup ((<>)) 在这个 Haskell 排序代码中做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61052195/

相关文章:

java - 为什么这种比较方法违反了它的一般契约呢?

java - 比较 Java 7 中的 Object 和 int

python - 按字符串长度对数据帧进行排序

java - 如何根据名称、大小和上次修改时间对目录列表进行排序?

MongoDB - 按子文档匹配排序

parsing - haskell /三连胜 : Parsing completely optional semicolons without polluting AST

haskell - 插入二叉搜索树(仅存储在叶节点的数据)

haskell - 在Windows中编译Haskell程序: is it possible without downloading something such as Cygwin?

visual-c++ - 比较两个包含版本号的 CString

performance - 是否有任何现实世界的 CPU 不使用 IEEE 754?