LoginSignup
25
14

More than 3 years have passed since last update.

Haskell IDE Engineのインストールに苦労した (Windows 10)

Last updated at Posted at 2019-09-29

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にも本事象とその対策を書き込んでおいた。

先行文献

25
14
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
14