Haskell tiene funciones / tuplas variadas?

Losuncurrya función @ solo funciona para funciones que toman dos argumentos:

uncurry :: (a -> b -> c) -> (a, b) -> c

Si quiero eliminar las funciones con un número arbitrario de argumentos, podría escribir funciones separadas:

uncurry2 f (a, b)          = f a b
uncurry3 f (a, b, c)       = f a b c
uncurry4 f (a, b, c, d)    = f a b c d
uncurry5 f (a, b, c, d, e) = f a b c d e

Pero esto se vuelve tedioso rápidamente. ¿Hay alguna forma de generalizar esto, así que solo tengo que escribir una función?

Respuestas a la pregunta(3)

Su respuesta a la pregunta