Haskell stack 如何使堆栈不通过-fdiagnostics color=始终;致GHC

Haskell stack 如何使堆栈不通过-fdiagnostics color=始终;致GHC,haskell-stack,Haskell Stack,我是一名Windows用户,最近使用了最新的堆栈(1.6.3)和最新的GHC(8.2.2)。在最新的GHC中,似乎有可能出现带有错误消息的颜色输出。颜色是通过ANSI转义序列产生的,windows不理解,所以它只是在真实文本之间显示一堆垃圾文本 [1 of 2] Compiling IOSystem.Haskeline ( app\IOSystem\Haskeline.hs, .stack-work\dist\5c8418a7\build\galbreak\galbreak-tmp\IOSyst

我是一名Windows用户,最近使用了最新的堆栈(1.6.3)和最新的GHC(8.2.2)。在最新的GHC中,似乎有可能出现带有错误消息的颜色输出。颜色是通过ANSI转义序列产生的,windows不理解,所以它只是在真实文本之间显示一堆垃圾文本

[1 of 2] Compiling IOSystem.Haskeline ( app\IOSystem\Haskeline.hs, .stack-work\dist\5c8418a7\build\galbreak\galbreak-tmp\IOSystem\Haskeline.o )

←[;1mapp\IOSystem\Haskeline.hs:28:13: ←[;1m←[31merror:←[0m←[0m←[;1m←[0m←[0m←[;1m
    * Couldn't match type `[Char]' with `Text'
      Expected type: InputT m (LineResult Text)
        Actual type: InputT m (Either LineFailure String)
    * In a stmt of a 'do' block: pure $ Right line
      In the expression:
        do modifyHistory $ addHistoryUnlessConsecutiveDupe line
           pure $ Right line
      In a case alternative:
          Just line
            -> do modifyHistory $ addHistoryUnlessConsecutiveDupe line
                  pure $ Right line←[0m←[0m
←[;1m←[34m   |←[0m←[0m
←[;1m←[34m28 |←[0m←[0m             ←[;1m←[31mpure $ Right line←[0m←[0m
←[;1m←[34m   |←[0m←[0m←[;1m←[31m             ^^^^^^^^^^^^^^^^^←[0m←[0m
←[0m←[0m←[0m
我尝试在project.cabal文件的库和可执行部分中放置
ghc选项:-fddiagnostics color=never
,但似乎没有效果。我使用详细的输出重新运行,堆栈似乎在我指定的ghc选项之后放置了自己的“-fdiagnostics color=always”命令

我只需要堆栈以某种方式而不是那样做

stack -v --cabal-verbose build
(大部分文字省略)

2018-01-14 18:54:24.009085:[信息]“C:\Users\Daniel\AppData\Local\Programs\stack\x86\u 64-windows\ghc-8.2.2\bin\ghc.EXE”“--make”“--no link”“--fbuilding cabal package”“--O”“--static”“--outputdir”“。堆栈工作\dist 5c8418a7\build\galbreak\galbreak tmp”“--odir”“。堆栈工作\dist 5c8418a7\build galbreak\galbreak\galbreak tmp”“--hidir“.stack work\dist\5c8418a7\build\galbreak\galbreak tmp”“-stubdir”“.stack work\dist\5c8418a7\galbreak tmp”“-i”“-i.stack-work\dist\galbreak tmp”“-iapp”“-i.stack-work\dist\5c8418a7\build\galbreak\autogen”“-i.stack-work\dist\5c8418a7\autogen\5c8418a7\build\galbreak\autogen”“-i.stack-work“-I.stack-work\dist\5c8418a7\build\global autogen”“-I.stack-work\dist\5c8418a7\build\galbreak\galbreak tmp”“-IC:\Users\Daniel\AppData\Local\Programs\stack\x86\U 64-windows\msys2-20150512\mingw64\include”“-optP include”“-optP.stack-work\dist\5c8418a7\build\galbreak\autogen\cabal\macros.h”“-隐藏所有包”“-Wmissing home模块”“-no user package db”“-package db”“C:\sr\snapshots\13cecb13\pkgdb”“-package db”“D:\dev\galaxy break.stack work\install\ccbce92a\pkgdb”“-package db”“-stack work\dist\5c8418a7\package.conf.inplace”“-package-id”“base-4.10.1.0”“-package-id”“text-1.2.2.2-9vtsh6v7u7u7u7u7hpagw2hdvpz”“-package-id”“haskeline-0.7.4.4.2-dgujcoccc2dc2aqr0”-XHaskell2010“IOSystem.Haskeline”“app\Main.hs”“-W”“-threaded”“-rtsopts”“-with-rtsopts=-N”“-O2”“-fdiagnostics color=never”“-ddump hi”“-ddump to file”“-fdiagnostics color=always”“

您可以使用
-color never

似乎您正在使用一个不寻常的终端配置。解决此问题的一个选项可能是向ansi终端提交一个PR,以使其为您的终端生成
False


目前无法在您的
config.yaml
中指定此项,但可能应该是-我已打开以跟踪添加它。不是高优先级的它是完全标准的windows命令行?只需
cmd.exe
。通常
cmd.exe
可用于香草或巧克力ansi终端变体,以及Strawberry变体应该在Win32上生成空字符串。(也就是说,传递给堆栈的
--color never
标志确实解决了这个问题)。一个用户跟踪到windows 10 fall creators update-中的一个更改。通过该更新,终端不再默认解释转义码,应用程序需要明确要求启用转义码。我没有使用windows 10,我使用的是windows 7。