創建奧德情況下,給定的數據類型,如與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