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だけだから、これも変更しないといけない気がするなぁ。