Recordar a função factorial :

fact :: Integer -> Integer
fact 0 = 1
fact n = n * fact (n-1)

> fact 5
120
> fact 20
2432902008176640000
> fact (-1)
*** **Exception**: **stack overflow {-Porque a computação não termina e enche a stack-}**

Usando a função com uma guarda (condição) :

fact :: Integer -> Integer
fact 0 = 1
fact n **|** **n > 0** = n * fact (n-1)

> fact (-1)
*** **Exception**: Non-exhaustive patterns in function fact

{-A guarda é uma expressão Booleana-}
{-A equação só pode ser usada se a condição for verdadeira-}

Uma definição alternativa :

fact :: Integer -> Integer
fact 0 = 1
fact n **|** n > 0 = n * fact (n-1)
       **|** otherwise = error "Não está definida."
{-Aqui temos 2 equações com guardas-}
{-A guarda "*otherwise*" corresponde a True-}
{-A função "*error :: String -> a*" do Prelude, permite alterar a mensagem de erro-}
> fact (**-1**)
*** **Exception**: Não está definida.

Diferença entre "if...then...else..." e guarda :

sinal :: Int -> Int
sinal x = if x<0 then -1
					else if x==0 then 0
               else 1
sinal x **|** x<0 = -1
        **|** x==0 = 0
        **|** otherwise = 1

O uso de equações guardadas é também uma forma de contornar o facto de as expressões condicionais em Haskell terem obrigatoriamente o ramo else.