Bits typeclass law for LSB

Andrew Martin andrew.thaddeus at gmail.com
Thu May 24 14:02:01 UTC 2018


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

-- 
-Andrew Thaddeus Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20180524/528083f6/attachment.html>


More information about the Libraries mailing list