<Haskell> Emacs での開発環境構築メモ
以前書いていたものをこちらへ移しただけなので,現在は多少事情が異なっていたり,そもそも Emacs じゃなくて VSCode とかの方がよかったりするかもしれません.
私の設定はこちら.
Intero for Emacs
Flycheck や補完や REPL 等,最低限必要な機能がこれ一つで一通り揃います.Stack との相性も良く,使い勝手も良いです.詳しくは 公式 を参照.
Installing
公式 に従います.
MELPA を登録していない場合は,パッケージアーカイブスのリストに追加すしておきます.
例えば,init.el
等に次のように記述します.
※ 私の設定はこんな感じ.
(require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) (package-initialize) (package-refresh-contents)
init.el
とかに以下を記述しておくか,或いは普通にパッケージをインストールするかします.
(package-install 'intero)
haskell-mode
に hook しておきます.
(add-hook 'haskell-mode-hook 'intero-mode)
Usage
上のようにしておけば,.hs
ファイル等を開いた時に勝手に Intero が起動してくれます.
よく使うやつ:
intero-repl-load
で,REPL で現在開いている module を load してくれる.デフォルトではC-c C-l
に当てられています.
これに加えて,個人的に Flycheck 表示用の window を同時に開くコマンドを定義しています.
(defun intero-repl-and-flycheck () (interactive) (delete-other-windows) (flycheck-list-errors) (intero-repl-load) (split-window-below) (other-window 1) (switch-to-buffer flycheck-error-list-buffer) (other-window 1) (windmove-right) )
これを C-c C-p
に当てておきます.
(add-hook 'haskell-mode-hook '(lambda () (define-key intero-mode-map (kbd "C-c C-p") 'intero-repl-and-flycheck)))
HLint
HLint は Haskell 用の lint ツール(ソースコード検査ツール)です.
不要な記述や推奨されていない関数や言語拡張を指摘してくれたり,「アンタこう書いてるけど,こんな関数があるから使うとええでw」みたいなことを教えてくれます.
Installing
$ stack install hlint
でおk.
Usage
基本的な使い方に関しては こちら がとても参考になります.
Emacs 上では flycheck で利用するため,まずはこれをインストールしておきます.
その上で,Intero と共存する形で HLint を使用するため,次のように記述します.
(flycheck-add-next-checker 'intero '(warning . haskell-hlint))
あとは勝手に色々教えてくれるので,とても便利.
stylish-haskell
stylish-haskell は,ソースコードを自動的にいい感じに整形してくれる(import
や case
文を揃えてくれる)ツールです.
Intalling
$ stack install stylish-haskell
Usage
save 時に勝手に整形してくれるよう,次のように記述します.
(custom-set-variables '(haskell-stylish-on-save t))