日記(日記とは言っていない)

https://zenn.dev/23prime に移行しました。

<Haskell> Emacs での開発環境構築メモ

Emacs での Haskell の開発環境構築メモ.

以前書いていたものをこちらへ移しただけなので,現在は多少事情が異なっていたり,そもそも 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

HLintHaskell 用の lint ツール(ソースコード検査ツール)です.

不要な記述や推奨されていない関数や言語拡張を指摘してくれたり,「アンタこう書いてるけど,こんな関数があるから使うとええでw」みたいなことを教えてくれます.

Installing

$ stack install hlint

でおk.

Usage

基本的な使い方に関しては こちら がとても参考になります.

Emacs 上では flycheck で利用するため,まずはこれをインストールしておきます.

その上で,Intero と共存する形で HLint を使用するため,次のように記述します.

(flycheck-add-next-checker 'intero '(warning . haskell-hlint))

あとは勝手に色々教えてくれるので,とても便利.

stylish-haskell

stylish-haskell は,ソースコードを自動的にいい感じに整形してくれる(importcase 文を揃えてくれる)ツールです.

Intalling

$ stack install stylish-haskell

Usage

save 時に勝手に整形してくれるよう,次のように記述します.

(custom-set-variables '(haskell-stylish-on-save t))