úÎ{b  portableunstable mail@n-sch.deJTypeclass for forkable monads. This is the basic information about how to D fork a new thread in the current monad. To start a new thread in a  # application you should always use . KThe MState monad is a state monad for concurrent applications. To create a 8 new thread sharing the same (modifiable) state use the  function.  Wait for all TMVars# to get filled by their processes. Run a 9 application, returning both, the function value and the L final state. Note that this function has to wait for all threads to finish ' before it can return the final state. Action to run Initial state value Run a 5 application, ignoring the final state. If the first  argument is : this function will wait for all threads to finish before L returning the final result, otherwise it will return the function value as  soon as its acquired.  Wait for all threads to finish? Action to evaluate Initial state value Run a 9 application, ignoring the function value. This function G will wait for all threads to finish before returning the final state. Action to execute Initial state value $Map a stateful computation from one (return value, state) pair to  another. See Control.Monad.State.Lazy% for more information. Be aware that * both MStates still share the same state. KModify the MState, block all other threads from accessing the state in the  meantime (using  from the Control.Concurrent.STM library). Start a new thread, using the  function from the  type K class. When using this function, the main process will wait for all child # processes to finish (if desired). State action to be forked  Kill all threads in the current  application.          mstate-0.2.1Control.Concurrent.MStateForkableforkMState runMState evalMState execMState mapMStatemodifyMforkM killMState runMState'waitForTerminationrunAndWaitMaybeghc-primGHC.BoolTruebase GHC.Conc.Sync atomically mtl-2.0.1.0Control.Monad.State.Classgetsmodifyputget MonadState