我一直在编写自己的位向量(表示为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 次 |
| 最近记录: |