GHC能否警告危险的非全函数的使用?

11

我在Haskell中匆忙编写了一些代码,并使用了一个危险的非总函数,即fromJust(我期望从输入中获得一个值)。我将在以后考虑我想要使用的错误处理风格。

GHC能否帮助我确保我已经摆脱了所有使用危险的非总函数(如fromJusthead,可能会崩溃),并在它们被使用时给出警告。


2
部分推断目前正在GHC开发人员的讨论中。同时,你最好隐藏那些函数的导入,并重新定义它们(以确保它们真正被隐藏):fromJust = ()应该可以解决问题。 - dfeuer
3
即使只是重新定义它们在一个模块中,你可以作为一种“打开警告”的方式导入未限定的模块。然后,如果你实际使用Prelude版本(除非你对它们进行了限定,比如 Prelude.fromJust),你会得到一个歧义错误提示。但对于你从其他限定的模块导入的部分函数并不起作用。 - Ben
1个回答

3

使用-fwarn-incomplete-patterns,GHC可以警告具有部分模式的定义(尽管不会警告包括不完整模式的值的用途)。此外,Neil Mitchell的catch尝试进行稍微详细的分析,以确定部分函数的安全和不安全的调用(虽然总体上这是一个无法判断的问题,因此它不总是正确的!)


这只是给我自己的一个提示。我想到了一个主意,每当我想在实用代码中使用非全匹配模式(并且我相信从语义上讲我已经穷尽了所有真实情况),我就不应该这样做。在某些情况下,可以通过将非全函数包装在类中,并在明显可以使用的地方定义它来更明确地表达这种假设(作为完全不安全和不可控制代码的解决方法)。例如:a ToJSONObject constraint,用于通用编码和解构数据。 - imz -- Ivan Zakharyaschev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接