Haskell Development Environment

【Haskell in ubuntu-14.10-server-amd64 関連メモ】(2014/12/28 – )

ghcおよびhaskell-platform導入メモ

ghc-7.6.3導入

事前にシンボリックリンクlibgmp.so.3を作成する

1
2
$ cd /usr/lib/x86_64-linux-gnu/
$ sudo ln -s libgmp.so.10 libgmp.so.3

ghc-7.6.3本体の導入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cd /usr/local/src/
$ sudo wget http://www.haskell.org/ghc/dist/7.6.3/ghc-7.6.3-x86_64-unknown-linux.tar.bz2
$ sudo tar xvf ghc-7.6.3-x86_64-unknown-linux.tar.bz2
$ cd ghc-7.6.3
$ sudo ./configure

...(略)...

$ sudo make install

...(略)...

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.6.3

haskell-platform導入

・予め必要なパッケージを導入する

1
$ sudo aptitude install libgmp-dev

・haskell-platform本体の導入

1
2
3
4
5
6
7
8
9
$ cd /usr/local/src/
$ sudo wget https://downloads.haskell.org/~platform/2014.2.0.0/haskell-platform-2014.2.0.0-unknown-linux-x86_64.tar.gz
$ sudo tar xzvf haskell-platform-2014.2.0.0-unknown-linux-x86_64.tar.gz

展開された /usr/local/haskell 以下を /usr/local/ へ移動し、パスを通す

$ cabal --version
cabal-install version 1.18.0.5
using version 1.18.1.3 of the Cabal library

Haskell開発支援ツールとvimプラグイン導入メモ

cab、ghc-mod その他の導入

cabalにてパッケージ管理ツール cab と haskell便利ツール ghc-mod その他のツールを導入する

まずcabal本体を更新する

1
2
3
$ sudo aptitude install libghc-zlib-dev
$ cabal update
$ cabal install cabal-install

この後、/.cabal/bin にパスを通しておく

1
2
3
$ cabal --version
cabal-install version 1.20.0.5
using version 1.20.0.3 of the Cabal library

サンドボックスの初期化を行う

1
$ cabal sandbox init

プロジェクトディレクトリ以下の /.cabal-sandbox/bin にパスを通しておく

ghc-modのインストールを行う

1
2
3
4
5
6
7
8
9
10
11
$ cabal install happy
$ cabal install haskell-src-exts
$ cabal install monad-control-0.3.3.0
$ cabal install ghc-mod
$ cabal install hoogle

$ ghc-mod --version
ghc-mod version 5.2.1.1 compiled by GHC 7.6.3

$ hoogle --version
Hoogle v4.2.36, (C) Neil Mitchell 2004-2012

参考:
http://maoe.hatenadiary.jp/entry/2013/08/16/224031 http://qiita.com/junsumida/items/9e763a8b54222f235759


NeoBundle導入

vimにてプラグイン管理ツール NeoBundle を使えるようにする

配置先のディレクトリを作成

1
$ mkdir -p ~/.vim/bundle

NeoBundleをリポジトリから取得

1
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

vimrcに以下のように記述を追加し、ghc-modの機能をvimで扱うようにできるプラグインghcmod-vimや、補完機能を提供するプラグインneco-ghc等を導入する

参考:
http://qiita.com/joker1007/items/59ac3fa162df7c9cc952 http://cohama.hateblo.jp/entry/2013/09/01/013944


~/.vimrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

"オムニ補完有効化
setlocal omnifunc=necoghc#omnifunc

"plugins for haskell
set nocompatible
filetype plugin indent off

if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim
endif

call neobundle#begin(expand('~/.vim/bundle/'))

NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/neosnippet.vim'
NeoBundle 'Shougo/vimproc.vim'
NeoBundle 'thinca/vim-quickrun'

NeoBundle 'kana/vim-filetype-haskell'
NeoBundle 'eagletmt/ghcmod-vim'
NeoBundle 'dag/vim2hs'
NeoBundle 'ujihisa/neco-ghc'
NeoBundle "ctrlpvim/ctrlp.vim"
NeoBundle 'eagletmt/unite-haddock'

call neobundle#end()
filetype plugin indent on

vim上からコマンドNeoBundleInstallを実行し、各プラグインをインストールする

※NeoBundleのコマンド

NeoBundleInstall
インストール

NeoBundleUpdate
更新

NeoBundleClear
~/.vimrcからプラグインを削除した場合、:NeoBundleClearとしてプラグインをアンインストールすること

参考:
http://qiita.com/muran001/items/3080c4816b7c2e65e40b http://eagletmt.hateblo.jp/entry/2012/02/23/130526


vimprocをmakeする

makeしてvimprocのsoファイルを作成する

1
2
$ cd ~/.vim/bundle/vimproc.vim/
$ make

参考:
http://d.hatena.ne.jp/pospome/20140906


vim2hs

‘za’で折り畳み箇所の開閉を行う。

neocomplcache-ghc (neco-ghc)

~/.vimrc に以下を設定する

1
setlocal omnifunc=necoghc#omnifunc

参考:
https://github.com/eagletmt/neco-ghc


hoogle

予めcabalでhoogleをインストールしておくこと

1
$ cabal install hoogle

~/.vimrc に以下を設定する

1
NeoBundle 'eagletmt/unite-haddock'

以下を行ってhoogleデータベースを設定

1
$ hoogle data

:Unite hoogle
パッケージにカーソルを合わせて p でプレビューできる

:Unite -auto-preview hoogle
検索結果一覧にカーソルを移動するだけでプレビューを表示する

:UniteWithCursorWord hoogle
カーソル位置にある単語で検索する

参考:
http://eagletmt.hateblo.jp/entry/2012/03/17/194950 http://qiita.com/shiena/items/1b6c97f32e3905e15c2b


ctrlp

ctrlpについては、画面の水平分割を行おうとCTRL-Sとすると、ターミナルがデータの受信を停止してしまう(CTRL-Qで脱出) そのため、以下のコマンドでターミナルドライバのフローコントロールをオフにすること。

1
$ stty -ixon -ixoff