Haskell:如何使类型成为两个类型类的实例?

时间:2016-03-24 22:34:43

标签: haskell

是否可以使Level成为EqOrd的实例?

instance Eq Ord Level where
    compare First Second = LT
    ...

我试过这个

instance (Ord, Eq) => Level where ...

但我有错误

‘compare’ is not a (visible) method of class ‘Level’

我知道我可以在deriving (Eq)上使用data Level。但我不能改变我的data

1 个答案:

答案 0 :(得分:7)

使用两个实例

instance Eq Level where
   x == y = ...
instance Ord Level where
   compare x y = ...

或者,使用standalone deriving extension

{-# LANGUAGE StandaloneDeriving #-}
...       -- ^^^^^^^^^^^^^^^^^^ must be at the top of the file
deriving instance (Eq Level)
deriving instance (Ord Level)