O Haskell faz o cálculo do valor de uma expressão usando as equações que definem as funções como regras de cálculo.

Cada passo do processo de cálculo costuma chamar-se de redução.

Cada redução resulta de substituir a instância do lado esquerdo da equação pelo respetivo lado direito.

A estratégia de redução usada para o cálculo das expressões é uma característica essencial de uma linguagem funcional.


Exemplo: considere as seguintes funções :

dobro x = x + x

snd (x,y) = y

Como é que a expressão dobro (snd (3,7)) é calculada pelo Haskell ?

dobro (snd (3,7)) = dobro 7 = 7 + 7 = 14

dobro (snd (3,7)) = snd (3,7) + snd (3,7) = 7 + 7 = 14


O Haskell usa como estratégia de redução a lazy evaluation (também chamada de call-by-name).

A lazy evaluation caracteriza-se por aplicar as funções sem fazer o cálculo prévio dos seus argumentos.

Com a lazy evaluation os argumentos das funções só são calculados se o seu valor fôr mesmo necessário.

snd (sqrt (20^3+ (45/23)^10), 1) = 1

Neste caso, o Haskell não calcula o "sqrt (20^3+ (45/23)^10)"