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))