使用 GHCi 时,我想知道从提示符(重新)加载时如何使用
-Wall
选项。
例如Haskell 编程技巧的 3.3 节 带守卫的示例如下:
-- Bad implementation:
fac :: Integer -> Integer
fac n | n == 0 = 1
| n /= 0 = n * fac (n-1)
-- Slightly improved implementation:
fac :: Integer -> Integer
fac n | n == 0 = 1
| otherwise = n * fac (n-1)
它说“第一个问题是编译器几乎不可能检查这样的保护是否详尽,因为保护条件可能任意复杂(如果您使用 -Wall 选项,GHC 会警告您)。”
我知道我可以从命令行输入
ghci -Wall some_file.hs
,但一旦进入提示符,我不确定如果我想重新加载如何检查警告。
尝试谷歌后我似乎找不到答案!
提前致谢!
在 ghci 中,输入
:set -Wall
如果你想关闭所有警告,你可以这样做
:set -w
(注意小写字母
w
。大写字母将打开正常警告。)
在用户指南中,它说我们可以在命令提示符下使用任何ghc命令行选项,只要它们被列为动态即可,并且我们可以从标志参考看到所有警告设置都是动态的。
这是一个示例会话,使用上面的“糟糕的实现”:
Prelude> :l temp.hs
[1 of 1] Compiling Main ( temp.hs, interpreted )
Ok, modules loaded: Main.
(0.11 secs, 6443184 bytes)
*Main> :set -Wall
*Main> :l temp.hs
[1 of 1] Compiling Main ( temp.hs, interpreted )
temp.hs:3:1:
Warning: Pattern match(es) are non-exhaustive
In an equation for `fac': Patterns not matched: _
Ok, modules loaded: Main.
(0.14 secs, 6442800 bytes)