Windows10+Stack+ATOMでのトラブル対応

ghc-modをインストール時などで、old-timeのビルドエラーが発生する場合

私の場合は、Windows10にHaskell Platform 8.0.1 を再インストールしたり、stack install ghc-modコマンドを実行したときに発生しました。

https://github.com/haskell/old-time/issues/3

Haskell Platformは、インストール後、システム環境変数PATHに以下を追加します。Haskell PlatformはmingwとmsysというLinuxのツール群も一緒にインストールされます。しかしmsys\usr\binはなぜかPATHに設定されません。old-timeはこれがあればビルドができます。

システム環境変数PATH

  • C:\Program Files\Haskell\bin
  • C:\Program Files\Haskell Platform\8.0.1\lib\extralibs\bin
  • C:\Program Files\Haskell Platform\8.0.1\bin
  • C:\Program Files\Haskell Platform\8.0.1\mingw\bin

また、Stackのインストールで、ユーザー環境変数PATHにも以下が設定されます。

  • C:\Users\xxxxxxx\AppData\Roaming\local\bin

システム環境変数PATHに以下を追加しましょう。

C:\Program Files\Haskell Platform\8.0.1\msys\usr\bin

ATOMのghc-modでエラーが出るときの対応方法

ATOMエディターのhaskell-ghc-modパッケージは、エラーのスタック情報を表示するだけなので凄くわかりづらいです。それで、このエラーはhaskell-ghc-modの不具合ではなく、ghc-modがエラーを出している場合があります。つまりATOM側の問題ではないです。

そのため、非常に面倒ですが、PowerShellでghc-modコマンドを実行すると解決できる場合があります。

ghc-modで、hGetContents: invalid argument (invalid byte sequence)が発生する

これは何も設定せずにstackを使った場合、.hsファイルのコメントに日本語があった場合でも発生します。

ghc-mod: C:\Users\xxxxx\workspace_haskell\hw\src\Semigroup.hs: hGetContents: invalid argument (invalid byte sequence)

まさかデフォルトでUTF-8のhsファイルに日本語のコメントを書けないとは思わなかったので、最初はATOMエディターのhaskell-ghc-modのバグと思ってました。

HSpecテストを試してみたら、ghc-modでエラーが発生した。

StackでHSpecを使う入門サイトなどを調べていると、Spec.hsに以下を記述すれば自動でSpecファイルを検知してくれると書かれています。

これだけだと、ATOMエディターで上記画像のような赤いエラーメッセージが表示されました。対応としては、hspec-discoverをstack経由でインストールします。