2014-09-27 70 views
4

我已经定义的别名功能execState为什么我的错误注释此类签名不会破坏事物?

myCleverName = execState 

GHC警告顶级没有注释类型签名绑定,所以我会写:

myCleverName :: State s a => s -> s 

显而易见的大多数你是那个“胖箭头”=>本应该是一个普通的骨感人->。但我只注意到今天,但包含别名的模块和使用别名的代码都已经编译好几个星期了,而不是警告我使用了错误的语法。这是为什么?

谢谢!

+0

我只是自己试了一下,并得到了以下错误 - “预期的约束,但'状态s'有种'*'在'myCleverName'的类型签名中:myCleverName :: State sa => s - > s ”。你确定不好的代码正在编译吗?你可以从程序中删除其他东西,直到你有最小的线条,仍然没有错误? – jamshidh 2014-09-27 20:25:25

+0

有关的东西:http://stackoverflow.com/questions/23989573/replacing-in-place-of-in-function-type-signature – Sibi 2014-09-27 21:39:16

回答

8

GHC 7.6.3有一个允许这样的事情的错误,但它在GHC 7.8中是固定的(或应该是)。在内部,类型类约束被表示为隐式函数参数,我认为这就是为什么7.6.3被混淆了。他们仍然以这种方式表现出来,但理智的检查得到了改善。

+0

Got :) :)确实,7.6.3是我所拥有的 – 2014-09-27 21:49:03

相关问题