highlight

2018年11月16日金曜日

Stack (Haskell) を Windows で使う

stack を windows へインストールした。VSCode も一緒に。

環境変数 STACK_ROOT

stack はインストーラでインストールしたプログラムファイル以外に、ダウンロードしたファイルや設定ファイル等を保持するためのディレクトリを必要とする。 このディレクトリは使えば使うほど大きくなる傾向にあるので、インストーラがデフォルトで設定する 'c:\sr' だと(私の場合このドライヴは容量の少ない SSD ドライヴなので)ドライヴ容量の逼迫が目に見えている。この為、別の PATH を指定したいという欲求があるがどうすればいいだろうか。

このディレクトリの PATH は環境変数 STACK_ROOT の値が参照されるので、インストーラ実行前に予めシステム環境変数として設定しておくとよい。そのうえで、インストーラの実行中に環境変数 STACK_ROOT を設定するかどうか、チェックボックスを off にする。インストール直後は、このディレクトリがまだ空なので、インストーラで設定させた上で、後から変更してもいいし(多分)、それは好みで。

stack setup

まずプロジェクトを作成する前に適当なディレクトリで stack setup を実行した。これを行うとデフォルトでは %APPDATA%\local\bin に ghc などがインストールされてしまった。このディレクトリは設定用の yaml ファイルに local-bin-path: <ディレクトリ> という記述をしておけば変更できるようなので、最初の stack setup を行う前に以下のような stack.yaml ファイルをカレントディレクトリに作っておくと良いのかもしれない。(が、試していない)

packages: []
resolver: lts-12.16
local-bin-path: d:\sr\local\bin # 好きなディレクトリに変更するといい

既にデフォルトのディレクトリに ghc 等コピーされてしまっていたら、所望のディレクトリ作成して単純にコピー(または移動)すればリカバリできる。そしてこのディレクトリには PATH を通しておいた方がいいと思うが、これも好みによる。

Hello, world

適当に stack new Hello などとして Hello プロジェクトを作成し、Lib/Lib.hs ができていたら、

someFunc :: IO ()
someFunc = putStrLn "Hello, world!"

と変更して(動作確認なので変更しなくても差し支えは無い)、stack build 実行して stack exec Hello-exe 等、さらっと動作確認しておく。 余談、問題があれば実際のプロジェクトをビルドする際に顕在化するので、その時に解決できるのであればこの動作確認自体不要だとは思う。 だがどうせなら、適当なライブラリ(Parsec とかでいいと思う)を import するコードを書いて、実際にライブラリをダウンロードできるかどうかを確認するところまでやったほうがいい。

hie-ide-engine

IDE 的な開発環境を欲するならば、これをインストールすることになるが、これは ghc のバージョン毎にプログラムができてしまうようなので、 現在インストールした ghc のバージョンに合うものだけをビルドする場合には、コマンドラインオプションを付け足す必要があった。デフォルトと stack.yaml の resolver 指定は ghc-8.4.3 のときのもののようなので、ghc-8.4.4 を利用するつもりの場合には、--stack-yaml=stack-8.4.4.yaml オプションを片っ端から付け足す必要がある様だ。stack LTS 12.16 がデフォルトの方が自然なバージョニングの様にも思えるが、なにか経緯があるのかもしれず、深追いしない。 導入の流れとしては普通にソースコードダウンロード -> ビルド -> インストールするのと、ツールチップでドキュメント表示するための Hoogle データベースを作るという事になる。

git clone https://github.com/haskell/haskell-ide-engine --recursive
cd haskell-ide-engine
stack --stack-yaml=stack-8.4.4.yaml intall cabal-install
cabal update
stack --stack-yaml=stack-8.4.4.yaml intall
stack --stack-yaml=stack-8.4.4.yaml intall hoogle
hoogle generate

Visual Studio Code

通称 VSCode。このエディタのインストール手順そのものは流石に割愛。このエディタで IDE っぽく haskell のコードを書きたい場合、拡張機能で、Haskell Language Server をインストールするといいらしい。この拡張は hie-ide-engine がインストール済みである事が前提になっている。インストールするとこの拡張機能の設定ができるようになるので、

Language Server Haskell: Use Cutom Hie Wrapper
On
Language Server Haskell: Use Cutom Hie Wrapper Path
<hie-ide-engine をインストールしたところにある hie-wrapper.exe コマンドへの絶対パス>

を指定すると良い。拡張機能設定の検索欄に、languageserverhaskell を入れるとこの拡張機能の設定項目のみにフィルタされるので、項目を見つけるのが大儀なら使うといい。

0 件のコメント:

コメントを投稿

スパムフィルタが機能しないようなので、コメント不可にしました。

注: コメントを投稿できるのは、このブログのメンバーだけです。