Andrew Martin
2018-05-24 14:02:01 UTC
The trac issue this is asking about is found here:
https://ghc.haskell.org/trac/ghc/ticket/14839. I'm looking for any feedback
from the broader community to see if the proposed law is incompatible with
any important uses of Bits. The text of the trac issue is provided below:
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
https://ghc.haskell.org/trac/ghc/ticket/14839. I'm looking for any feedback
from the broader community to see if the proposed law is incompatible with
any important uses of Bits. The text of the trac issue is provided below:
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
--
-Andrew Thaddeus Martin
-Andrew Thaddeus Martin