>>106
Grapefruitはgtk2hsのラッパとして動くけど、そのへんをうまく隠蔽してるよ
ボタン一個を表示して、クリックされる度にボタン上のテキストの"*"が増えていくサンプル
Grapefruit付属のexampleから抜粋

mainCircuit :: (StdToolkit toolkit) => UICircuit Window toolkit era () (DSignal era ())
mainCircuit = proc () -> do
    rec let

            title = pure "Simple"

            text  = SSignal.scan "*" (const . ('*' :)) push

        X :& Closure ::= closure `With` X :& Push ::= push
            <- window `with` just pushButton
                -< X :& Title ::= title `With` X :& Text ::= text
    returnA -< closure