¿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
.