¿Por qué la multiplicación solo cortocircuita en un lado?

Estaba jugando confix y después de perder el tiempo me encontré con un comportamiento extraño, a saber, que0 * undefined es*** Exception: Prelude.undefined yundefined * 0 es0. Lo que también significa quefix (0 *) es*** Exception: <<loop>> yfix (* 0) es0.

Después de jugar con él, parece que la razón es porque no es trivial hacer un cortocircuito en ambas direcciones, ya que eso no tiene mucho sentido, sin algún tipo de cálculo paralelo extraño y comenzar con el primer fondo vuelto.

¿Se ve este tipo de cosas en otros lugares (funciones reflexivas que no son reflexivas para valores inferiores), y es algo en lo que puedo confiar con seguridad? También hay una forma práctica de hacer que ambos(0 *) y(* 0) evaluar a cero independientemente del valor pasado.

Respuestas a la pregunta(3)

Su respuesta a la pregunta