Haskell-内置元组,Ord定义为仅按第一个元素进行比较?
我对 Haskell 比较陌生,所以希望这不是一个愚蠢的问题。我正在寻找一种常见的/众所周知的类型,它本质上是一个元组,但已Ord定义为仅按第一个元素进行比较。
我可以这样定义自己:
data RankedItem a = RankedItem Double a deriving (Show)
instance Eq (RankedItem a) where
(RankedItem lkey _) == (RankedItem rkey _) = lkey == rkey
instance Ord (RankedItem a) where
(RankedItem lkey _) `compare` (RankedItem rkey _) = compare lkey rkey
是否有内置类型或常用的第三方容器来实现这一点?
回答
是的,存在这样的类型。它是ArgData.Semigroup 中定义的类型。它的Eq和Ord实例仅基于第一个元素进行比较,并且它有各种其他实例(如Functor),它们根据第二个元素起作用。