Just for the culture (because Heinrich's solution is undoubtly simpler) you can also achive this using continuations. This is one of the purposes of the Cont monad, used jointly with a State monad, you can store the continuations and resume them later.
2011/6/10 Heinrich Apfelmus <[email protected]> > Alexander V Vershilov wrote: > >> >> I'm writing a small tcp server with that can handle connections and >> answer by rules writen in a small script that can be interpreted by >> server. >> For this purpose I've written an interpreter that has type >> >> ErrorT MyError (StateT ScriptState IO) >> >> so I can call "native" IO function in that script, and define new one. >> I can run this script with runState (runErrorT (...)) oldState. >> >> But there is one problem: in script i should be able to call functions >> that >> will stop script interpretation and wait for some server event. To >> continue >> interpretation. >> Can smb give an advice what is the best way to do it? >> > > Basically, you want to stop the interpreter and resume it at some later > point. You need to implement a custom monad for that, which can easily be > done with the help of my operational package. > > http://projects.haskell.org/operational/ > > In particular, the examples > > WebSessionState.lhs > TicTacToe.hs > PoorMansConcurrency.hs > > show how to suspend and resume the control flow. Feel free to request > additional examples. > > > Best regards, > Heinrich Apfelmus > > -- > http://apfelmus.nfshost.com > > > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
