Data.Bits.shiftL should generate overflow exception for Integer operand
Summary
Data.Bits.shiftL
doc says shiftL
should never be called with negative value. Int
instance returns an overflow exception, but Integer
returns something reasonable. It's confusing to see behaviour change by slightly changing the type of a program:
GHCi, version 8.8.4: https://www.haskell.org/ghc/ :? for help
Prelude> Data.Bits.shiftL (1 :: Integer) ((-1) :: Int)
0
Prelude> Data.Bits.shiftL (1 :: Int) ((-1) :: Int)
*** Exception: arithmetic overflow
Should Integer
instance also throw an exception?