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

Reply via email to