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

Reply via email to