The restriction Integralcomes from the indicator 2. Remember that in Haskell, whole literals are actually polymorphic type values Num a => a. The compiler then indicates that since it is used as an exponent (^) :: (Num a, Integral b) => a -> b -> a, it should be of a more limited type Integral a => a.
, Haskell defaulting, . Integer. , :type Hugs , , GHCi , default.
, .
Hugs> :type (\x -> x^(2 :: Integer))
\x -> x ^ 2 :: Num a => a -> a