我一直在编写自己的位向量(表示为Word64
值上的严格元组)作为时间和空间优化的练习,并希望Bits
为它们定义类型类的实例,但后来我注意到类声明Bits
定义如下:
class Num a => Bits a
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我也定义了一个虚假Num
实例,主要是error
作为一个黑客攻击,但这感觉不对......
依赖于Num
逐位操作的类型类的基本原理是什么?能够让Bits
实例独立于必须声明Num
实例是不是更有意义?
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
。
归档时间: |
|
查看次数: |
217 次 |
最近记录: |