Почему умножение только короткого замыкания на одну сторону

Я возился сfix и после возни с ним я столкнулся с каким-то странным поведением, а именно, что0 * undefined является*** Exception: Prelude.undefined а такжеundefined * 0 является0, Что также означает, чтоfix (0 *) является*** Exception: <<loop>> а такжеfix (* 0) является0.

После игры с этим кажется, что причина в том, что нетривиально сделать это коротким замыканием в обоих направлениях, поскольку это не имеет особого смысла, без какого-то странного параллельного вычисления и начать с первого нетрадиционного дно вернулось.

Видят ли такие вещи в других местах (рефлексивные функции, которые не рефлексивны для нижних значений), и можно ли на это безопасно положиться? Также есть практический способ сделать оба(0 *) а также(* 0) оценить до нуля независимо от значения, переданного в.

Ответы на вопрос(3)

Ваш ответ на вопрос