我刚观察到,如果不是->
,而是在函数的类型签名定义中编写=>
,它不会导致编译时错误。示例代码:
mysum :: Num a => [a] => a -- Notice => after the list [a]
mysum [] = 0
mysum (x:xs) = x + mysum xs
为什么会这样?有没有办法避免这种情况?
使用的编译器:GHC 7.6.2
更新:ideone成功编译。
答案 0 :(得分:11)
这是GHC 7.6.2中的错误。您应该在最新的编译器中尝试它并且如果它仍然没有在那里给出错误,那么您应该提交错误报告。
实际上,我认为这个错误已经known and fixed in GHC 7.8。
答案 1 :(得分:1)
这似乎在7.8.2
中得到修复foo.hs:1:19:
Expected a constraint, but ‘[a]’ has kind ‘*’
In the type signature for ‘mysum’: mysum :: Num a => [a] => a
我认为这只是一个特定于7.6.x的错误。