リムナンテスは愉快な気分

徒然なるままに、言語、数学、音楽、プログラミング、時々人生についての記事を書きます

【gi-gtk】Haskellでdesktop GUIを実装するための最初の一歩

qiita.com

HaskellGUIライブラリ

wxHaskellとかいろいろありますがgtkでなんとかする。
gtkもいろいろな種類があり、どれを使えばいいのかわからんし今もわかってませんが、とりあえずこの通りにやれば動く。

前提

前準備

$ stack new <プロジェクト名>

で新規プロジェクトを立ち上げると勝手にいろんなファイルを作ってくれます。

package.yamlに以下のようにgi-gtkを追加します。

dependencies:
- base >= 4.7 && < 5
- haskell-gi-base
- gi-gtk

gi-gtkはstack buid時にコンパイルされますが、依存関係の問題があるらしいので以下のコマンドを実行する。

$ brew install gobject-introspection gtk+ gtk+3

mac 以外でやる場合は公式を参照。

Hello World

gtkの"Hello World"がこちら。

{-# LANGUAGE OverloadedStrings, OverloadedLabels #-}
module Main where

import qualified GI.Gtk as Gtk
import Data.GI.Base

main :: IO ()
main = 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

これをapp/Main.hsに書いて(src/Lib.hsは消してもOK)

$ stack build

して

$ stack exec <プロジェクト名>-exe

するとウィンドウが表示されるはず。

f:id:frecafloros:20210703220115p:plain

f:id:frecafloros:20210703220128p:plain