ϊΞπΞθηr      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq not portablebetaeden@mathematik.uni-marburg.de Safe-Infered        not portablebetaeden@mathematik.uni-marburg.de Safe-Inferedrr not portablebetaeden@mathematik.uni-marburg.de Safe-Infered  not portablebetaeden@mathematik.uni-marburg.de Safe-Infered =Trans class: overloads communication for streams and tuples. R You need to declare normal-form evaluation in an instance declaration of NFData. $ Use the default implementation for write and  createComm for instances of Trans. "A channel name  ChanName a/ is a handle for a reply channel. The channel M can be created with the function new and you can connect to such a channel  with the function parfill. #Process abstractions of type  Process a b  can be created with function  processB. Process abstractions define remote functions similar to lambda . abstractions, which define local functions. $/Places where to instantiate lists of processes ,+Number of (logical) machines in the system --Local machine number (ranges from 1 to noPe) .Creates a process abstraction  Process a b  from a function  a -> b. /GRemote function invocation, evaluating a function application remotely * without communicating the input argument 0=Instantiates a process on a remote machine, sends the input ˆ of type a and returns the process output of type b in the parallel action monad, thus it can be combined to a larger parallel action. 19Instantiation with explicit placement (see instantiate). 2[Instantiates a process defined by the given function on a remote machine, sends the input ˆ of type a and returns the process output of type b in the parallel action monad, thus it can be combined to a larger parallel action. 39Instantiation with explicit placement (see instantiate). 4IInstantiates a process abstraction on a remote machine, sends the input 7 of type a and returns the process output of type b. 5[Instantiates a process defined by the given function on a remote machine, sends the input 7 of type a and returns the process output of type b. 6@Instantiates a list of process abstractions on remote machines A with corresponding inputs of type a and returns the processes B outputs, each of type b. The i-th process is supplied with the * i-th input generating the i-th output. F The number of processes (= length of output list) is determined by H the length of the shorter input list (thus one list may be infinite). 7Same as  spawn  , but with an additional [Int] argument that specifies ' where to instantiate the processes. 8RInstantiates processes defined by the given list of functions on remote machines A with corresponding inputs of type a and returns the processes B outputs, each of type b. The i-th process is supplied with the * i-th input generating the i-th output. F The number of processes (= length of output list) is determined by H the length of the shorter input list (thus one list may be infinite). 9Same as  spawnF  , but with an additional [Int] argument that specifies ' where to instantiate the processes. :Non-deterministically merge+s a list of lists (usually input streams) H into a single list. The order of the output list is determined by the K availability of the inner lists constructors. (Function merge is defined  using Concurrent Haskell' s function nmergeIO) ;same as  merge  <HA channel can be created with the function new (this is an unsafe side % effect!). It takes a function whose % first parameter is the channel name  ChanName a and whose second parameter I is the value of type a that will be received lazily in the future. The  ChanNameC and the value of type a can be used in the body of the parameter ' function to create the output of type b. The output of the parameter - function will be forwarded to the output of  new  .  Example:  new (channame val -> (channame,val))  returns the tuple (channame, value) . =1You can connect to a reply channel with function parfill (this is an L unsafe side effect!). The first parameter is the name of the channel, the L second parameter is the value to be send. The third parameter will be the  functions result after the K concurrent sending operation is initiated. The sending operation will be ) triggered as soon as the result of type b is demanded. Take care not to  make the result of parfill$ depend on the sent value, as this  will create a deadlock. >4Converts local data into corresponding remote data. ?aThis establishes a direct connection to the process which released the data in the first place. ? Notice that a remote value may only be fetched exactly once! @Converts local data into corresponding remote data. The result is in the parallel action monad and can be combined to a larger parallel action. AΌThis establishes a direct connection to the process which released the data in the first place. The result is in the parallel action monad and can be combined to a larger parallel action. = Notice that you have to fetch a remote value exactly once! BGTransforms a list of local data into a corresponding remote data list. CHTransforms a list of remote data into a corresponding local data list.   map fetch@ would wait for each list element until fetching the next one.  Function fetchAll@ blocks only on partial defined list structure, not on content. D Function liftRD" is used to lift functions acting L on normal data to function performing the same computation on Remote Data. Esee liftRD Fsee liftRD Gsee liftRD > !"#$%&'()*+,-.Input function (Process abstraction from input function /Input function Offline input .Process abstraction; process takes unit input 0Process abstraction Process input Process output 1Machine number Process abstraction Process input Process output 2Function for Process Process input Process output 3Machine number Process abstraction Process input Process output 4Process abstraction Process input Process output 5Process abstraction Process input Process output 6Process abstractions Process inputs Process outputs 7Machine numbers Process abstractions Process inputs Process outputs 8Process abstractions Process inputs Process outputs 9Machine numbers Process abstractions Process inputs Process outputs : Input lists (Nondeterministically merged output list ; Input lists (Nondeterministically merged output list <]Parameter function that takes a channel name and a substitute for the lazily received value. Forwarded result =ChanName to connect with Data that will be send Forwarded to result !Result (available after sending) >The original data The Remote Data handle ?The Remote Data handle The original data @The original data The Remote Data handle ABThe original data 3The Remote Data handles, one for each list element CThe Remote Data handles The original data DFunction to be lifted  Remote input Remote output EFunction to be lifted First remote input Second remote input Remote output FGstuvwxyz{|}~€‚ƒ„…†4  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG4#./%+4568790213 ,-$!>@?ABCDEFG"<=:;&'()* ; !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGstuvwxyz{|}~€‚ƒ„…† not portablebetaeden@mathematik.uni-marburg.de Safe-Infered H=Trans class: overloads communication for streams and tuples. R You need to declare normal-form evaluation in an instance declaration of NFData. $ Use the default implementation for write and  createComm for instances of Trans. LA channel name  ChanName a/ is a handle for a reply channel. The channel M can be created with the function new and you can connect to such a channel  with the function parfill. MProcess abstractions of type  Process a b  can be created with function  processB. Process abstractions define remote functions similar to lambda . abstractions, which define local functions. N/Places where to instantiate lists of processes V+Number of (logical) machines in the system W-Local machine number (ranges from 1 to noPe) XCreates a process abstraction  Process a b  from a function  a -> b. YGRemote function invocation, evaluating a function application remotely * without communicating the input argument Z=Instantiates a process on a remote machine, sends the input ˆ of type a and returns the process output of type b in the parallel action monad, thus it can be combined to a larger parallel action. [9Instantiation with explicit placement (see instantiate). \[Instantiates a process defined by the given function on a remote machine, sends the input ˆ of type a and returns the process output of type b in the parallel action monad, thus it can be combined to a larger parallel action. ]9Instantiation with explicit placement (see instantiate). ^IInstantiates a process abstraction on a remote machine, sends the input 7 of type a and returns the process output of type b. _[Instantiates a process defined by the given function on a remote machine, sends the input 7 of type a and returns the process output of type b. `@Instantiates a list of process abstractions on remote machines A with corresponding inputs of type a and returns the processes B outputs, each of type b. The i-th process is supplied with the * i-th input generating the i-th output. F The number of processes (= length of output list) is determined by H the length of the shorter input list (thus one list may be infinite). aSame as  spawn  , but with an additional [Int] argument that specifies ' where to instantiate the processes. bRInstantiates processes defined by the given list of functions on remote machines A with corresponding inputs of type a and returns the processes B outputs, each of type b. The i-th process is supplied with the * i-th input generating the i-th output. F The number of processes (= length of output list) is determined by H the length of the shorter input list (thus one list may be infinite). cSame as  spawnF  , but with an additional [Int] argument that specifies ' where to instantiate the processes. dNon-deterministically merge+s a list of lists (usually input streams) H into a single list. The order of the output list is determined by the K availability of the inner lists constructors. (Function merge is defined  using Concurrent Haskell' s function nmergeIO) esame as  merge  fHA channel can be created with the function new (this is an unsafe side % effect!). It takes a function whose % first parameter is the channel name  ChanName a and whose second parameter I is the value of type a that will be received lazily in the future. The  ChanNameC and the value of type a can be used in the body of the parameter ' function to create the output of type b. The output of the parameter - function will be forwarded to the output of  new  .  Example:  new (channame val -> (channame,val))  returns the tuple (channame, value) . g1You can connect to a reply channel with function parfill (this is an L unsafe side effect!). The first parameter is the name of the channel, the L second parameter is the value to be send. The third parameter will be the  functions result after the K concurrent sending operation is initiated. The sending operation will be ) triggered as soon as the result of type b is demanded. Take care not to  make the result of parfill$ depend on the sent value, as this  will create a deadlock. h4Converts local data into corresponding remote data. iaThis establishes a direct connection to the process which released the data in the first place. ? Notice that a remote value may only be fetched exactly once! jConverts local data into corresponding remote data. The result is in the parallel action monad and can be combined to a larger parallel action. kΌThis establishes a direct connection to the process which released the data in the first place. The result is in the parallel action monad and can be combined to a larger parallel action. = Notice that you have to fetch a remote value exactly once! lGTransforms a list of local data into a corresponding remote data list. mHTransforms a list of remote data into a corresponding local data list.   map fetch@ would wait for each list element until fetching the next one.  Function fetchAll@ blocks only on partial defined list structure, not on content. n Function liftRD" is used to lift functions acting L on normal data to function performing the same computation on Remote Data. osee liftRD psee liftRD qsee liftRD >HIJKLMNOPQRSTUVWXInput function (Process abstraction from input function YInput function Offline input .Process abstraction; process takes unit input ZProcess abstraction Process input Process output [Machine number Process abstraction Process input Process output \Function for Process Process input Process output ]Machine number Process abstraction Process input Process output ^Process abstraction Process input Process output _Process abstraction Process input Process output `Process abstractions Process inputs Process outputs aMachine numbers Process abstractions Process inputs Process outputs bProcess abstractions Process inputs Process outputs cMachine numbers Process abstractions Process inputs Process outputs d Input lists (Nondeterministically merged output list e Input lists (Nondeterministically merged output list f]Parameter function that takes a channel name and a substitute for the lazily received value. Forwarded result gChanName to connect with Data that will be send Forwarded to result !Result (available after sending) hThe original data The Remote Data handle iThe Remote Data handle The original data jThe original data The Remote Data handle klThe original data 3The Remote Data handles, one for each list element mThe Remote Data handles The original data nFunction to be lifted  Remote input Remote output oFunction to be lifted First remote input Second remote input Remote output pq‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š4 HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq4MXYOU^_`bacZ\[]HIJVWNKhjiklmnopqLfgdePQRST ;HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›       !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNO)*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdQRSTUVWXYZ[\]^_`abcdeedenmodules-1.1.0.1Control.Parallel.Eden.Edi Control.Parallel.Eden.EdenConcHs#Control.Parallel.Eden.ParPrimConcHsControl.Parallel.EdenControl.Parallel.Eden.ParPrimdeepseq-1.3.0.0Control.DeepSeqrnfNFDataparallel-3.2.0.2 Control.Seq seqFoldableseqListrdeepseqrseqr0usingStrategyControl.ParallelpseqMode InstantiateStreamDataConnect ChanName' simInitPesnoPeselfPeforkcreateC connectToPortsendDataspawnProcessAtspawnArgsProcessAtcreateCssendWithsendNFsendStreamWith sendNFStreamTranswrite createCommRDChanNameProcessPlacesPALiftdeLift createProcesscpAtrunPAprocessrfi instantiate instantiateAt instantiateFinstantiateFAt#$#spawnspawnAtspawnFspawnFAtmerge mergeProcnewparfillreleasefetch releasePAfetchPA releaseAllfetchAllliftRDliftRD2liftRD3liftRD4$fNFDataChanName'$fTrans(,,,,,,,,)$fTrans(,,,,,,,)$fTrans(,,,,,,)$fTrans(,,,,,) $fTrans(,,,,) $fTrans(,,,) $fTrans(,,) $fTrans(,) $fTransComm $fTrans[] $fTrans() $fTransMaybe $fTransBool$fTransInteger $fTransChar $fTransDouble $fTransFloat $fTransInt $fNFDataComm $fMonadPA