WEB+DB PRESS vol.67に入門関数プログラミングという記事があったので買って読んでみました。
まずはサンプルコードを試すのにhaskell環境の準備ですが、centosについては特に記述がなかったので、yum search haskellしてでてきた ghcというパッケージをインストールしました。
順調に動かすことができたのですが、csv.hsを読み込んだところで、こんなエラーがでました。
[code language=”bash”]
GHCi, version 6.10.4: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim … linking … done.
Loading package integer … linking … done.
Loading package base … linking … done.
csv.hs:3:7:
Could not find module `Text.Parsec.String’:
Use -v to see a list of the files searched for.
Failed, modules loaded: none.
Prelude>
[/code]
Text.Parsec.Stringがないって言ってる感じです。
きっと、このバージョンにはText.Parsec.Stringというライブラリがないのでしょう。よーし。きっと最新版を入れれば解決だ。
最新版のghcを入れてみる・・・
そもそもghcって何かをよくわかってないけど、yumでインストールしたのがghcなので探して入れてみよう。
しかし、ダウンロードして./configureしてみるも、centos5.8だとlibcのバージョンが古いからだめだと言われます。
ちょっとめんどうそうなので、これは放置します。
つぎに、どうやらcabalというパッケージ管理ツールがあって、それでパッケージをインストールできるらしいことを見つけました。そのcabalというのはhaskell-platformの中にあるらしい。じゃあ、それをインストールしよう。
haskell-platform
新しめのバージョンでは、おまえのghcのバージョンは古いぞ、って言われるので、古めのバージョンをダウンロードします。
[code language=”bash”]
sudo freeglut-devel libedit-devel
wget http://hackage.haskell.org/platform/2009.2.0.2/haskell-platform-2009.2.0.2.tar.gz
tar zxf haskell-platform-2009.2.0.2.tar.gz
cd haskell-platform-2009.2.0.2
[/code]
ここで、./configure -> make -> make install とします。
しかし、どうも失敗します。
#. ビルドが始まる。
#. 既にインストールされているライブラリは時間の無駄なのでビルド処理をスキップ
#. スキップしないライブラリのビルドが走るが、スキップしたビルドの生成物を参照している!?
#. そのためファイルが見つからずエラー
#. make installでもスキップしたライブラリは、インストール対象がない、とエラー。そりゃあスキップしたからね。
というような感じで意味がわからないので、スキップする処理はコメントアウトして全部ビルドさせます。
scripts/build.sh
113 cd packages 114 for pkg in `cat platform.packages`; do 115 #if is_pkg_installed "${pkg}"; then 116 # echo "Platform package ${pkg} is already installed. Skipping..." 117 #else 118 echo "Building ${PKG}" 119 build_pkg "${pkg}" 120 #fi 121 done
./configure make sudo make install
あと、makeを途中で止めたりエラーで止まった場合、途中までの結果はmake cleanだけでは消えないし、続けてmakeをしてもうまくいきません。
どれを消して良いかわからないので、一旦全部削除して圧縮ファイルの展開からやり直しました。
あと、こんなエラーも出てました。いつ出てたかは忘れました・・・。たしか、ビルドのスキップでのエラーのときだったかなぁ。
Setup: The program happy is required but it could not be found
cabal
haskell-platformのインストールが終わると、cabalというパッケージ管理ツールを使うことができます。
ライブラリのリストをアップデートして、parsecをインストールします。アップグレードかも。
sudo cabal update sudo cabal install parsec
cabal自体をアップグレード・・・は失敗しました。
これで、Text.Parsec.STringが使えた
というわけで、これでWEB+DBのサンプルコードが動きました。
ubuntuあたりでapt-getすればこんなことしなくても動きそうですけどね・・・。
ディストリのパッケージにあるghcは古過ぎるので使わないほうがいいですよ。
ghc7.4は一般向けじゃないのでhaskell platformからgch7.0.4(GHC 7.0.4 generic binaryというリンクから)のバイナリをインストールして、それからhaskell platformをインストールすると全体的にエラーが出にくく幸せになれます。
ubuntuでも同様でパッケージからインストールするのではなく、haskell platformからインストールするのがベストです。