• このエントリーをはてなブックマークに追加

edX で Haskell の講座をとり始めました.

内容はさておき, まずは Emacs の環境作りから始めました.

環境づくりに夢中になって内容がおろそかになるという, いつもの悪いパターン.

スポンサードリンク

haskell-mode

Haskell のマイナーモード.

(autoload 'haskell-mode "haskell-mode" nil t)
(autoload 'haskell-cabal "haskell-cabal" nil t)

(add-to-list 'auto-mode-alist '("\\.hs$" . haskell-mode))
(add-to-list 'auto-mode-alist '("\\.lhs$" . literate-haskell-mode))
(add-to-list 'auto-mode-alist '("\\.cabal\\'" . haskell-cabal-mode))

モードの設定.以下のリンクが詳しい.

 ;; indent の有効.
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'font-lock-mode)
(add-hook 'haskell-mode-hook 'imenu-add-menubar-index)

Haskell Script の編集モード

(add-to-list 'interpreter-mode-alist '("runghc" . haskell-mode))
(add-to-list 'interpreter-mode-alist '("runhaskell" . haskell-mode))

Haskell でかかれたスクリプトを haskell-mode で編集する.

#!/usr/bin/env runhaskell

Ghci との連携

M-x run-haskell で ghci が起動.

(setq haskell-program-name "/usr/bin/ghci")

C-c, C-l でも起動.

(add-hook 'haskell-mode-hook 'inf-haskell-mode) ;; enable

ghci の起動とファイルの読み込みを一緒に行う設定.

(defadvice inferior-haskell-load-file (after change-focus-after-load)
  "Change focus to GHCi window after C-c C-l command"
  (other-window 1))
(ad-activate 'inferior-haskell-load-file)

inferior-haskell-mode で設定すると便利なこと – プログラムとかのの blog

gcd-mod

Haskell 開発を助ける機能がそろったツール.

Install

% cabal update
% cabal install ghc-mod

Settings

(autoload 'ghc-init "ghc" nil t)
(autoload 'ghc-debug "ghc" nil t)
(add-hook 'haskell-mode-hook (lambda () (ghc-init)))

Emacs での使い方は以下のページに書いてある.

エラーチェック

flymake

構文チェック.

(add-hook 'haskell-mode-hook (lambda () (flymake-mode)))

hlint

コードチェック. cabal install hlint でインストールする. C-c C-c でカーソル部のチェック.

自動補完

こんなの見つけた. ac-haskell-process.

(require 'ac-haskell-process) ; if not installed via package.el
(add-hook 'interactive-haskell-mode-hook 'ac-haskell-process-setup)
(add-hook 'haskell-interactive-mode-hook 'ac-haskell-process-setup)
(eval-after-load "auto-complete"
  '(add-to-list 'ac-modes 'haskell-interactive-mode))