Elm 返回整数而不是 Bool,编译器错误?

Elm returning integer instead of Bool, compiler bug?

函数签名明确指出它应该 return 一个 Bool 那么为什么函数 returning 96?更重要的是,编译器认为 96 实际上是一个 Bool。这是一个错误吗?

> isLeapYear year =\
|       (modBy 4 year == 0) && (modBy 100 year /= 0) || (modBy 400 year == 0)
<function> : Int -> Bool

> isLeapYear 1996
96 : Bool

虽然它有时似乎有效:

> isLeapYear 2000
True : Bool
> isLeapYear 1800
False : Bool

这是我去年提交的 compiler bug,现在已经修复。

当一个参数为 0 时,它仅影响 /= 运算符:将 (modBy 100 year /= 0) 替换为 (not (modBy 100 year == 0)) 将解决该问题。

该bug已在源代码库中修复,但不知何时发布修复。