Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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後には起きなくなった。

続き

https://qiita.com/yutasth/items/03e2cc6148f2406d0d8a

原因詳細

最も詳しくは、苦闘の跡を参照。
原因となっている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にも本事象とその対策を書き込んでおいた。

先行文献

https://qiita.com/oze/items/6313604c37844c1f2dcd

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away