为什么`Bits`依赖于'Num`?

时间:2011-07-03 13:48:41

标签: haskell typeclass

我一直在编写自己的位向量(在Word64值上表示为严格元组)作为时间和空间优化的练习,并希望为它们定义Bits类型类的实例,但后来我注意到Bits的类声明定义如下:

class Num a => Bits a

为了解决这个问题,我正在定义一个虚假的Num实例,主要由error组成的值函数作为黑客,但这感觉不对......

依赖Num类型类上进行逐位操作的理由是什么?能够使Bits个实例独立于必须声明Num实例是不是更有意义?

1 个答案:

答案 0 :(得分:4)

Bits取决于Num,因为Num提供了数字文字和否定,它们在Bits的默认方法中使用,如下所示:

bit :: Int -> a
bit i               = 1 `shiftL` i

testBit           :: a -> Int -> Bool    
x `testBit` i       = (x .&. bit i) /= 0        

如果没有默认方法,你可以想象在没有Num约束的情况下离开。