En Elm, las lambdas (o funciones anónimas) son una herramienta fundamental para escribir código conciso y expresivo. Una lambda es simplemente una función sin nombre, definida directamente en el lugar donde se necesita.
La sintaxis de una lambda es:
\param1 param2 -> expresion
Por ejemplo:
\x -> x + 1
Es una función que recibe un número x y devuelve x + 1.
Con más de un parámetro:
\a b -> a + b
Las lambdas son muy útiles cuando trabajamos con funciones como map, filter o fold:
List.map (\x -> x * 2) [1,2,3]
-- Resultado: [2,4,6]
List.filter (\x -> x > 5) [3,7,1,8]
-- Resultado: [7,8]
Las lambdas pueden capturar variables de su entorno, convirtiéndose en clausuras:
sumarN : Int -> List Int -> List Int
sumarN n lista =
List.map (\x -> x + n) lista
sumarN 5 [1,2,3]
-- Resultado: [6,7,8]
Acá la lambda \x -> x + n recuerda el valor de n aunque se ejecute después.
En Elm, los operadores son funciones. Esto significa que:
(+) 3 4 -- 7
(<) 2 5 -- True
Y en lugar de escribir:
\a b -> a < b
Podés usar directamente:
(<)
Ejemplo:
List.sortWith (<) [3,1,2]
-- Resultado: [1,2,3]
Todas las funciones en Elm son curried. Esto significa que se pueden aplicar parcialmente:
(>) 10
-- Es equivalente a \x -> 10 > x
List.filter ((>) 5) [1,7,3,9]
-- Resultado: [1,3]
Las lambdas en Elm hacen que trabajar con funciones de orden superior sea simple y elegante. Entre la posibilidad de capturar variables (clausuras), usar operadores como funciones y aplicar parcialmente, Elm ofrece un estilo de programación muy expresivo y seguro.