创建奥德情况下,给定的数据类型,如与NEWTYPE包装
data Foo = Bar | Baz | Qux
,我希望有多个不同的排序为这种类型,是下列最常见/标准来实现这种方式?
newtype FooPriorityA = FooPriorityA { unFooPriorityA :: Foo }
instance Ord FooPriorityA where
compare (FooPriorityA x) (FooPriorityA y) = f x `compare` f y
where f :: Foo -> Int
f Baz = 1
f Bar = 2
f Qux = 3
newtype FooPriorityB = FooPriorityB ... and so on
委托给Int的Ord实例就像那样疯狂?与写出compare
的n^2比较,感觉更安全,而且工作量更少。
我可能忽略了这个“黑客”的任何明显的缺陷?它甚至是“黑客”?
这是一些很棒的信息,谢谢。关于我的'f'和'Enum'类型之间关系的观察很有意思。 – SimonF