【问题标题】:Why did my mistake annotating this type signature not break things?为什么我注释这种类型签名的错误没有破坏事情?
【发布时间】:2014-09-28 04:25:12
【问题描述】:

我为函数execState定义了一个别名:

myCleverName = execState

GHC 就没有带注释类型签名的顶级绑定发出警告,所以我写了:

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

对你们大多数人来说显而易见的是,“胖箭头”=> 应该只是普通的瘦箭头->。但我今天才注意到,包含别名的模块和使用别名的代码已经编译好几个星期了,并没有警告我使用了错误的语法。这是为什么呢?

谢谢!

【问题讨论】:

  • 我自己尝试了一下,得到了以下错误-" 预期有一个约束,但 'State s a' 有一种 '*' 在 'myCleverName' 的类型签名中:myCleverName :: State s a = > 小号 -> 小号”。您确定错误的代码正在编译吗?你能从程序中删除其他东西,直到你有最少的行并且仍然没有错误吗?

标签: haskell syntax types


【解决方案1】:

GHC 7.6.3 有一个错误,允许这样的事情,但它在 GHC 7.8 中已修复(或应该是)。在内部,类型类约束表示为隐式函数参数,我认为这就是 7.6.3 混淆的原因。它们仍然以这种方式表示,但完整性检查已得到改进。

【讨论】:

  • Gotcha :) 确实,7.6.3 是我所拥有的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
相关资源
最近更新 更多