wxHaskell

Haskellは良い言語だと思うのだが、
世間での認識を数学者のおもちゃレベルから汎用実用的言語へと改めるには
やはりHaskellでゲームをばりばり書くとかの必要があるだろう(ほんまかいな?)


というわけでGUIである。
Windowが出せないと最近では馬鹿にされるてしまうのである。
HaskellGUIとなると、とりあえず有名どころ(?)のwxHaskellを見てみることにする。


まず、躓くのがドキュメント。
日本語など望むべくも無いので、公式ページをちまちまと解読。
英語読むのすごく嫌なんですけど。


その結果できたのがこれ。

module Main where
import Graphics.UI.WX

main = start mainFrame

mainFrame = do
  f <- frameFixed [text := "Hello World"]
  p <- panel f []
  set f [layout := minsize (sz 300 300) $ widget p]

ええと、quick startから切り貼りしただけですが…


以下、全部推測。
startがメッセージループ起動なのか?
startの型はIO() -> IO()。IO()だけではほとんど何も言及できてないのでは…
とりあえず、何も考えずに

main = start $ putStrLn "Hell World!!"

とかやってみる。
型が正しいので当然コンパイルは通る。
実行結果であるが、コンソールには何も表示されない。
(これ、嘘かも。Eclipseのコンソールには表示されなかったけど
普通にコンソールから実行したら表示された)
もちろんウインドウも表示されない。
つつがなく制御不能になったのでとりあえず殺す。
結局このことからはstartが何をやっているのかはよく分からなかった。
やはりメッセージループなのか。
メッセージループに入る前に指定されたコマンドを実行?


で、とりあえず最初に張ったソースをコンパイル
私はEclipseHaskellプラグイン使ってるので保存したら即時で
コンパイルが開始されるのだが、


ごりごりごりごりごりごりごり…


なんかコンパイルが異様に長いんですけど。
300*300のウインドウ表示するだけのプログラムなんですが…
で、しばらくしてできたバイナリのサイズが7.4MB。
ええっ?300*300のウインドウ表示するだけのプログラムが7.4MB!?


もうこの時点でやる気半分カットな訳ですが。
ライブラリ全部リンクですか。気を取り直して実行してみる。
ウインドウはちゃんと表示されるのだが、
なんか起動直後にチラッと大きなウインドウが表示されるような。
これは見栄えが良くない。
ウインドウが出来上がるまでは不可視にしておく必要が有りそうな。


なんというか、今のところ問題が山積みである。

  • プログラムサイズでかすぎ
  • 起動時にウインドウがちらつく
  • プログラム起動時にコンソールが表示されてしまう。(当方Windows環境)

最初のはともかく(?)何とかしないとC#とかに馬鹿にされそうだ。