トップ «前の日記(2004-04-03) 最新 次の日記(2004-04-07)» 月表示 編集

日々の流転


2004-04-04 [長年日記]

λ. gtk2hs-0.9.4 (その2)

数日間使ってみた感想。

他の言語でgtk2を使ったことがあればあまり戸惑わずに使える。けど、中途半端にインターフェースを変更している箇所もあるので注意。たとえば boxPackStart :: (BoxClass b, WidgetClass w) => b -> w -> Packing -> Int -> IO ()gtk_box_pack_start(GtkBox *box, GtkWidget *child, gboolean expand, gboolean fill, guint padding)expandfillの二つの引数をPackingという型の単一の引数にまとめてしまってる。

実装を見ると、c2hsを使ってFFI周りのコードをCのヘッダファイルから自動生成した上で、その上にHaskellっぽいインターフェースを被せてる。これでだいぶ省力化出来てるのは素晴らしい。

ただ、シグナル周りとかの設計は少々ダサい気がする。実装にはg_signal_connect_data()を使うよりもGClosureの仕組みを活用した方が良いんじゃないかというのもあるが、それよりもまずシグナルごとに onClicked, afterClicked :: ButtonClass b => b -> IO () -> IO (ConnectIdo b) みたいな関数があるのってどうなのよ?

僕だったら、例えば以下のようなインターフェースにしたと思う。こういう設計にしなかったのには何か理由があるのだろうか。


signalConnect, signalConnectAfter :: obj -> (Signal obj t) -> t -> IO (ConnectId obj)
signalEmit :: obj -> (Signal obj t) -> t
signalName :: Signal obj t -> String
...
clicked :: (ButtonClass b) => Signal b (IO ())
Tags: haskell