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

hvr*_*hvr 6 haskell typeclass

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

class Num a => Bits a
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我也定义了一个虚假Num实例,主要是error作为一个黑客攻击,但这感觉不对......

依赖Num逐位操作的类型类的基本原理是什么?能够让Bits实例独立于必须声明Num实例是不是更有意义?

Don*_*art 4

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

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

testBit           :: a -> Int -> Bool    
x `testBit` i       = (x .&. bit i) /= 0        
Run Code Online (Sandbox Code Playgroud)

如果没有默认方法,您可以想象不受约束地逃脱Num

  • 设计失败是整数文字位于“Num”类中。IMO,“fromInteger”应该有自己的类。 (8认同)