How do we uncurry functions when they are polymorphic? For example, is it possible to uncurry the following types? If so what is the uncurried type?

- $ \forall X. X \rightarrow int \rightarrow X$ ?
- $ int \rightarrow \forall X. X \rightarrow X$ ?
- $ int \rightarrow \forall X. X \rightarrow int \rightarrow X$ ?