在重构大型项目时,我喜欢通过引入所需的更改让类型检查器为我做的工作,然后跟踪生成的类型错误。
但是,由于相关的类型错误在 Failed, modules loaded:
输出之前显示在GHCi 中,因此具有足够模块的项目可能会导致相关错误滚动到顶部 - 即使是慷慨地 - 大小的终端。
是否有一个标志或选项让GHCi抑制此输出,或者至少重新排序以使错误出现在最后?
答案 0 :(得分:1)
您可以尝试使用GHC编译文件,而不是在GHCi中加载它们。这样,它不会尝试加载文件,只会编译它们,因此只显示编译错误和警告。
所以,而不是:
$ ghci -Wall -Werror
GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :l foo.hs
......就这样做:
$ ghc -Wall -Werror foo.hs
顺便说一句,如果您在UNIX / Linux中使用终端,则可以更轻松地更改字体大小,水平调整终端大小(在Windows上默认运行终端时无法完成),增加向后滚动,否则增加你可以看到的行数:)
答案 1 :(得分:1)
我非常绝望,我在代码中挖了一遍:
modulesLoadedMsg :: SuccessFlag -> [GHC.ModSummary] -> InputT GHCi ()
modulesLoadedMsg ok mods = do
dflags <- getDynFlags
unqual <- GHC.getPrintUnqual
let mod_name mod = do
is_interpreted <- GHC.isModuleInterpreted mod
return $ if is_interpreted
then ppr (GHC.ms_mod mod)
else ppr (GHC.ms_mod mod)
<> text " ("
<> text (normalise $ msObjFilePath mod)
<> text ")" -- fix #9887
mod_names <- mapM mod_name mods
let mod_commas
| null mods = text "none."
| otherwise = hsep (punctuate comma mod_names) <> text "."
status = case ok of
Failed -> text "Failed"
Succeeded -> text "Ok"
msg = status <> text ", modules loaded:" <+> mod_commas
when (verbosity dflags > 0) $
liftIO $ putStrLn $ showSDocForUser dflags unqual msg
看起来0的详细程度将其关闭。您可以设置:
$ ghci -v0
或与cabal:
$ cabal repl --ghc-options="-v0"
或堆叠:
$ stack repl --ghci-options="-v0"
答案 2 :(得分:0)
sed
解决方法是一个好主意,除了sed
也接收Ctrl + c,打破了管道。这是一个解决该问题的变体:
cabal new-repl cabal-install | (trap '' SIGINT; sed -e '/Failed, modules loaded.*/d')
(用你最喜欢的GHCi命令替换cabal new-repl
。)