该程序可以按制造或按年份对列表进行排序。什么是 (<>)?
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/