假设我有以下代码:
import Data.List.Ordered
data Person = Person String String
deriving (Show, Eq)
main :: IO ()
main = print . show . sort $ [(Person "Isaac" "Newton"), (Person "Johannes" "Kepler")]
在同一个模块中,我希望能够按名字和姓氏对列表进行排序。显然我不能这样做:
instance Ord Person where
compare (Person _ xLast) (Person _ yLast) = compare xLast yLast
instance Ord Person where
compare (Person xFirst _) (Person yFirst _) = compare xFirst yFirst
那么,我有哪些选择?
此页面提到“您可以通过将类型包装在新类型中并将所有必需的实例提升到该新类型来实现这一点。” 有人可以举个例子吗?
有没有更好的办法?