函数签名明确指出它应该返回一个布尔值,那么为什么函数返回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
答案 0 :(得分:7)
这是我去年提交的compiler bug,现在已经修复。
当一个参数为/=
时,它仅影响0
运算符:将(modBy 100 year /= 0)
替换为(not (modBy 100 year == 0))
将解决此问题。
该错误已在源存储库中修复,但我不知道何时发布该修复程序。