榆树返回整数而不是布尔,编译器错误?

时间:2019-02-05 10:26:58

标签: boolean elm compiler-bug

函数签名明确指出它应该返回一个布尔值,那么为什么函数返回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

1 个答案:

答案 0 :(得分:7)

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

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

该错误已在源存储库中修复,但我不知道何时发布该修复程序。