我一直在编写自己的位向量(在Word64
值上表示为严格元组)作为时间和空间优化的练习,并希望为它们定义Bits
类型类的实例,但后来我注意到Bits
的类声明定义如下:
class Num a => Bits a
为了解决这个问题,我正在定义一个虚假的Num
实例,主要由error
组成的值函数作为黑客,但这感觉不对......
依赖在Num
类型类上进行逐位操作的理由是什么?能够使Bits
个实例独立于必须声明Num
实例是不是更有意义?
答案 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
约束的情况下离开。