我正在使用 Leksah IDE 0.15.0.1,在编译示例包时收到警告:“名称...在源文件中找到但不在范围内”。
这个警告是什么意思?
我用谷歌搜索了这段文字,但发现它很有启发性。
问题可能出在线条之内
testMain = do
allPass <- $quickCheckAll
unless allPass exitFailure
根据QuickCheck 文档,为了利用 quickCheckAll,执行的 IO 动作$quickCheckAll
必须return []
在其定义之前。
要使用 quickCheckAll,请在您的模块中添加一个定义,如下所示
return [] runTests = $quickCheckAll
然后执行 runTests。
所以将它应用到你的 testMain 定义中,它最终会是
return []
testMain = do
allPass <- $quickCheckAll
unless allPass exitFailure
该文档还提供了对这种需求的解释:
注意:
return []
上面例子中的怪异在 GHC 7.8 及更高版本上是需要的;没有它,quickCheckAll 将无法找到任何属性。出于好奇,这return []
是一个模板 Haskell 拼接,它使 GHC 在程序中的该点插入空的声明列表;GHCreturn []
在模块的其余部分开始之前对所有内容进行类型检查,这意味着稍后对 quickCheckAll 的调用可以看到在return []
. 哎呀!