bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

Haskell-Platform 2014, Eclipse-Luna, EclipseFPで快適な開発環境を構築する

1.概略

どの言語でも同じことがいえるが、開発環境を整えて作業をしたほうがずっと効率的である。幸いなことに、Haskellの開発環境に対しても、オンラインでの文法チェックや見やすくするためのコードの修正示唆などの機能がEclipceで提供されている。今回は、Windows8.1の環境下でのHaskellの開発環境の整え方について述べる。

インストールに用いるものは、
Haskell-Platform 2014.2.0.0
Java SE Development Kit 8 Downloads
eclipse-java-luna-SR1-win32-x86_64
EclipseFP
である。

上記のインストールが首尾よく進めば、下図のようなプログラム開発環境を得る。
f:id:bitterharvest:20141205070352p:plain

2.準備

Haskell-Platformをインストールすると、個人の開発環境は、C:\Users{user}\AppData\Roaming\cabalとC:\Users{user}\AppData\Roaming\ghcに作られる(なお、AppDataは隠しディレクトリになっているので、この中を見るためにはすべてのディレクトリとファイルを見えるようにしておく)。なお、\Users{user}は利用者のホームディレクトリである。利用者のアカウントがSatoであれば、\Users{user}は\Users\Satoとなる。(なお、これからの作業はadminでは行わず、自分のアカウントで行うこと)
今までにHaskellを使っていた場合には、これまでの開発環境と干渉を起こす可能性があるので、これらを消去する。これには次の二つの作業を行う。
①C:\Users{user}\AppData\Roaming\cabalとC:\Users{user}\AppData\Roaming\ghcのディレクトリを削除する。
Haskellの古いプラットフォームがあれば、例えば、Haskell Platform 2013.2.0.0など、これをアンインストールする。

3.Haskellのインストール

Haskellのインストr-ルを次の手順で行う。

Haskell-Platformを使えるようにする
Haskell Platform2014をダウンロードする。今回ダウンロードしたファイルはHaskell Platform 2014.2.0.0 for Windows, 64bit である。
HaskellPlatform-2014.2.0.0-x86_64-setup.exeを実行する。

②最新のパッケージを利用できるようにする
コマンドプロンプトを開いて、

cabal update
cabal install cabal-install

を実行する。

Yampaを用いてゲームのプログラムを開発するので、Yampaもインストールする。
③Yampaをインストールする。

cabal install Yampa

を実行する。

4.Eclipseのインストール

次にEclipseのインストールを行う。
Java SDKのインストール
Java JDKがインストールされていない場合は、ORACLEJava SE Development Kit 8 Downloadsのサイトからダウンロードする。今回ダウンロードしたファイルは jdk-8u25-windows-x64.exeである。ダウンロード後にこれを実行する。

Eclipseのインストール
1) Eclipseサイトよりダウンロードする。今回はEclipse IDE for Java DevelopersよりWindows 64bitからダウンロードした。ダウンロードしたファイルはeclipse-java-luna-SR1-win32-x86_64.zipである。
2) これを解凍するとeclipseというディレクトリができる。これをホームディレクトリに置いた。また、ディレクトリeclipseの直下にeclipse.exeという実行ファイルがあるので、これのショートカットを作り、これをデスクトップに置くと便利である。
3) eclipseを実行する。workspaceの場所を尋ねてくる。workspaceそのままでもよいが、今回は、haskellworkspaceにした。

③EclipseFPのインストール
1) Help -> New Software Installを選ぶ。Available Softwareという画面が出てくる。Addをクリックし、NameにEclipseFPをLocationにhttp://eclipsefp.sf.net/updatesを記入し、OKを押す。
2) しばらくするとNameのところのpendingがFunctional Programmingと表示される。さらに、そこにある緑の矢印をクリックすると、FP:Haskell support for Eclipseが現れる。すぐ下にあるselect AllをNextをクリックする。さらにNextをクリックするとライセンスの承認を求められるので、承認にしてFinishをクリックする。途中で承認してないソフトをインストールして良いかと聞かれるので、OKを押してインストールを継続する。
3) インストールが終了するとEclipseの再起動が求められるのでOKをクリックする。
4) 再び、eclipseが動きだし、ワークスペースの確認があるので、OKを押すとEclipseの開発画面が現れる。
5) Window -> Preference -> Haskell -> Haskell Implementationを開く。画面でGHC 7.8.3が現れれば、EclipseからHaskellが利用できる。また、Window -> Preference -> Haskell -> Haskell Executableで、BuildWrapper executableのところにbuildwrapper.exeへのアクセス場所、例えば、C:\Users\xxxxx\AppData\Roaming\cabal\bin\buildwrapper.exeがあれば、プログラム開発時にエラーを自動的に知らせてくれる(但し、この時点では、buildwrapperのすべての機能が整っていないので後で正しいものをインストールする)。

