It comes from k <- [0..]- that desugars uses a class Enum.
It then propagates into a signature of the final type, because you use (**)for exponentiality, which expects its arguments to be of the same type:
(**) :: Floating a => a -> a -> a
, (^):
(^) :: (Integral b, Num a) => a -> b -> a
factorial k - fromIntegral:
exp' x = sum $ take 100 [(x^k) / fromIntegral (factorial k) | k <- [0..]]
, , , , ( ), .
( ), (**), fromIntegral Int , :
let exp' x = sum $ take 100 [(x**fromIntegral k) / fromIntegral (factorial k)
| k <- [0..]]