
robert dockins wrote:
I'm doing a 3D simulation. Now I need something like variables in imperative languages. My mainLoop check for new events and renders scene.
Then you want IORef. http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data.IORef.html
I saw it. The problem is, I need an amount of 100*X of mutable variables to implement the system (camera position, rotation, aceleration, ..., position and deformetion infomations for every object, ..., renderer situations [like temprary fading and other efects], ... and more)
Then you probably want a big labeled record,
Uhm... and what if I write some runtines in plain C, then bind them to Haskell and and use then as in OOP: camera.c: struct camera { GLfloat x, y, z; } struct camera getCameraPos() {... /* returns camera position */} void setCameraPos(struct camera c) {... /* sets position of camera */} camera.hs: -- just define bindings Main.hs: mainLoop = do -- read events -- on KeyDown (SDLK_Keft) -> do -- (x, y, z) <- getCameraPos -- setCameraPos (x + 1, y, z) -- ... -- drawGLScreen drawGLScreen = do -- glTranslate to getCameraPos... Is this apoarch safe enougth, what do you think? Matej 'Yin' Gagyi