úÎ/æ.¦      Safe-Inferred;The class of Par monads that provide unsafe functionality. #Peek at the current contents of an IVar in a nonblocking way. Attempt to put a value into an IVar. If successful, return the A value put. If something is already there, return it instead. Lift an  operation into the Par monad.  Safe-InferredParChan6 provides communication via streams of values between A computations in a Par monad. Channels in this case are split ) into separate send and receive ports. !The critical thing to know about Chans in Par monads is that  while the recv/ method destructively advances the position of  the consumer's "cursor"( in the stream, this is only observable  in the local Par thread. That is, at fork points it is D necessary to give the child computation a separate set of stream A cursors so that it observes the same sequences as the parent. JCreate a new communication channel, with separate send and receive ports. BReceive a message on a channel in a synchronous, blocking manner. 9Send a message on a channel. This may or may not block. ParIVar" builds on futures by adding full anyone-writes, anyone-reads IVars. U These are more expressive but may not be supported by all distributed schedulers. %A minimal implementation consists of ,  , and . 7Forks a computation to happen in parallel. The forked ? computation may exchange values with other computations using  IVars. creates a new IVar put a value into a IVar . Multiple s to the same IVar 1 are not allowed, and result in a runtime error. : fully evaluates its argument, which therefore must be an  instance of ,. The idea is that this forces the work to D happen when we expect it, rather than being passed to the consumer  of the IVar2 and performed later, which often results in less  parallelism than expected. 6Sometimes partial strictness is more appropriate: see  . like 3, but only head-strict rather than fully-strict. creates a new IVar that contains a value creates a new IVar* that contains a value (head-strict only)  ParFuture0 captures the class of Par monads which support 2 futures. This level of functionality subsumes par/pseq and is  similar to the  Control.Parallel.Strategies.Eval monad. %A minimal implementation consists of  and . 1 However, for monads that are also a member of  it is  typical to simply define   in terms of , , and . 8Create a potentially-parallel computation, and return a future  (or promise5) that can be used to query the result of the forked  computataion.  spawn p = do  r <- new  fork (p >>= put r)  return r Like  8, but the result is only head-strict, not fully-strict. ?Spawn a pure (rather than monadic) computation. Fully-strict.  spawnP = spawn . return             abstract-par-0.3.1Control.Monad.Par.ClassControl.Monad.Par.Unsafedeepseq-1.3.0.1Control.DeepSeqNFData ParUnsafe unsafePeek unsafeTryPut unsafeParIOParIVarforknewputput_newFullnewFull_ ParFuturespawnspawn_getspawnPghc-prim GHC.TypesIOParChannewChanrecvsendt1t2