Bits typeclass law for LSB
The documentation for the Bits typeclass claims:
Bits are numbered from 0 with bit 0 being the least significant bit.
However, there's no law specified in the typeclass that enforces this. I realized this recently because I've been adding the laws for Bits to a library of property tests I maintain: http://hackage.haskell.org/package/quickcheck-classes-0.3.3/docs/Test-QuickCheck-Classes.html#v:bitsLaws
In another package of mine, someone requested to add a Bits instance for a type but with the MSB considered bit 0. (https://github.com/andrewthad/haskell-ip/issues/29) I thought this would fail to satisfy a law of Bits, but it doesn't. So at the least, I was thinking we could add the following laws to FiniteBits:
countTrailingZeros (bit 0) = 0
countLeadingZeros (bit 0) = finiteBitSize undefined - 1
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.2.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |