Consider these (more or less) equivalent type signatures:
f1 :: [a] -> Int -> a
f2 :: Integral b => [a] -> b -> a
f2 is more general than f1, and that is a big advantage, but is there an advantage of f1 over f2?
It seems that in the solutions to the H-99 problems, and in many posted solutions to various Project Euler problems, the f1 form appears much more often than the f2.
I'm not sure why. Is it simply programmer laziness, or is there a performance cost in going with the more general version (f2), or is there another reason?