Windows10でHaskell開発環境構築

# 前提

## 背景
Haskellの環境構築はHaskell IDE Engine (HIE)で楽になったらしいが、ネットで見つかる情報はLinux系ばかり。
今回、Windowsで構築しようとしたが、いくつか躓くところがあったため、構築方法をまとめておく。

### 追記
よくよく見返してみると、リンクを張っていた @yutasth さんのところに大概の情報は載っていた。いくつかのページに分割されていたので気づかず。
が、そちらにはない情報がこちらにあるのも確かで、またやり方だけ手っ取り早く知りたい場合のために残しておく。
（もともと重複記事を投稿する意図は毛頭なく）

## 環境
* Windows10 Home
* git (v2.24.1.2)
* stack (v2.1.3)
* GHC (v8.6.5)
* HIE (v1.0.0.0, Git revision 704ed3c982ce350f6aafbf4854e91da1e2a1d1c2)
* VScode（このソフト特有の設定はないので、ほかのエディタでも同様のはず）

# stack
## 公式情報
[The Haskell Tool Stack - Install/Upgrade / Windows](https://docs.haskellstack.org/en/stable/install_and_upgrade/#windows)

## セットアップ
インストール自体は、windows用のインストーラが用意されているのでそれを実行するだけ。
その後、管理者権限のcmdで`stack setup`を実行。ただし、事前にウイルス対策ソフトは一時的に無効化しておくのが無難。


`local-bin`は、Userフォルダの`\AppData\Roaming\local\bin`になる。（たぶん変えないほうが無難）
`STACK_ROOT`のPATH設定は変更可能。（いろいろファイルが増えて容量を食うらしいのでDドライブに移すなど）

参考：[カレー場別腹 - Stack (Haskell) を Windows で使う](https://fthaggua.blogspot.com/2018/11/stack-haskell-windows.html)




## 注意点
`stack setup`を管理者権限のcmdで実行しても、`Permission Denied`エラーが出て困った。
ウイルス対策ソフトが悪さをする場合があるらしく、これを無効化することで解決。

参考：[GitHub - Permission denied when run stack setup on Windows 10 #1917](https://github.com/commercialhaskell/stack/issues/1917)


# Haskell IDE Engine (HIE)
## 公式情報
[GitHub - Haskell IDE Engine (HIE) / Installation](https://github.com/haskell/haskell-ide-engine#installation)


## セットアップ
以下のコマンドを管理者権限のcmdで実行。場所はどこでもokなはずだが、local-binにしておいた。
buildに数十分かかるが、我慢強く待つしかない。

```bash
git clone https://github.com/haskell/haskell-ide-engine --recurse-submodules
cd haskell-ide-engine
chcp 65001
stack ./install.hs build
```

## 注意点
こちらも`Permission Denied`のエラーが発生。
ただ、ウイルス対策ソフトを無効化してもだめだった。
途中に挟んだ`chcp 65001`コマンドで解決。

参考：[Qiita - Haskell IDE Engineのインストールに苦労した (Windows 10)](https://qiita.com/yutasth/items/9df6e2c3937edad24aee)

 
# エディタの拡張機能（VScode：Haskell Language Server）
## 公式
[VisualStudio Marketplace - Haskell Language Server Client](https://marketplace.visualstudio.com/items?itemName=alanz.vscode-hie-server)

## セットアップ
VScodeのExtensionから普通にInstall。

hie.exeのパスだけ手動で設定する必要がある。

```
"languageServerHaskell.hieExecutablePath": "(local-binのパス)/hie.exe"
```

## 注意点
### Liquid Haskell
```
"languageServerHaskell.liquidOn": true,
```

にしてみたが、思ったように動かず。
手動でLiquid HaskellのInstallが必要（後述）。

### stty.exe
`OUTPUT`のところで`HIE`を選んでみるとこのエラーが出ていた。

```
'stty' is not recognized as an internal or external command
```

`stty.exe`をPATHが通っているフォルダにコピーすることで解決した。
具体的には、stackがインストールされたフォルダにあるmsys2の`\usr\bin`から、local-binにコピー。


参考：[GitHub - 'stty' is not recognized #1428](https://github.com/haskell/haskell-ide-engine/issues/1428)



# Liquid Haskell
## 公式
[GitHub - LiquidHaskell](https://github.com/ucsd-progsys/liquidhaskell)

## セットアップ
### Step 1: Install SMT Solver
SMT Solverが必要だが、HIEのサイトによるとZ3がおすすめらしい。
[GitHub - Z3](https://github.com/Z3Prover/z3)

[ここから](https://github.com/Z3Prover/z3/releases)binary（v4.8.7）をdownloadして、z3.exeをlocal-binに置いた。（liquid haskellと同じPATHに置く必要があるが、liquid haskellは自動でlocal-binに置かれる）


### Step 2: Install liquid from Source
[GitHub - Install LiquidHaskell](https://github.com/ucsd-progsys/liquidhaskell/blob/develop/INSTALL.md)

以下のコマンドを実行。（gitがsshだとうまくいかなかったので、httpsに変更。）

```bash
git clone --recursive https://github.com/ucsd-progsys/liquidhaskell.git 
cd liquidhaskell
stack install
```