$g#BDescription of concurrent computation with sequential components. (c) Alexander Vieth, 2015BSD3aovieth@gmail.com experimentalnon-portable (GHC only) Safe-Inferred!"HMSDescription of computation which is composed of sequential and concurrent parts.<Description of the way in which an IO should be carried out.cRun a Concurrential term with a continuation. We choose CPS here because it allows us to explot  withAsync\, giving us a guarantee that an exception in a spawning thread will kill spawned threads.ORun a Concurrential term, realizing the effects of the IOs which compose it.5Create an IO which must be run sequentially. If a sequentially io appears in a Concurrential t term then it will always be run to completion before any later sequential part of the term is run. Consider the following terms:  a = someConcurrential *> sequentially io *> someOtherConcurrential b = someConcurrential *> concurrently io *> someOtherConcurrential c = someConcurrential *> sequentially io *> concurrently otherIo When running the term a, we are guaranteed that io/ is completed before any sequential part of someOtherConcurrential( is begun, but when running the term b, this is not the case; io: may be interleaved with or even run after any part of someOtherConcurrential . The term c# highlights an important point: concurrently otherIo' may be run before, during or after sequentially io\! The ordering through applicative combinators is guaranteed only among sequential terms.Create an IO which is run concurrently where possible, i.e. whenever it combined applicatively with other terms. For instance: \ a = concurrently io *> someConcurrential b = concurrently io >> someConcurrential When running the term a, the IO term io" will be run concurrently with someConcurrential, but not so in b/, because monadic composition has been used. The computation to run.The sequential part.The continuation; fst is sequential part, snd is value part. We use the rank 2 type for s because we really don't care what the value of the sequential part it, we just need to wait for it and then continue with >>.         Concurrential-0.1.0.0 Control.Concurrent.Concurrential ConcurrentialrunConcurrential sequentially concurrentlyChoicerunConcurrentialKSCApSCBindSCAtom Concurrent Sequential$fMonadConcurrential$fApplicativeConcurrential$fFunctorConcurrential$fFunctorChoice