curry : transforma uma função que recebe como argumento um par, numa função equivalente que recebe um argumento de cada vez
curry :: ((a,b) -> c) -> a -> b -> c
curry f x y = f (x,y)
uncurry : transforma uma função que recebe dois argumentos (um de cada vez), numa função equivalente que recebe um par
uncurry :: (a -> b -> c) -> (a,b) -> c
uncurry f (x,y) = f x y
Exemplo :
quocientes :: [(Int,Int)] -> [Int]
quocientes l = map (\\(x,y) -> div x y) l
Ou, em alternativa :
quocientes l = map (**uncurry** div) l
> quocientes [(10,3),(20,4)] = [3,5]