¿Qué reglas hay sobre una función a -> () que se evalúa en Haskell?

Tal como dice el título: ¿qué garantías hay para evaluar una unidad de retorno de la función Haskell? Uno pensaría que no es necesario ejecutar ningún tipo de evaluación en tal caso, el compilador podría reemplazar todas esas llamadas con un ()valor inmediato a menos que existan solicitudes...