Skip to content

Proposal: Remove Num superclass of Bits

This ticket summarizes the discussion on the proposal to remove the Num superclass of the Bits type class.

The proposal is to:

  • Remove the Num superclass of the Bits type class.
  • Remove the default implementations of bit, testBit and popCount since they use methods of Num.
  • Export the following convenience functions from Data.Bits:
bitDefault :: (Bits a, Num a) => Int -> a
bitDefault i = 1 `shiftL` i

testBitDefault ::  (Bits a, Num a) => a -> Int -> Bool
testBitDefault x i = (x .&. bit i) /= 0

popCountDefault :: (Bits a, Num a) => a -> Int
popCountDefault = go 0
 where
   go !c 0 = c
   go c w = go (c+1) (w .&. w - 1) -- clear the least significant

Attached are tickets for base and ghc.

Trac metadata
Trac field Value
Version 7.2.1
Type Task
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component libraries/base
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information