There is another point that needs to be
made. A type signature isn't actually a type specification. It is a type
assertion and a type specification in the event that the compiler needs your
help. Most of the time the compiler can care less what you think and does not
require your assistance. In languages like C you get to call the shots. In
languages such as Haskell you don't get that
opportunity.