5.Eclipseの利用

Yampaを利用した簡単なプログラムが実行できるかを以下の手順で確認する。
①プロジェクトの作成
File -> New -> Projectをクリックし、Haskell -> Haskell Projectを選んでNextをクリックする。プロジェクト名が求められる。ここではbounce0とした。Finishをクリックする。Haskellでの環境を作るかと聞いてくるので、OKをクリックする。
②プログラムの作成
bounce0 -> src -Main.hsをクリックする。Main.hsができているので、前の記事で説明した以下の簡単なプログラムを作成してみる。

module Main where

import FRP.Yampa
import Control.Concurrent

type Pos = Double
type Vel = Double

fallingBall :: Pos -> SF () (Pos, Vel)
fallingBall y0 = (constant (-9.81) >>> integral) >>> ((integral >>^ (+ y0)) &&& identity)

main::IO()
main = reactimate (return ())
                       (\ _ -> threadDelay 100000 >> return (0.1, Nothing))
                       (\ _ (pos, vel) -> putStrLn ("pos: " ++ show pos ++ ", vel: " ++ show vel) >> return False)
                       (fallingBall 10.0)

③プログラム実行
次にRun -> Runをクリックする。下図のようになる。
f:id:bitterharvest:20141205055825p:plain
画面の下の方にConsoleからの出力がある。そこで、*Main>のあとに、mainと打ち込むとプログラムが実行される。このプログラムは終了しないので、Consoleの右の方にある赤いボタン(Terminate)を押すと終了する。(上の図では、下から少し上がった中央にある赤の四角いボタン)

6.オンラインでの文法チェック

上のプログラムのところを見てもらうと分かるが、プログラムのコードはすべて黒となっていて、文法のチェックを行われていない。これは、EclipseFPが新しいGHCを検知したが、今インストールしたHaskell-Platformにこれらのツールを作成することを促さないために生じている。そこで、次の操作をして,buildwrapper,scion-browser,hoogleをインストールする。これには、それぞれに対してsandboxを作成してインストールする必要がある(そうしないと、インストール途中でエラーを起こす)。なお、それぞれのインストールにはかなりの時間を必要とする。

①buildwrappeのインストール

cabal sandbox init
cabal install --force-reinstall buildwrapper
copy C:\Users{user}.cabal-sandbox\bin\buildwrapper.exe C:\Users{user}\AppData\Roaming\cabal\bin\
cabal sandbox delete

②scion-browserのインストール

cabal sandbox init
cabal install scion-browser
copy C:\Users{user}.cabal-sandbox\bin\scion-browser.exe C:\Users{user}\AppData\Roaming\cabal\bin\
cabal sandbox delete

③hoogleのインストール

cabal sandbox init
cabal install hoogle
copy C:\Users{user}.cabal-sandbox\bin\hoogle.exe C:\Users{user}\AppData\Roaming\cabal\bin\
cabal sandbox delete
hoogle data

hoogle dataで認証の関連でエラーが発生する。解決は後にして、Window -> Preference -> Haskell -> Haskell Executableを開く。下図のようになっていれば、hoogleを除けばインストールは成功である。なお、cabel.exeは最新のものにチェックを付け替えた。
f:id:bitterharvest:20141205074153p:plain
次にプログラムMain.hsを見る。次のようになっている。
f:id:bitterharvest:20141205065511p:plain
残念なことに、import FRP.Yampaにエラーがついている。エラーは「.cabalにYampaが指定されていないため」となっている。そこで、bounce0.cabalのファイルを開き、下の方にあるSourceというタグをクリックする。ここで、Yampaの指定をする。後から、GLUTも使うので、これも指定した。下図のようになる。
f:id:bitterharvest:20141205070303p:plain
しばらく時間をおいて、Main.hsを見ると最初の画面となっている。
hoogleを除けば、めでたしめでたしである。