Haskell IDE EngineをWindows 10にインストールする際に、エラーメッセージも出さずにコンパイルが止まる事象が起きてドハマリしたので日本語文献を残しておきます。
HIEに限らず、terminateProcess: permission denied (Permission denied)
が出て困っている人のお役に立てると思います。
環境
- Windows 10 + cmd.exe (PowerShellでも出るとのこと)
- ghc-8.6.5
- stack-2.1.3
- hie-0.12.0.0
起きたこと
> git clone https://github.com/haskell/haskell-ide-engine --recurse-submodules
> cd haskell-ide-engine
> stack ./install.hs hie-8.6.5
(中略)
[4 of 9] Compiling Network.Socket
(中略)
Network\Socket.hsc:1844:1: warning: [-Wunsupported-calling-conventions]
(ここでフリーズして先に進まない)
後述するように、実はここでterminateProcess: permission denied (Permission denied)
が出て停止している。
根本原因
cmd.exeが使っている文字コードがUTF-8ではない。
対策
> chcp 65001
を実行して文字コードをUTF-8に変更してからstack ./install.hs hie-8.6.5
を実行する。
付帯情報
ちなみに、Registering library for ...
に恐ろしく時間がかかって現実的な時間で終わらない事象も起きていたが、chcp 65001
後には起きなくなった。
続き
原因詳細
最も詳しくは、苦闘の跡を参照。
原因となっているnetwork-2.8.0.1のみのインストールを試みると、
> stack install network-2.8.0.1
(中略)
[4 of 9] Compiling Network.Socket
(中略)
Network\Socket.hsc:1844:1: warning: [-Wunsupported-calling-conventions]
terminateProcess: permission denied (Permission denied)
と出る。invalid argument (invalid character)
が出てくれれば文字コードが原因であることにすぐたどり着いてchcp 65001
を実行して解決できたのだが、そうはならなかったんだ、ロック。
invalid argument (invalid character)
ではなくpermission denied (Permission denied)
が出た理由は、stack-2.1.3はprocess-1.6.3.0に依存しているが、process-1.6.3.0にはWindowsの特定のエラーを無視するバグがあるためのようだ。process-1.6.5.0で修正されたようなので、stackのバージョンが上がっていけばこの記事の必要性はなくなるだろう。stackのissueにも本事象とその対策を書き込んでおいた。
先行文献