Estimados,
Viendo las diapositivas que hablan sobre currificación, no me queda claro el tipo de curry y uncurry.
Antes que nada, me gustaría saber si entiendo bien el concepto:
Una función está currificada si recibe sólo un sólo parámetro y una función está descurrificada si recibe sólo dos parámetros, esto es correcto?
Por otra parte, en las diapositivas definen:
1) curry f x y = f (x,y), o sea, si tengo una función (f) que recibe 2 parámetros (x e y), la puedo "currificar" para que solo reciba 1 parámetro ((x,y)).
2) uncurry f (x,y) = f x y, o sea, si tengo una función (f) que recibe 1 parámetro ((x,y)), la puedo "descurrificar" para que reciba 2 parámetros (x e y).
Lo que no entiendo son los tipos que figuran en la diapositiva:
1) curry :: ((a,b) -> c) -> (a -> b -> c), por la definición 1, este tipo no debería decir que dada una función (f) y 2 parámetros (x e y), devuelve una función que recibe 1 parámetro (f (x,y)). Es decir, curry :: (a -> b -> c) -> ((a,b) -> c)?
2) uncurry :: (a -> b -> c) -> ((a,b) -> c), por la definición 2, este tipo no debería decir que dada una función (f) y 1 parámetro ((x,y)), devuelve una función que recibe 2 parámetros (f x y). Es decir, uncurry :: ((a,b) -> c) -> (a -> b -> c)?
Espero que se entienda la duda.