Como funciona o curry?

Sou muito novo em Haskell e FP em geral. Eu li muitos dos escritos que descrevem o que é o curry, mas não encontrei uma explicação de como ele realmente funcion

Aqui está uma função:(+) :: a -> (a -> a) Se eu fizer(+) 4 7, a função leva4 e retorna uma função que leva7 e retorna11. Mas o que acontece com4? O que essa primeira função faz com4? O que(a -> a) faça com7?

s coisas ficam mais confusas quando penso em uma função mais complicad

max' :: Int -> (Int -> Int)
max' m n | m > n = m
         | otherwise = n

o que(Int -> Int) compare seu parâmetro com? Leva apenas um parâmetro, mas precisa de dois para fazerm > n.

questionAnswers(5)

yourAnswerToTheQuestion