The issue with this example is that you have
genericTake :: Integral a => a -> [b] -> [b]
where the 'a' is converted to an Int without being checked for overflow.
IMHO type defaulting is irrelevant for this one problem; evaluating
> take 444444444444444444444444444444 "foobar"
has exactly the same result without any defaulting taking place. Arguably fromIntegral could have other behavior (error/exception/Maybe) when a conversion would overflow, but that seems like a very significant change.
Aside from this example, I'm quite sympathetic to the issue. I've more than once defined values as
let two = 2 :: Int
three = 3 :: Int
solely to suppress warnings about type defaulting for (^n).
Really, I'd prefer to see the Prelude export
(^) :: Num a => a -> Int -> a
I think that's the most common case, and it's probably never useful to raise to a power greater than (maxBound :: Int).
John L.