úÎþ†     /hypersequent is always put in  monad an abreviation for  ' HCons (K t e)') adds a remote computation in front of a   is the empty  T represents a sequence of remote computations, possibly owned by different threads.  | When a = is executed, at least one remote computation is successful. A value of type 'K t a'+ represents a remote computation returning a that is performed by a thread  . Each  type has  'SucT t' is a  if t is a  . The name $ comes from the successor function.  is a  PAn abstract representation of a thread. Threads are actually implemented using .   G creates a Hyp hypersequent consisting of a single remote computation. 3extend a Hyp hypersequent with another computation !!6 allows to look at the result of a remote computation   stands for communication.  S combines two hypersequents with a communicating component from each hypersequent. "# executes a  hypersequent. $%&'()*+,-./      0       !"#$%&'()*+,-./ waitfree-0.1Control.Concurrent.WaitfreeHyp:*:HConsHNilKAbstractThreadIdSucTZeroTThreadtatidsingle-*-commexecute LconvertiblehtolLJobPool ThreadPool JobChannelMakeHypHAppendhAppend HyperSequentbase GHC.Conc.SyncforkIOcappyremotepeekcomm_ writeMVarextendmuteworkerhypersequentToL'execute' spawnPoolrun threadSpawnconstructJobPool waitThread threadWait progress_