Haskell 環境
Emacsでhaskell-modeを準備する際にinteroが非常に便利だったのだけど
NixOSでは躓くこともしばしばあったためメモ
- NixOS
- Stack (--nix)
- hlint
- ghc-mod
- hoogle
- Emacs
- intero
- Stack (--nix)
Stack (--nix)
nixpkgsでインストールする
$ nix-env -i stack
stackのsetupを行う
$ stack --nix setup
interoやその他のツール(ghc-mod,hlint,hoogle)で
依存してるライブラリを ~/.stack/config.yaml に追記する
(NixOSでない場合はそれっぽいパッケージを各自インストール)
略
....
nix:
enable: true
packages:
- gcc #
- ncurses # interoで必要
- libcxx #
- icu #
- zlib # hoogleで必要
stackから使うツールをインストールする
$ stack --nix install hlint ghc-mod hoogle
Emacs
Intero for Emacs の通り intero をインストール
個人的に package.el をそのまま使っているためインストール後 init.elに
(require 'haskell-mode)
(require 'intero)
(add-hook 'haskell-mode-hook 'intero-mode)
実行
stackで適当なプロジェクトを作成する
$ stack --nix new myhs
emacsで myhs/src/Lib.hs を開くと intero のビルドが自動的に走り 環境構築終了
Key | Function | Description |
---|---|---|
C-c C-c | intero-repl-eval-region | 範囲選択している箇所の実行 |
C-c C-e | intero-expand-splice-at-point | |
C-c TAB | intero-info | 定義情報を別バッファに表示 |
C-c C-l | intero-repl-load | REPLに編集中の.hsファイルを読み込む |
C-c C-r | intero-apply-suggestions | import等で不足しているものがあったりする場合読み込んでくれる |
C-c C-t | intero-type-at | 関数や変数の型をminiバッファに表示 |
C-c C-z | intero-repl | REPLのバッファに移動する |
M-. | intero-goto-definition | 定義箇所にジャンプする |