函数签名明确指出,它应该返回一个布尔所以为什么函数返回96?更重要的是,编译器认为,96实际上是一个布尔值。这是一个错误?
> 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已被固定在源代码库,但我不知道什么时候该修补程序将被释放。