VSCodeにHIEいれてみた(Windows10)

Haskellを覚えようと思い、環境を作っていた際

HIEいいよ！って話を見たので、入れてみること…
Windows環境での構築があまり書かれていなかったことと、詰まった部分があったので
共有がてら

**08/29 コメントを頂いた手順で、作業を書き直しました**




## 作業手順

リポジトリはこちら
> https://github.com/alanz/vscode-hie-server


このドキュメントに従ってインストール。
>https://github.com/haskell/haskell-ide-engine#installation-with-stack


### 1. stackでmakeをできるようにする

makeが使えないため、まずはstackでmakeをできるように

```
PS D:\code\hie> stack exec pacman -- -S make
resolving dependencies...
looking for conflicting packages...

Packages (1) make-4.2.1-1

Total Download Size:   0.41 MiB
Total Installed Size:  1.22 MiB

:: Proceed with installation? [Y/n]
:: Retrieving packages...
 make-4.2.1-1-x86_64                            414.8 KiB   646K/s 00:01 [#######################################] 100%
(1/1) checking keys in keyring                                           [#######################################] 100%
(1/1) checking package integrity                                         [#######################################] 100%
(1/1) loading package files                                              [#######################################] 100%
(1/1) checking for file conflicts                                        [#######################################] 100%
(1/1) checking available disk space                                      [#######################################] 100%
:: Processing package changes...
(1/1) installing make                                                    [#######################################] 100%
```

### 2. make hie-x.x.x

ghcのバージョンを指定してインストール

```
PS D:\code\hie> stack exec make -- hie-8.4.3
git submodule update --init
stack --stack-yaml=stack-8.4.3.yaml install 
・
・                                   \
```

makeが完了すると

```text:%APPDATA%\local\bin
　├ hie.exe
　├ hie-8.4.3.exe
　├ hie-8.4.exe
　├ hie-wrapper.exe
```
とバイナリが配置される
**%APPDATA%\local\binにはPATHが通っているはずなので、これで使えるようになるハズ**


### 3. VSCodeにhie-serverの拡張機能をインストール

![hie.PNG](https://qiita-image-store.s3.amazonaws.com/0/150914/0c8ae152-8135-b890-d1b7-da21f8b5dc23.png)


**コンパイルしたバイナリはパスが通っていればいいので、手動で起動する必要はないようです**

## 発生している問題

+ ~~GHCのバージョンが違うプロジェクトで警告が出まくる~~
+ 保存時に整形を有効にしていたところ、保存するたびに空行が増える怪奇現象が！
+ さらにコードをコピペしようとすると消えるという謎現象も発生中…

![line.PNG](https://qiita-image-store.s3.amazonaws.com/0/150914/94eaa140-1c72-802b-ef13-dec5c7b4c3d6.png)




## 試行錯誤したきろく

### GHCのインストールに失敗？

```
Folders: 520
Files: 11779
Size:       2080675659
Compressed: 2090035200
C:\Users\xxx\AppData\Local\Programs\stack\x86_64-windows\ghc-8.4.3-tmp7344\ghc-8.4.3\: renamePath:MoveFileEx "C:\\Users\\xxx\\AppData\\Local\\Programs\\stack\\x86_64-windows\\ghc-8.4.3-tmp7344\\ghc-8.4.3\\" "C:\\Users\\xxx\\AppData\\Local\\Programs\\stack\\x86_64-windows\\ghc-8.4.3\\": permission denied (アクセスが拒否されました。)
```
…とのエラーがでてインストールに失敗

ghcの8.4.3のインストールに失敗しているようなので
いろいろ調べてみたところ

https://github.com/commercialhaskell/stack/issues/1917

> YOU!手動で解凍してinstalledファイル作っちゃいなYO!

との書き込みがあったので

C:\Users\xxx\AppData\Local\Programs\stack\x86_64-windows

```text:
　├ ghc-8.4.3/
　├ ghc-8.4.3.installed
```
という形にファイルを手動で配置し、再度install

```
Copied executables to C:\Users\xxx\AppData\Roaming\local\bin:
- hie.exe
- hie-wrapper.exe
```
local/binにパスが通っていれば、VScodeに
https://marketplace.visualstudio.com/items?itemName=alanz.vscode-hie-server
をインストールすることで有効に

### make buildに失敗

**```stack exec make -- build-all```でも同様のエラーは発生**

```
    ghc.EXE: internal error: mkPath failed converting char* to wchar_t*
        (GHC version 8.2.1 for x86_64_unknown_mingw32)
        Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
```
インストールログを見たところ

+ make buildで8.2.2がインストールされようとしている
+ ライブラリのfclabels-2.0.3.2でこのエラーを吐き、エラー終了
+ fclabels-2.0.3.3ではコンパイルが通っている

ということで、先述のようにGHCのバージョンを明示的に指定し、回避。