为什么 PureScript 编译器会生成很多“|0”

Why does the PureScript compiler generate lots of "| 0"

以下 PureScript 代码:

fibs 0 = 1
fibs 1 = 1
fibs n = fibs (n-1) + fibs (n-2)

编译为以下 JavaScript:

var fibs = function (v) {
    if (v === 0) {
        return 1;
    };
    if (v === 1) {
        return 1;
    };
    return fibs(v - 1 | 0) + fibs(v - 2 | 0) | 0;
};

这一切都说得通,除了“| 0”似乎有点不必要。是优化吗?或者使其对未定义或 NaN 具有鲁棒性?

为整数插入 |0 可确保值不会意外变为浮点数或超出 int32 的范围 - 这保证了按位运算对 Int 值的行为也将如预期。

理论上这可能是一种优化,因为 asm.js 将 |0 视为一个值也是 int 的暗示,但我认为在实践中这是一厢情愿的想法,它在普通的 JS 程序!