Discussion: Change the specification of rotateL for non-finite Bits, or move rotations to FiniteBits
David Feuer
david.feuer at gmail.com
Mon Sep 29 15:33:54 UTC 2014
Problem:
The documentation currently specifies that for non-finite Bits instances,
rotate is the same as shift. This seems reasonable for Integer rotateR, but
very strange for Integer rotateL. In particular:
rotateL 5 (-1 :: Int) = -1
rotateL 5 (-1 :: Integer) = 16
Based on the concept that Integers represent two's complement out to
infinity, rotating a negative integer left should fill with 1s, but it
fills with 0s instead.
Solutions:
As stated in the subject, I think one reasonable solution is just to make
rotateL fill with 1s for negative non-finite instances, and the other is to
move rotations to FiniteBits, as was done with bitSize.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140929/892a383d/attachment-0001.html>
More information about the Libraries
mailing list