Haskell,实例,类型约束

时间:2015-06-21 10:06:19

标签: haskell types constraints instance

我在Haskell中创建了一个新类Eqa

class Eqa a where

   (=~) :: a -> a -> Bool

   (/~) :: a -> a -> Bool

并希望从Prelude中定义(=~)(==)相同。所以我试过

instance Eqa Int where            
   x=~y = x==y

   x/~y = x/=y

但这仅适用于Int(当然)。 如何更改我的代码,使用所有数字类型?

2 个答案:

答案 0 :(得分:2)

为什么不写

(=~) :: Num a => a -> a -> Bool
x=~y = x==y

如果您实际上并不需要针对不同类型的代码不同,为什么还需要一个类?

答案 1 :(得分:-1)

您所要做的就是将a绑定到Num a

instance Num a => Eqa a where            
    x=~y = x==y
    x/~y = x/=y

有关详细信息,请查看Numeric Types subsection of Real World Haskell以了解哪个类与每种数字类型相关。