Haskell and principal types