Basically, with the following code, I want the evaluation to really happen on the "evaluate".
I found out that it doesn't: it is evaluated elsewhere (I don't know where).
If I put a putStrLn (commented below), the evaluation really happens there.
execCommand :: (TVar MyState) -> StateT MyState IO () -> IO ()
execCommand ts sm = do
s <- atomically $ readTVar ts
s' <- execStateT sm s
s'' <- evaluate s' --evaluation should happen here, but it doesn't
--putStrLn $ displayMulti $ _multi s''
atomically $ writeTVar ts s''
To give you more context, I have a state that, when evaluated, might not terminate.
So I added a watchdog (like in mueval), that will kill the thread in case the evaluation doesn't terminate.
That's why I need to be sure of where the evaluation takes place.
Thanks!
Corentin