Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell GHC能否就危险的非总体功能的使用发出警告?_Haskell_Error Handling_Crash_Ghc_Compiler Warnings - Fatal编程技术网

Haskell GHC能否就危险的非总体功能的使用发出警告?

Haskell GHC能否就危险的非总体功能的使用发出警告?,haskell,error-handling,crash,ghc,compiler-warnings,Haskell,Error Handling,Crash,Ghc,Compiler Warnings,我一直在用Haskell快速编写一些代码,并使用了一个危险的非total函数,即fromJust(我希望输入值)。稍后我会考虑我想要使用哪种错误处理风格 GHC能否帮助我确保我已经摆脱了所有危险的非完全函数的使用(例如可能崩溃的fromJust或head),在它们所在的位置向我发出警告。GHC可以对带有-fwarn不完整模式的部分模式的定义发出警告(虽然没有警告包含不完整模式的值的使用)。此外,Neil Mitchell尝试进行更详细的分析,以确定部分函数的安全和不安全调用。(当然,这通常是一个

我一直在用Haskell快速编写一些代码,并使用了一个危险的非total函数,即
fromJust
(我希望输入值)。稍后我会考虑我想要使用哪种错误处理风格


GHC能否帮助我确保我已经摆脱了所有危险的非完全函数的使用(例如可能崩溃的
fromJust
head
),在它们所在的位置向我发出警告。

GHC可以对带有
-fwarn不完整模式的部分模式的定义发出警告
(虽然没有警告包含不完整模式的值的使用)。此外,Neil Mitchell尝试进行更详细的分析,以确定部分函数的安全和不安全调用。(当然,这通常是一个无法确定的问题,因此它并不总是正确的!)

GHC开发人员目前正在讨论偏好推断。与此同时,最好的办法可能是隐藏这些函数的导入,并(确保它们确实隐藏)自己重新定义它们:
fromJust=()
应该可以做到这一点。甚至只需在模块中重新定义它们,将其作为“打开警告”的一种方式导入。然后,您将在实际使用Prelude版本的任何位置收到一个模糊错误(除非您在
Prelude.fromJust
中进行了限定)。但这对您从其他模块的合格导入中使用的部分函数没有帮助。请注意。我的想法是,每当我想在实际有用的代码中使用非完全模式匹配时(我相信从语义上讲,我会用尽所有实际情况),我不应该这样做。在某些情况下,至少可以通过将非total函数包装在类中,并在明显可以确定的位置附近定义它(作为完全不安全和不可控代码的变通方法)。例如:对于一般编码和解构的数据。