úΑ     0hypersequent 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.  | '.comm hypersequent1 error1 hypersequent2 error2' where error1 and error2/ specifies what to do in case of read failure. #$ executes a  hypersequent. %&'()*+,-./0      1       !"#$%&'()*+,-./0waitfree-0.1.3Control.Concurrent.WaitfreeHyp:*:HConsHNilKAbstractThreadIdSucTZeroTThreadtatidsingle-*-commexecute LconvertiblehtolLJobPool ThreadPool JobChannelMakeHypHAppendhAppend HyperSequentbase GHC.Conc.SyncforkIOcappyremotelmaybepeekcomm_ writeMVarextendmuteworkerhypersequentToL'execute' spawnPoolrun threadSpawnconstructJobPool waitThread threadWait progress_