úÎRO³       Check if the given value equals  .  Check if the given value in the # equals the given reference value.  A flipped . Ignore the value. Monadic  if then else &Throw the exception stored inside the .  Non retrying takeMVar. "Strictly modify the contents of a . Strict function composition    A  ±9 is an abstract type representing the result of a thread 8that is executing or has executed a computation of type ! ±. "#"#"#"#XBas van Dijk <v.dijk.bas@gmail.com> , Roel van Dijk <vandijk.roel@gmail.com> )Sparks off a new thread to run the given ! computation and returns the $- of the newly created thread paired with the  of the thread  which can be ed upon. JThe new thread will be a lightweight thread; if you want to use a foreign ,library that uses thread-local storage, use  instead. GGHC note: the new thread inherits the blocked state of the parent (see %). Like 0, this sparks off a new thread to run the given ! computation and returns the $- of the newly created thread paired with the  of the thread which can be ed upon. Unlike ,  creates a bound# thread, which is necessary if you Kneed to call foreign (non-Haskell) libraries that make use of thread-local state, such as OpenGL (see Control.Concurrent). Using  instead of . makes no difference at all to the scheduling Obehaviour of the Haskell runtime system. It is a common misconception that you  need to use  instead of # to avoid blocking all the Haskell ,threads when making a foreign call; this isn'#t the case. To allow foreign calls Kto be made without blocking all the Haskell threads (with GHC), it is only necessary to use the  -threaded/ option when linking your program, and to make &sure the foreign import is not marked unsafe. Like 2, but lets you specify on which CPU the thread is created. Unlike a  thread, a thread created by  3will stay on the same CPU for its entire lifetime ( threads >can migrate between CPUs according to the scheduling policy). 9 is useful for overriding the scheduling policy when you 4know in advance how best to distribute the threads. The &= argument specifies the CPU number; it is interpreted modulo numCapabilities6 (note that it actually specifies a capability number Crather than a CPU number, but to a first approximation the two are  equivalent). '+Internally used function which generalises ,  and  ? by parameterizing the function which does the actual forking. +Block until the thread, to which the given  belongs, is terminated.  Returns ( x0 if the thread terminated normally and returned x.  Returns ) e if some exception e" was thrown in the thread and wasn't caught. Like 3 but will ignore the value returned by the thread. Like > but will either rethrow the exception that was thrown in the = thread or return the value that was returned by the thread. Like : in that it will rethrow the exception that was thrown in A the thread but it will ignore the value returned by the thread. A non-blocking .  Returns *! if the thread is still running.  Returns  (( x)0 if the thread terminated normally and returned x.  Returns  () e) if some exception e was thrown in the thread and wasn' t caught. ;Notice that this observation is only a snapshot of a thread's state. By the time >a program reacts on its result it may already be out of date. "If the thread, to which the given & belongs, is currently running return  and return + otherwise. ;Notice that this observation is only a snapshot of a thread's state. By the time >a program reacts on its result it may already be out of date.    XBas van Dijk <v.dijk.bas@gmail.com> , Roel van Dijk <vandijk.roel@gmail.com> A  ThreadGroup; can be understood as a counter which counts the number of Jthreads that were added to the group minus the ones that have terminated. More formally a  ThreadGroup has the following semantics:    initializes the counter to 0. * Forking a thread increments the counter. O When a forked thread terminates, whether normally or by raising an exception,  the counter is decremented.  ) blocks as long as the counter is not 0. , "Create an empty group of threads. Same as Control.Concurrent.Thread. but additionaly adds  the thread to the group. Same as Control.Concurrent.Thread. but additionaly adds  the thread to the group. Same as Control.Concurrent.Thread. but 6 additionaly adds the thread to the group. (GHC only) -+Internally used function which generalises  ,   and  ? by parameterizing the function which does the actual forking. GBlock until all threads, that were added to the group have terminated. Returns 3 if any thread in the group is running and returns +  otherwise. :Notice that this observation is only a snapshot of a group's state. By the time >a program reacts on its result it may already be out of date.    .       !"!"#$%&'()*%+,-(./010234/5 threads-0.2Control.Concurrent.ThreadControl.Concurrent.Thread.GroupUtils Control.Concurrent.Thread.ResultResultforkIOforkOSforkOnIOwaitwait_ unsafeWait unsafeWait_status isRunning ThreadGroupnew isAnyRunning isJustTruebase Data.MaybeJustghc-primGHC.BoolTruejustEqMaybe<$$> Data.Functor<$>voidifM throwInner GHC.Exception SomeException tryReadTMVar modifyTVarGHC.ConcTVar∘! GHC.TypesIOunResultThreadIdGHC.IOblockIntfork Data.EitherRightLeftNothingFalse