4

我正在使用 Leksah IDE 0.15.0.1,在编译示例包时收到警告:“名称...在源文件中找到但不在范围内”。

这个警告是什么意思?

我用谷歌搜索了这段文字,但发现它很有启发性。

在此处输入图像描述

4

1 回答 1

0

问题可能出在线条之内

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 []. 哎呀!

于 2022-01-15T15:01:57.837 回答