I'm no expert but isn't the reason so that you know that it's a series of curried functions?
If it was written as
add :: Integer, Integer -> Integer
that would imply that it was a single function taking 2 arguments and that if you called it with only 1 argument it would fail instead of returning you a curried add function (a bit like partial application but not exactly).
If it was written as
add :: Integer, Integer -> Integer
that would imply that it was a single function taking 2 arguments and that if you called it with only 1 argument it would fail instead of returning you a curried add function (a bit like partial application but not exactly).