【发布时间】:2015-03-23 12:54:33
【问题描述】:
我正在构建一个模块,每次我编写一个函数时,它都会调用十几个尚不存在的其他函数。显然它们最终会存在,但如果能够在我写完代码之前进行语法检查,那就太好了。
我可以使用一些标志组合来使 GHC 发出警告而不是“名称 foo 不在范围内”的错误吗?
(实际上,如果 GHC 可以为不存在的名称选择一个类型签名,并确认程序仍然可以进行类型检查,那就太好了。这 几乎 “类型孔”功能可以 - 但要使用它,您仍然必须手动定义所有标识符。)
【问题讨论】:
-
我敢说,为此类功能写出签名和
= undefined是一种很好的做法......但是,好问题,我有时也想要这样的想法,因为我不是确保值得尝试让它们进行类型检查,因为它甚至可能无法解析。 -
另一种检查语法是否正确的方法是使用
pointfree之类的东西并检查“解析错误:EOF”,但这使得除了单行之外的任何事情都很难做表达。 -
@leftaroundabout 就我而言,我正在构建一个解析器。这意味着有 数百个 不存在的标识符,所有这些都应该是解析器。当我最终完成所有作品的编写时,它应该可以工作。但是在我结束之前发现语法错误会很好......
-
我会关注@leftaroundabout 的类型签名+未定义的方法。我一直在使用它。如果您愿意,您甚至可以跳过类型签名,让变量完全多态,但是您可以添加的类型签名越多,您的类型错误消息可能就越好。
-
@leftaroundabout 我假设 OP 的真正意思是“语法和类型检查”。如果您真的只需要语法检查,则无需定义所有内容 - 超出范围错误意味着模块必须首先正确解析。