あどけない話

Internet technologies

複数のGHCを共存させる

GHC 7.8.1 がリリースされ、type family がうまく扱えない問題が発覚したため、すぐに GHC 7.8.2 がリリースされました。このおかげで Yesod が、うまくビルドできるようになりました。しばらくして、GHC 7.8.3 もリリースされる気配があります。また、一ヶ月を目処に Haskell Platform 2014.2 が出るようです。

こうなると、GHC をうまく共存させてくれる Haskell Platform 2014.2 のリリースを待とうかと思うかもしれませんが、そんな必要はありません。GHC 自体に複数のバージョンと共存できる仕組みがあるからです。

GHC 7.8.2 を試したい人は、気軽にインストールしましょう。GHC 7.8.3 や Haskell Platform 2014.2 がリリースされたら、GHC 7.8.2 は消せばいいのです。ここでは、後で消しやすくするためのコツを紹介します。対象は、Unix 系の OS です。Windows のことは、誰かに任せます。

インストール

GHC 7.8.2のダウンロードサイトから、必要なバイナリを取ってきて展開します。以下、Mac の例:

% wget http://www.haskell.org/ghc/dist/7.8.2/ghc-7.8.2-x86_64-apple-darwin-mavericks.tar.xz
% tar zxvf ghc-7.8.2-x86_64-apple-darwin-mavericks.tar.xz
% cd ghc-7.8.2

ここで、単に configure を実行すると、/usr/local の下にインストールする設定になります。これでだと、インストールするファイルが散らばって、後から消しにくくなります。そこで、例えば /usr/local/ghc-7.8 というディレクトリの下にインストールするように決めます。

% ./configure --prefix=/usr/local/ghc-7.8

次に /usr/local/ghc-7.8 というディレクトリを作ります。僕は、このディレクトリを自分の所有にしています。root の所有でもいいですが、make install するときに sudo を使わないといけません。おかしなことは起りませんが、不安な人は自分の権限でインストールするのがいいでしょう。GHC 自体が自分の所有になっていても、GHC を壊した経験は僕にはありません。

% sudo mkdir /usr/local/ghc-7.8
% sudo chown あなたのアカウント /usr/local/ghc-7.8
% sudo make install

PATH に /usr/local/ghc-7.8/bin を追加すれば、GHC 7.8.2 のインストールは完了です。

削除

削除したくなったら、3つのディレクトを消します。

~/.ghc や ~/.cabal 自体は消してはいけません。こうすれば、~/.cabal/bin 以下のコマンドは残ります。コマンドは、静的リンクされているので、引き続き使えます。ただし、alex や happy のように lib に設定ファイルを置いているコマンドはうごかなくなるので、インストールし直す必要があります。

応用

この方法は、何も GHC 本体を消したい場合だけではなく、cabal でインストールしたユーザライブラリがおかしくなったときにも使えます。~/.ghc と ~/.cabal 以下のサブディレクトリを消せば、一から世界を構築できるようになります。