uble2Integer :: Double -> Integer
double2Integer (D# x) =
    case decodeDoubleInteger x of
      (# m, e #)
        | isTrue# (e <# 0#) ->
          case integerToInt m of
            n -> smallInteger (n `uncheckedIShiftRA64#` negateInt# e)
        | otherwise -> shiftLInteger m e

{-
double2Integer :: Double -> Integer
double2Integer (D# x) =
    case decodeDoubleInteger x of
      (# m, e #)
        | isTrue# (e <# 0#) ->
          case integerToInt m of
            n -> smallInteger (n `uncheckedIShiftRA64#` negateInt# e)
        | otherwise -> shiftLInteger m e


double2Integer (D# x) =
    case decodeDoubleInteger x of
      (# m, e #)
        | isTrue# (e <# 0#) ->
          case integerToInt m of
            n -> smallInteger (n `uncheckedIShiftRA64#` negateInt# e)
        | otherwise -> shiftLInteger m e

