Почему умножение только короткого замыкания на одну сторону
Я возился сfix
и после возни с ним я столкнулся с каким-то странным поведением, а именно, что0 * undefined
является*** Exception: Prelude.undefined
а такжеundefined * 0
является0
, Что также означает, чтоfix (0 *)
является*** Exception: <<loop>>
а такжеfix (* 0)
является0
.
После игры с этим кажется, что причина в том, что нетривиально сделать это коротким замыканием в обоих направлениях, поскольку это не имеет особого смысла, без какого-то странного параллельного вычисления и начать с первого нетрадиционного дно вернулось.
Видят ли такие вещи в других местах (рефлексивные функции, которые не рефлексивны для нижних значений), и можно ли на это безопасно положиться? Также есть практический способ сделать оба(0 *)
а также(* 0)
оценить до нуля независимо от значения, переданного в.