2009/3/13 Marcin Kosiba <marcin.kos...@gmail.com>: > ... > Threading the state is not the problem. Maybe this will help: > what I have now: > > fsm world state = case state of > first -> > do_stuff_one > (move_up, succ state) > second -> > do_stuff_two > (move_left, succ state) > third -> > do_stuff_three > (move_right, first) > > what I'd want to have is to say: > fsm world state = do > do_stuff_one > yield move_up > do_stuff_two > yield move_left > do_stuff_three > yield move_right > fsm world state > > and have it "translated" to: > > fsm world state = > do_stuff_one > (move_up, \world' state' -> > do_stuff_two > (move_left, \world'' state'' -> > do_stuff_three > (move_right, fsm world'' state'')
Hi, I've not fully understood your exact problem but I think you might have a look to Continuations and Delimited Continuations. Both can help you solve the problem with implementing a yield statement. You can have a look at one of my (rather) old blog's posts about how to implement yield/send statements a-la-python: http://monadicheadaches.blogspot.com/2008/01/python-25s-iterators-in-haskell-sort-of.html Notice that blogspot messed up with code blocks so indentation looks bad and some character is even missing. Bye, Cristiano _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe