yin wrote:
Hello all!
I'm doing a 3D simulation. Now I need something like variables in
imperative languages. My mainLoop check for new events and renders
scene. To use input for controling camera position I need variables. An
equivalent code in C:
void main_loop() {
int loop_num = 0;
bool run = 1;
SDLEvent e;
while(run) {
while(SDL_PollEvent(&e)) {
if(e.type == SDL_KeyDown) {
if(... == SDLK_Left)
camera_pos_x--;
} else if ...
...
}
drawScene();
loop_num++;
}
}
How to implement camera_pos_x, y and z as variables, which chage values
in run? This is only simplified example, but it's important to implement
it in as most imperative form as possible.
Then you want IORef.
http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data.IORef.html
Consider, however, that this kind of construct can be done without
mutable variables. (warning, made-up code ahead)
main = loop 0 0 0 -- initial values
where loop loop_num xpos ypos =
do e <- pollEvent
let xpos' = <calculate new xpos>
ypos' = <calculate new ypos>
someActionInvolvingPosition xpos' ypos'
when breakCondition (return ())
loop (loop_num+1) xpos' ypos'
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe