Monadiusやっと実行!

OpenGLが通ったので、Monadiusをトライしてみた。
いやー、エラー。

原因が2つ。

  • GHC 6.8.xと6.10.xの違い。Control.Exception絡みが変わっていて、ExitExceptionという終了用の例外がなくなっていた。OldExceptionとして${GHC-HOME}/doc/libaries/doc-index.htmlからたどると説明されていた。Exceptionを返さずに、中でシステムコールで終わってしまうのはよろしくないとか。
  • HGLUTの仕様が変わって、明示的にGLUTのinitializeを呼ぶようになっていた。

例外はExceptionのコンストラクタが違っているので、小生の貧弱な知識ではどうしようもないので、あっさり、
throwIO $ ExitException ExitSuccess

throwIO ExitSuccess
に変更。

2箇所あったので、両方とも変えると、今度は、型が違うといってメインループの
`catch` (\exc -> return ())
でエラーとなる。
とりあえず、コメントにしてしまう。
後ろにwhere句があって、どこにかかるのか気になったけど、とりあえずということで、目をつぶる。

GLUTの初期化は、起動時引数から、GLUT用の引数を取り出して、残りを渡す仕様のようなので(X11がこんなだった)
args <- getArgs
putDebugStrLn $ show args

argss <- getArgs
args <- initialize "a" argss
putDebugStrLn $ show args
として渡すように変更。
ファイルの先頭に、インポート用に
import Graphics.UI.GLUT.Initialization
を追加して、無事コンパイル完了。
実行もできた。

ちなみに、Modadiusに同梱されている、glut32.dllは古いのでリネームしました。


コンパイル結果として、オプションが前のと同じだとするとずいぶん違ってます。
オリジナル−monadius.exe 2,434KB
今回結果−−monadius.exe 6,391KB

なんか、でかい。
最適化オプションが、-Oだけだから、これも変更しないといけない気がするなぁ。