Em Haskell é possível definir funções sem lhes dar nome, através expressões lambda.

Por exemplo : \\x -> x+x ⇒ É uma função anónima que recebe um número x e devolve como resultado x+x. > (\\x -> x+x) 5 = 5

Uma expressão lambda tem a seguinte forma (a notação é inspirada no calculus):

<aside> 💡 \padrão … padrão -> expressão

</aside>

Exemplos :

> (\\x y -> x+y) 3 8 = 11

> (\\(x1,y1) (x2,y2) -> (x1+x2,y1+y2)) (3,2) (7,9) = (10,11)

> (\\(x:xs) -> xs) [1,2,3] = [2,3]

> (\\(x:xs) y -> y:xs) [1,2,3] 9 = [9,2,3]

As expressões lambda são úteis para evitar declarações de pequenas funções auxiliares.

Exemplo :

Em vez de :
trocapares :: [(a,b)] -> [(b,a)]
trocapares l = map troca l
   where troca (x,y) = (y,x)

Pode-se escrever :
trocapares l = map (\\(x,y)->(y,x)) l

Exemplo :

multiplosDe :: Int -> [Int] -> [Int]
multiplosDe n xs = filter (\\x -> mod x n == 0) xs

As expressões lambda podem ser usadas na definição de funções. Por exemplo :

soma x y = x + y

soma1 = \\x y -> x + y

soma2 = \\x -> (\\y -> x + y)