haskellの環境を構築(ubuntu10.10)

はじめに

ubuntu上でhaskellの環境を構築します。
エディタにはemacsを使います。*1

install haskell

最近のhaskellghcを直接インストールするのではなく、haskell platformを利用すると良いそうです。
Download Haskell

haskell platformで何が入るのでしょう?

  • コンパイラ(ghc,ghci)
  • パッケージ管理システム(cabal)
  • ドキュメントシステム(haddoc)
  • デバッガ(The GHCi Debugger)
  • 構文解析関係
    • paraserジェネレータ(Happy)
      • parseqじゃないんですね。
    • lexier(Alex)
  • FFI(hsc2hs)
    • foreign language binding toolらしい。
  • profiler(GHC Profiler)
  • haskellカバレッジ
  • その他便利なライブラリ
    • glut(opengl)のbindingが入るのが面白いですね。

だいたい必要そうなものが軒並み入る感じです。

まあ、面倒なのでaptを使ってインストールしていきます。(最新版とか気にするほど知識深くないですし)

aptを利用してhaskell platformをインストール
sudo aptitude install haskell-platform haskell-platform-doc
note:(haskell-platform-docでインストールされたdocumentはどこにある?)

大抵の場合/usr/share/doc以下にあります。
また、以下のコマンドを実行してみれば分かる通り、haskell-platform-docはghc6-docやlibghc6-*というパッケージに依存しています。
単純なvirtual-packageということですね。

apt-cache depends haskell-platform-doc
dpkg --listfiles ghc6-doc
dpkg --listfiles libghc6-cgi-doc  

特に何も考えずに、ドキュメントを探したい場合には、以下のようなコマンドを実行するとよさそうです。

find /usr/share/doc -maxdepth 1 -name "*ghc*doc*"

エディタの環境の整備

haskell-mode.elとghc-mod.elを入れます。

sudo apt-get install haskell-mode
cd ~/.emacs.d/3rdparty #各環境に合わせて変更

## ghc-modとhlintのinstall
cabal update
cabal install ghc-mod hlint
cd ~/.cabal/share/ghc-mod-x.y.z
make
cp ghc* ~/.emacs.d/3rdparty/ #それぞれの環境に合わせて変更

## pathの設定
export PATH=$PATH:~/.cabal/bin
echo 'export PATH=$PATH:~/.cabal/bin' >> ~/.zsrhc
ghc-mod

ghc-modはコードの補完を行うものです。便利です。以下のコマンドを実行するとなんとなく雰囲気が分かると思います。

ghc-mod list 
# Alpha.CodeGen
# Alpha.Instr
# Alpha.RegInfo
# Alpha.Regs
# Annotations

.emacsの設定

.emacsに以下の設定を追加します。

;;for haskell-mode                                                                                  
(autoload 'ghc-init "ghc" nil t)

(defun haskell-individual-setup ()
  (let ((mapping '(([f5] . "\C-c\C-l\C-x\omain\C-m\C-xo")
                   ("\C-c\C-i" . ghc-complete)
                   ([backtab] . haskell-indent-cycle))))    
    (loop for (key . f) in mapping
          do (define-key haskell-mode-map key f))
    
    (turn-on-haskell-doc-mode)
    (turn-on-haskell-indent)
    (imenu-add-menubar-index)
    (ghc-init)
    (flymake-mode)))

(add-hook 'haskell-mode-hook 'haskell-individual-setup)
(note:ghc-modが見つからない)

以下のエラーメッセージが表示される場合があります。

ghc-comp-init: Wrong type argument: listp, "ghc-mod not found"

emacs側のPATHには"~/.cabal/bin"がセットされていないときにこのようなエラーが表示されます。
手抜きの対策は

(setq ghc-module-command "~/.cabal/bin/ghc-mod")

を評価することです。真面目に対処する場合にはしっかりPATHを設定しましょう。

利用

Metaチュートリアル - HaskellWikiのあたりみれば良いのかな?

*1:他のエディタを利用している人は参考になりませんね><