在Haskell中,是否有可能让一个类型类暗示另一个类型类?例如,假设有一堆可以通过“属性”进行排序的“物品”:
为了避免重复,可以定义一个“可按键排序”的类型类来实现。
那么,
data Person = Person { name :: String, age :: Int }
Person p1 <= Person p1 = (age p1) <= (age p2)
为了避免重复,可以定义一个“可按键排序”的类型类来实现。
class OrdByKey o where
orderKey :: (Ord r) => o -> r
x <= y = (orderKey x) <= (orderKey y)
那么,
Person
的实例声明可能如下所示:instance OrdByKey Person where
orderKey Person p = age p
现在这个明显有很多问题,我想知道它是否可能?
Person
定义Ord
实例来比较该特定字段。 - sabaumacomparing age you me
。 - Michael Steeleon
。它的类型为(b -> b -> c) -> (a -> b) -> a -> a -> c
,因此comparing age = on compare age
,但您也可以使用on (==) f
在应用f
后测试两个内容是否相等。 - Laar