n      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm 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. $+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. '=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. ,XInstantiates a process defined by the given function 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. C The number of processes (= length of output list) is defined by : the shorter input list (thus one list may be infinite). .Same as  spawn  , but with an additional [Int] argument that specifies ' where to instantiate the processes. /RInstantiates 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. C The number of processes (= length of output list) is defined by : the shorter input list (thus one list may be infinite). 0Same as  spawnF  , but with an additional [Int] argument that specifies ' where to instantiate the processes. 1Non-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) 2same as  merge  3HA 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) . 41You 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 that the  demand for the result of parfill- does not depend on the sent value, as this  will create a deadlock. 54Converts local data into corresponding remote data. 6aThis establishes a direct connection to the process which released the data in the first place. = Notice that you have to fetch a remote value exactly once! 7Converts local data into corresponding remote data. The result is in the parallel action monad and can be combined to a larger parallel action. 8This 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! 9GTransforms a list of local data into a corresponding remote data list. :HTransforms 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. ; Function liftRD" is used to lift functions acting L on normal data to function performing the same computation on Remote Data. <see liftRD =see liftRD >see liftRD < !"#$%&Input function (Process abstraction from input function 'Process 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 .Machine numbers Process abstractions Process inputs Process outputs /Process abstractions Process inputs Process outputs 0Machine numbers Process abstractions Process inputs Process outputs 1 Input lists (Nondeterministically merged output list 2 Input lists (Nondeterministically merged output list 3WParameter function that takes a Channel Name and substitute for lazily received value. Forwarded result 4ChanName to connect with Data that will be send Forwarded to result !Result (available after sending) 5The original data The Remote Data handle 6The Remote Data handle The original data 7The original data The Remote Data handle 89The original data 3The Remote Data handles, one for each list element :The Remote Data handles The original data ;Function to be lifted  Remote input Remote output <Function to be lifted First remote input Second remote input Remote output =>nopqrstuvwxyz{|}~2  !"#$%&'()*+,-./0123456789:;<=>2&#+,-/.0')(*$%57689:;<=>3412 !" 9 !"#$%&'()*+,-./0123456789:;<=>nopqrstuvwxyz{|}~ not portablebetaeden@mathematik.uni-marburg.de Safe-Infered?@ABCDE?@ABCDE?@ABCDE?@ABCDE not portablebetaeden@mathematik.uni-marburg.de Safe-Infered  not portablebetaeden@mathematik.uni-marburg.de Safe-InferedF=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. JA 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. KProcess 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. S+Number of (logical) machines in the system T-Local machine number (ranges from 1 to noPe) UCreates a process abstraction  Process a b  from a function  a -> b. V=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. W9Instantiation with explicit placement (see instantiate). X[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. Y9Instantiation with explicit placement (see instantiate). ZIInstantiates 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. C The number of processes (= length of output list) is defined by : the shorter input list (thus one list may be infinite). ]Same as  spawn  , but with an additional [Int] argument that specifies ' where to instantiate the processes. ^RInstantiates 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. C The number of processes (= length of output list) is defined by : the shorter input list (thus one list may be infinite). _Same 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) asame as  merge  bHA 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) . c1You 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 that the  demand for the result of parfill- does not depend on the sent value, as this  will create a deadlock. d4Converts local data into corresponding remote data. eaThis establishes a direct connection to the process which released the data in the first place. = Notice that you have to fetch a remote value exactly once! fConverts local data into corresponding remote data. The result is in the parallel action monad and can be combined to a larger parallel action. gThis 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! hGTransforms a list of local data into a corresponding remote data list. iHTransforms 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. j Function liftRD" is used to lift functions acting L on normal data to function performing the same computation on Remote Data. ksee liftRD lsee liftRD msee liftRD <FGHIJKLMNOPQRSTUInput function (Process abstraction from input function VProcess abstraction Process input Process output WMachine number Process abstraction Process input Process output XFunction for Process Process input Process output YMachine number Process abstraction Process input Process output ZProcess abstraction Process input Process output [Process abstraction Process input Process output \Process abstractions Process inputs Process outputs ]Machine numbers Process abstractions Process inputs Process outputs ^Process abstractions Process inputs Process outputs _Machine numbers Process abstractions Process inputs Process outputs ` Input lists (Nondeterministically merged output list a Input lists (Nondeterministically merged output list b]Parameter function that takes a channel name and a substitute for the lazily received value. Forwarded result cChanName to connect with Data that will be send Forwarded to result !Result (available after sending) dThe original data The Remote Data handle eThe Remote Data handle The original data fThe original data The Remote Data handle ghThe original data 3The Remote Data handles, one for each list element iThe Remote Data handles The original data jFunction to be lifted  Remote input Remote output kFunction to be lifted First remote input Second remote input Remote output lm2 FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm2KULRZ[\^]_VXWYFGHSTIdfeghijklmJbc`aMNOPQ 9FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm       !"#$%&'())*+,-./0123456789:;<=>?@ABCDEFGHIJKLM"#$%&'())*+,-./0123456789:;<=>?@ABCDEFNOPQRSTUVWXYZ[\]^_`abNOPQRSTUVWXYZ[\]^_`acedenmodules-1.1.0.0 Control.Parallel.Eden.EdenConcHs#Control.Parallel.Eden.ParPrimConcHsControl.Parallel.Eden.EdiControl.Parallel.EdenControl.Parallel.Eden.ParPrimdeepseq-1.3.0.0Control.DeepSeqrnfNFDataparallel-3.2.0.2 Control.Seq seqFoldableseqListrdeepseqrseqr0usingStrategyControl.ParallelpseqMode InstantiateStreamDataConnect ChanName' simInitPesnoPeselfPeforkcreateC connectToPortsendDataTranswrite createCommRDChanNameProcessPALiftdeLift createProcesscpAtrunPAprocess instantiate instantiateAt instantiateFinstantiateFAt#$#spawnspawnAtspawnFspawnFAtmerge mergeProcnewparfillreleasefetch releasePAfetchPA releaseAllfetchAllliftRDliftRD2liftRD3liftRD4spawnProcessAtspawnArgsProcessAtcreateCssendWithsendNFsendStreamWith sendNFStream$fTrans(,,,,,,,,)$fTrans(,,,,,,,)$fTrans(,,,,,,)$fTrans(,,,,,) $fTrans(,,,,) $fTrans(,,,) $fTrans(,,) $fTrans(,) $fTransComm $fTrans[] $fTrans() $fTransMaybe $fTransBool$fTransInteger $fTransChar $fTransDouble $fTransFloat $fTransInt $fNFDataComm $fMonadPA$fNFDataChanName'