CentOS7にwxHaskellをインストール

CentOS 7にwxHaskellをインストールしました。
インストールに際してインストールの仕方をGoogleで色々と検索したのですが、あまり参考になる記事がなかったので作成しました。

#wxHaskellとは
wxHaskellはHaskell用の移植性のあるネイティブのGUIライブラリです。このプロジェクトの目的は、Haskell用に産業用強度のGUIライブラリを提供することですが、自分で開発（および保守）するという負担はありません。

したがって、wxHaskellはwxWidgetsの上に構築されています。これは、すべての主要なGUIプラットフォーム間で移植可能な包括的なC++ライブラリです。GTK、Windows、X11、およびMacOS Xを含みます。さらに、ネイティブのルックアンドフィールを備えた幅広いウィジェットをサポートする成熟したライブラリ（1992年以来開発中）です。

wxHaskellの現在のバージョンはwxWidgets 2.9と3.0をサポートします。wxWidgets 3.0では、WindowsユーザはwxInstallパッケージを使ってwxHaskellと一緒にwxWidgetsを簡単にインストールすることができます。

※[公式サイト](https://wiki.haskell.org/WxHaskell)自動翻訳より

#インストールしたPC環境
OS: CentOS 7 64bit
Cabal: 2.2.0.1

#公式サイト
[https://wiki.haskell.org/WxHaskell](https://wiki.haskell.org/WxHaskell)

#インストール
まずソースをダウンロードしますが、ここではダウンロード用のフォルダを作成して実行しています。

```sh
mkdir tmp
cd tmp
mkdir wxHaskell
cd wxHaskell
```
ソースのダウンロード

```sh
cabal unpack wx wxcore wxdirect wxc
```
実行すると下記フォルダが作成されます。

```
[apo@localhost wxHaskell]$ ls -la
drwxrwxr-x. 3 apo apo 69  1月 28 08:36 wx-0.92.3.0
drwxrwxr-x. 3 apo apo 65  1月 28 08:36 wxc-0.92.3.0
drwxrwxr-x. 3 apo apo 68  1月 28 08:36 wxcore-0.92.3.0
drwxrwxr-x. 3 apo apo 70  1月 28 08:36 wxdirect-0.92.3.0
[apo@localhost wxHaskell]$
```
それぞれのフォルダに入り、cabal installを実行します。
公式サイトでは下記順序となっています。

1. wxdirect
1. wxc
1. wxcore
1. wx

wxdirectのインストール

```sh
cd wxdirect-0.92.3.0
cabal install
```
次はwxcをインストールするのですが、その前にwxGTK3をインストールします。

```sh
sudo yum --enablerepo=epel install wxGTK3-devel
```
PATHを設定します。
「~/.bash_profile」ファイルに下記パスを追加します。

```sh
PATH=/usr/libexec/wxGTK3:$PATH
```

追加したPATHを有効にします。

```sh
source ~/.bash_profile
```

wxcをインストールします。

```sh
cd ..
cd wxc-0.92.3.0
cabal install
```
wxcoreをインストールします。

```sh
cd ..
cd wxcore-0.92.3.0
cabal install
```
wxをインストールします。

```sh
cd ..
cd wx-0.92.3.0
cabal install
```
インストールは以上です。

#HelloWorld
wxHaskellを使ってHelloWorldしてみます。
サンプルが[公式サイト](https://wiki.haskell.org/WxHaskell/Download)の[Gitリポジトリー](https://github.com/wxHaskell/wxHaskell)に含まれておりますので、リポジトリーをクローンします。
サンプルをダウンロードするフォルダを作成してダウンロードします。

上記で作成したtmpフォルダまで移動しておきます。

```sh
mkdir wxHaskell_sample
cd wxHaskell_sample
git clone https://github.com/wxHaskell/wxHaskell.git
```
wxHaskell_sampleフォルダの配下にwxHaskellフォルダが作成されます。
またその中のsamples/wxというフォルダにサンプルファイルが入っています。

```
cd wxHaskell
cd samples
cd wx
ls -la
[apo@localhost wx]$ ls -la
合計 152
drwxrwxr-x. 3 apo apo  4096  1月 28 10:16 .
drwxrwxr-x. 6 apo apo    57  1月 28 10:02 ..
-rw-rw-r--. 1 apo apo  2809  1月 28 10:02 BouncingBalls.hs
-rw-rw-r--. 1 apo apo  1515  1月 28 10:02 ByeDemo.hs
-rw-rw-r--. 1 apo apo    90  1月 28 10:02 ChangeLog.md
-rw-rw-r--. 1 apo apo  5198  1月 28 10:02 Controls.hs
-rw-rw-r--. 1 apo apo  2188  1月 28 10:02 CustomControl.hs
-rw-rw-r--. 1 apo apo  9342  1月 28 10:02 FileBrowse.hs
-rw-rw-r--. 1 apo apo  3504  1月 28 10:02 Grid.hs
-rw-rw-r--. 1 apo apo  1972  1月 28 10:06 HelloWorld.hi
-rw-rw-r--. 1 apo apo  1001  1月 28 10:02 HelloWorld.hs
-rw-rw-r--. 1 apo apo 16864  1月 28 10:06 HelloWorld.o
-rw-rw-r--. 1 apo apo  4728  1月 28 10:02 ImageViewer.hs
-rw-rw-r--. 1 apo apo  1485  1月 28 10:02 LICENSE.txt
-rw-rw-r--. 1 apo apo  1156  1月 28 10:02 Layout.hs
-rw-rw-r--. 1 apo apo  2905  1月 28 10:02 ListCtrl.hs
-rw-rw-r--. 1 apo apo   614  1月 28 10:02 ListView.hs
-rw-rw-r--. 1 apo apo   153  1月 28 10:02 Minimal.hs
-rw-rw-r--. 1 apo apo  1116  1月 28 10:02 Paint.hs
-rw-rw-r--. 1 apo apo  2148  1月 28 10:02 Print.hs
-rw-rw-r--. 1 apo apo  2164  1月 28 10:02 Process.hs
-rw-rw-r--. 1 apo apo  3025  1月 28 10:02 PropertyGrid.hs
-rw-rw-r--. 1 apo apo  1403  1月 28 10:02 TestTaskBarIcon.hs
-rw-rw-r--. 1 apo apo  5333  1月 28 10:02 TimeFlows.hs
-rw-rw-r--. 1 apo apo  9514  1月 28 10:02 TimeFlowsEx.hs
drwxrwxr-x. 2 apo apo   187  1月 28 10:02 bitmaps
-rw-rw-r--. 1 apo apo   563  1月 28 10:02 makefile
-rw-rw-r--. 1 apo apo  4857  1月 28 10:02 samplesWx.cabal
```
HelloWorld.hsをコンパイルして実行してみます。

```sh
ghc HelloWorld.hs 
```
HelloWorldという実行ファイルができていますので、実行します。

```sh
./HelloWorld
```
下記画面が現れます。
![pic1.png](https://qiita-image-store.s3.amazonaws.com/0/87133/3c8dbe53-9b1c-637b-13fa-6880ea6ca251.png)

以上です。