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)
"