mike-neckのブログ

Java or Groovy or Swift or Golang

【メモ】IntelliJ IDEAでHaskellを書けるようにする(Mac)

昨日Haskellの環境を作ってみたのだが、cabal install ghc-modを3回ほど失敗して、(#`皿´)グヌヌとなって、最後の方法だけがまともにうまくいったので、そのメモ。基本的には下記のサイトが元ネタで、僕のエントリーは俺得なメモです。

MacにhaskellをインストールしてIntellijで使えるようにする | つかびーの技術日記

cabal sandbox + LTS Haskell - Qiita


Haskellコンパイラーのインストール

普通にghcbrewでいれます。

$ brew install ghc

IntelliJ IDEAのプラグインのインストール

⌘ + , → Plugins → Browse Repository から、Haskellプラグインをインストールします。なお、インストールするプラグインはvendorがJetBrainsのものをインストールします。その後でIntelliJ IDEAを再起動。

f:id:mike_neck:20150504102912p:plain

なお、これでIntelliJ IDEAでHaskellを書けるようになるというわけではなくて、cabalというのとghc-modというものが必要になります。

cabalのインストール

cabalってなんぞ?と思っていたのですが、ライブラリーを管理するツールらしい

$ brew install cabal-install

ghc-modのインストール

僕はcabal sandboxというものをよくわかってなくて、cabal install ghc-modをやった後にcabal sandbox initとかやったり、それをホームディレクトリーでやったりしてたので、はまっていた。

プロジェクトのディレクトリーに行ってから次のようにやっていくのが正しいらしい。

$ cd path/to/project
$ cabal sandbox init
$ cabal update
$ cabal install happy
$ cabal install ghc-mod

ただ、ghc-modのインストールは非常に時間(10分くらい)かかるし、プロジェクトごとに毎回これをやるのは非常に面倒なので、上のコマンドはやっていない。

そこでQiitaにあった次のエントリーを参考にしました。

qiita.com


テンプレートのsandboxの作成

~/.ltshs/{LTS Haskellのバージョン}ディレクトリーを作って、そこにIntelliJ IDEA用のテンプレートプロジェクトを作っておく。IntelliJ IDEAのHaskellプラグインを使うために必要なghc-modはhappyというライブラリーに依存するので、happyというライブラリーを最初にインストールする。

$ mkdir -p ~/.ltshs/2.6
$ cd ~/.ltshs/2.6
$ cabal sandbox init --sandbox .
$ cabal update
$ cabal install happy
$ cabal install ghc-mod

プロジェクトのsandboxを作成

プロジェクトのディレクトリーに移動して、上記のテンプレートを元にsandboxを作成する。cabal.configシンボリックリンクでよいらしい。

$ cd path/to/project
$ cabal sandbox init --sandbox ~/.ltshs/2.6
$ ln -s ~/.ltshs/2.6/cabal.config

IntelliJ IDEAの設定

まず、Preferenceの設定を行う。

⌘ + , → Languages & Frameworks → Haskell にてcabalとghc-modの設定を行う

  • cabal executable → /usr/local/bin/cabal
  • cabal data path → path/to/project/.cabal-sandbox
  • ghc-mod executable → ~/.ltshs/2.6/bin/ghc-mod
  • ghc-modi executable → ~/.ltshs/2.6/bin/ghc-modi

f:id:mike_neck:20150504110658p:plain

次にプロジェクトの設定を行う。

⌘ + ; → Project Settings → Project のProject SDKのところでGHCを選択するのですが、ない場合はNewボタンを押してからghcのパスを選択します。

f:id:mike_neck:20150504111338p:plain

f:id:mike_neck:20150504111359p:plain

これにて準備完了です。

f:id:mike_neck:20150504111447p:plain


おわり