Attempt to convert an
Integral type
a to an
Integral type
b using the size of the types as
measured by
Bits methods.
A simpler version of this function is:
toIntegral :: (Integral a, Integral b) => a -> Maybe b
toIntegral x
| toInteger x == y = Just (fromInteger y)
| otherwise = Nothing
where
y = toInteger x
This version requires going through
Integer, which can be
inefficient. However,
toIntegralSized is optimized to allow
GHC to statically determine the relative type sizes (as measured by
bitSizeMaybe and
isSigned) and avoid going through
Integer for many types. (The implementation uses
fromIntegral, which is itself optimized with rules for
base types but may go through
Integer for some type
pairs.)