Ari*_*ham 7 haskell cabal typed-holes
我经常使用类型孔来定义我知道其接口并打算稍后实现的函数。当我运行时cabal build
,它会在第一个模块遇到类型漏洞后停止,隐藏其他模块中可能存在的类型错误。
有没有什么方法可以对项目进行类型检查,并且只有在整个项目构建并进行类型检查后才会因类型错误而失败?
@chi 非常礼貌地告诉我要阅读文档。似乎有两种配置类型孔的方法:
默认行为,使键入的漏洞成为编译时错误。这会导致编译在第一个模块遇到类型化漏洞后停止,从而隐藏其他模块中的类型错误和类型化漏洞。
-fdefer-typed-holes
它将在遇到键入的漏洞时发出警告,并继续编译项目的其余部分。如果没有遇到其他错误,则会构建二进制文件,并将类型化的漏洞降级为运行时错误。一方面,所有漏洞都显示在编译器输出中,但另一方面,这些漏洞不太理想,无法让构建成功。
然而,有一个稍微有点老套的标志组合可以获得(几乎)所需的行为:
-fdefer-typed-holes -Werror=typed-holes
Run Code Online (Sandbox Code Playgroud)
这会检查项目中的每个模块,并针对任何(非孔)类型错误停止。如果给定模块中没有任何类型,则构建会打印出项目中所有类型化的漏洞,并继续对项目的其余部分进行类型检查。仅当未遇到类型错误或类型漏洞时,构建才会成功。
如果我们能够在同一输出中得到类型错误和类型漏洞,那就更好了,但你不可能拥有一切。