Sempre procure padrões

Uma das coisas que sempre tento lembrar quando estou resolvendo um problema em Haskell é: Preguiça.
Veja este código por exemplo:

module Alarm where

setAlarm :: Bool -> Bool -> Bool
setAlarm True False = True
setAlarm False False = False
setAlarm False True = False
setAlarm True True = False

Você pode notar claramente um padrão em que o segundo argumento não importa, portanto, use caracteres curinga nestes cenários:

setAlarm :: Bool -> Bool -> Bool
setAlarm True False = True
setAlarm _ _ = False