If we have the following in Haskell:
f x y = x + y :type f f :: Num a => a -> a -> a
then GHC would report
Num a1 => (a2 -> a1) -> a2 -> a1 -> a1 as the type for
Would you please explain me the steps through which GHC comes to such conclusion?