Haskell es un lenguaje funcional, por lo que el concepto de función es esencial para el lenguaje. Una función toma uno o más argumentos y calcula un resultado. Dados los mismos argumentos, el resultado siempre será el mismo. Esto es similar a una función matemática y significa que en Haskell no hay efectos secundarios. Hay dos operaciones fundamentales en las funciones: definición de función (crear una función) y aplicación de función (usar una función para calcular un resultado).
En Haskell, muchas funciones están predefinidas en una biblioteca estándar llamada preludio (prelude)
Una función se define mediante una ecuación.
f = \ x -> x + 1 - función lambda
- o
f x = x + 1 - función nombrada
Esto es equivalente a f (x) = x + 1 en notación matemática.
El lado izquierdo de la ecuación parece una variable, y eso es lo que es. El lado derecho es una expresión que usa las variables locales enumeradas entre paréntesis y define el resultado de la expresión.
Una aplicación es una expresión como f 31, donde 31 es el argumento. La aplicación se evalúa reemplazándola con el cuerpo de la función, donde los parámetros formales se reemplazan por los argumentos.
Veamos un ejemplo :
f = \ x -> x + 1
f 3
-> {enlace x = 3}
(x + 1) donde x = 3
-> {sustituir 3 por x}
3 + 1
->
4
Una función con tres argumentos:
add3nums = \ x y z -> x + y + z
Y podemos usarlo :
10 + 4* add3nums 1 2 3
= {- put extra parentheses in to show structure -}
10 + ( 4* (add3nums 1 2 3) )
-- >
10 + (4*(1+2+3) )
-- >
10 + (4*6)
-- >
10 + 24
-- >
34