Bercriber's Blog

WindowsTerminal/powershellでのstack/GHCの文字化け

  • <stderr>: commitAndReleaseBuffer: invalid argument (invalid character)で動かないぞ
  • 文字コードが悪いらしいぞ
  • chcp 65001でutf8にするぞ
  • 動くようになったけど文字化けするぞ
  • powershellでエンコーディングの設定するぞ
  • 直ったぞ

という話。


app\Main.hs:36:27: error:
    <stderr>: commitAndReleaseBuffer: invalid argument (invalid character)

とかなんとか言われて動かない場合にターミナルの文字コードをUTF-8に変えようと、

chcp 65001

とするも、

app\Main.hs:27:8: error:
    窶「 No instance for (Control.Monad.Reader.Class.MonadReader GB IO)
        arising from a use of 窶・iew窶・[0m
    窶「 In a stmt of a 'do' block: m <- view mem
      In the expression:
        do m <- view mem
           pure 10
      In an equation for 窶腕eadMem窶・
          readMem
            = do m <- view mem
                 pure 10
   |
27 |   m <- view mem
   |        ^^^^^^^^

みたいな感じで文字化けする場合、

[System.Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
[System.Console]::InputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
$env:LESSCHARSET = "utf-8"

とやると、

app\Main.hs:27:8: error:
    • No instance for (Control.Monad.Reader.Class.MonadReader GB IO)
        arising from a use of ‘view’
    • In a stmt of a 'do' block: m <- view mem
      In the expression:
        do m <- view mem
           pure 10
      In an equation for ‘readMem’:
          readMem
            = do m <- view mem
                 pure 10
   |
27 |   m <- view mem
   |        ^^^^^^^^

みたいな感じになっていい感じ。