HaskellのGUIの利用方法
wxHaskellを始めいろいろあるけどgtkを利用した。gi-gtkのモジュールを利用した。
ただ、簡単にはインストールできなかったためHelloWorldまでの手順を記録する
開発環境
- Linux Mint19
- stack
- ghc8.6.3
前準備
stack new なんとかproject
にて新規プロジェクトを立ち上げる。
そして、gi-gtkのパッケージを依存関係としてpackage.yamlのファイルに記述する
dependencies:
- base >= 4.7 && < 5
- gi-gtk
- haskell-gi-base
baseはすでに入っている。haskell-gi-baseはないとgi-gtkパッケージがうまく動作しない。
さらにgi-gtkはstack buid時にコンパイルされるが、依存関係があるため公式のインストールを参考にして以下のコマンドを実行しておく。
sudo apt-get install libgirepository1.0-dev libwebkit2gtk-4.0-dev libgtksourceview-3.0-dev
GUIのHelloworld
公式のHelloworld exampleを参考にして
module Main where
import Lib
main :: IO ()
main = hello
{-# LANGUAGE OverloadedStrings, OverloadedLabels #-}
module Lib
( hello
) where
import qualified GI.Gtk as Gtk
import Data.GI.Base
hello :: IO ()
hello = do
Gtk.init Nothing
win <- new Gtk.Window [ #title := "こんにちは" ]
on win #destroy Gtk.mainQuit
button <- new Gtk.Button [ #label := "おしてね" ]
on button #clicked (set button [ #sensitive := False,
#label := "押してくれてありがとう、テストは成功しました" ] )
#add win button
#showAll win
Gtk.main
以上2つのファイルを書き換える。
そしてstack buildすると、gi-gtkを自動でダウンロードしてコンパイルしてくれる。さらに実行ファイルまで生成されるので、
stack exec なんとかproject-exe
とするとウィンドウが表示される。日本語でも表示ができるためgtkを使い慣れた人ならなんとなくわかるのではないでしょうか。
HaskellのGUIをやってみたいがstackが便利なためサポートのあるモジュールを選んだ。だが、公式ではcabalを用いたやりかただったのでstackの方法を記した。エディタはVSCODEだけどサポートや補完もしてくれるのでやりやすい。