[Haskell] Rank-N types vs existential types