¿Cómo funciona el curry?

Soy muy nuevo en Haskell y FP en general. He leído muchos de los escritos que describen qué es curry, pero no he encontrado una explicación de cómo funciona realmente.

Aquí hay una función:(+) :: a -> (a -> a) Si lo hago(+) 4 7, la función toma4 y devuelve una función que toma7 y devuelve11. ¿Pero qué pasa con4? ¿Qué hace esa primera función con4? Que hace(a -> a) hazlo7?

as cosas se vuelven más confusas cuando pienso en una función más complicada:

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

Que hace(Int -> Int) comparar su parámetro con? Solo toma un parámetro, pero necesita dos para hacerm > n.

Respuestas a la pregunta(5)

Su respuesta a la pregunta