!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~+(c) Philipps Universitaet Marburg 2005-2010 BSD-style (see the file LICENSE)eden@mathematik.uni-marburg.debeta not portableNone;M"      '(c) Philipps Universitaet Marburg 2012- BSD-style (see the file LICENSE)eden@mathematik.uni-marburg.debeta not portableNone;+(c) Philipps Universitaet Marburg 2005-2010 BSD-style (see the file LICENSE)eden@mathematik.uni-marburg.debeta not portableNone ;   +(c) Philipps Universitaet Marburg 2005-2012 BSD-style (see the file LICENSE)eden@mathematik.uni-marburg.debeta not portableNone $Trans class: overloads communication for streams and tuples. 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 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 processo. Process abstractions define remote functions similar to lambda abstractions, which define local functions. *.Places where to instantiate lists of processes2*Number of (logical) machines in the system3,Local machine number (ranges from 1 to noPe)4Creates a process abstraction  Process a b  from a function  a -> b.5pRemote function invocation, evaluating a function application remotely without communicating the input argument6Instantiates 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.78Instantiation with explicit placement (see instantiate).8Instantiates 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.98Instantiation with explicit placement (see instantiate).:Instantiates a process abstraction on a remote machine, sends the input 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 of type a and returns the process output of type b. <zInstantiates a list of process abstractions on remote machines with corresponding inputs of type a and returns the processes outputs, each of type b. The i-th process is supplied with the i-th input generating the i-th output. The number of processes (= length of output list) is determined by the length of 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. >Instantiates processes defined by the given list of functions on remote machines with corresponding inputs of type a and returns the processes outputs, each of type b. The i-th process is supplied with the i-th input generating the i-th output. The number of processes (= length of output list) is determined by the length of 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 merges a list of lists (usually input streams) into a single list. The order of the output list is determined by the availability of the inner lists constructors. (Function merge is defined using a list merge function  nmergeIO_EK) (similar to nmergeIO from Concurrent Haskell, but in a custom version).Asame as  merge BA 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 ag and whose second parameter is the value of type a that will be received lazily in the future. The ChanNamej and the value of type a can be used in the body of the parameter function to create the output of type bL. 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 parfill7 (this is an unsafe side effect!). The first parameter is the name of the channel, the second parameter is the value to be send. The third parameter will be the functions result after the concurrent sending operation is initiated. The sending operation will be triggered as soon as the result of type b4 is demanded. Take care not to make the result of parfill< depend on the sent value, as this will create a deadlock.D3Converts local data into corresponding remote data.EThis 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! 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! HFTransforms a list of local data into a corresponding remote data list.IITransforms a list of remote data into a corresponding local data list.  map fetchJ 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 liftRDm is used to lift functions acting on normal data to function performing the same computation on Remote Data.Ksee liftRDLsee liftRDMsee liftRDM$%&'()*+,-./01234Input function'Process abstraction from input function5Input function Offline input-Process abstraction; process takes unit input6Process abstraction Process inputProcess output7Machine numberProcess abstraction Process inputProcess output8Function for Process Process inputProcess output9Machine numberProcess abstraction Process inputProcess output:Process abstraction Process inputProcess output;Process abstraction Process inputProcess output<Process abstractionsProcess inputsProcess outputs=Machine numbersProcess abstractionsProcess inputsProcess outputs>Process abstractionsProcess inputsProcess outputs?Machine numbersProcess abstractionsProcess inputsProcess outputs@ Input lists'Nondeterministically merged output listA Input lists'Nondeterministically merged output listB\Parameter function that takes a channel name and a substitute for the lazily received value.Forwarded resultCChanName to connect withData that will be sendForwarded to result Result (available after sending)DThe original dataThe Remote Data handleEThe Remote Data handleThe original dataFThe original dataThe Remote Data handleGHThe original data2The Remote Data handles, one for each list elementIThe Remote Data handlesThe original dataJFunction to be lifted Remote input Remote outputKFunction to be liftedFirst remote inputSecond remote input Remote outputLM4 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM4)45+1:;<>=?6879$%&23*'DFEGHIJKLM(BC@A,-./0" !#F$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM+(c) Philipps Universitaet Marburg 2005-2010 BSD-style (see the file LICENSE)eden@mathematik.uni-marburg.debeta not portableNone NOPQRST !"NOPQRSTNOPQRST" ! NOPQRST+(c) Philipps Universitaet Marburg 2005-2012 BSD-style (see the file LICENSE)eden@mathematik.uni-marburg.debeta not portableNone+:BM UTrans class: overloads communication for streams and tuples. 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.YA channel name  ChanName a is a handle for a reply channel. The channel can be created with the function new and you can connect to such a channel with the function parfill.ZProcess abstractions of type  Process a b  can be created with function processo. Process abstractions define remote functions similar to lambda abstractions, which define local functions. [.Places where to instantiate lists of processesc*Number of (logical) machines in the systemd,Local machine number (ranges from 1 to noPe)eCreates a process abstraction  Process a b  from a function  a -> b.fpRemote function invocation, evaluating a function application remotely without communicating the input argumentgInstantiates 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.h8Instantiation with explicit placement (see instantiate).iInstantiates 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.j8Instantiation with explicit placement (see instantiate).kInstantiates a process abstraction on a remote machine, sends the input of type a and returns the process output of type b. lInstantiates 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. mzInstantiates a list of process abstractions on remote machines with corresponding inputs of type a and returns the processes outputs, each of type b. The i-th process is supplied with the i-th input generating the i-th output. The number of processes (= length of output list) is determined by the length of the shorter input list (thus one list may be infinite).nSame as  spawn  , but with an additional [Int]@ argument that specifies where to instantiate the processes. oInstantiates processes defined by the given list of functions on remote machines with corresponding inputs of type a and returns the processes outputs, each of type b. The i-th process is supplied with the i-th input generating the i-th output. The number of processes (= length of output list) is determined by the length of the shorter input list (thus one list may be infinite).pSame as  spawnF  , but with an additional [Int]@ argument that specifies where to instantiate the processes. qNon-deterministically merges a list of lists (usually input streams) into a single list. The order of the output list is determined by the availability of the inner lists constructors. (Function merge is defined using a list merge function  nmergeIO_EK) (similar to nmergeIO from Concurrent Haskell, but in a custom version).rsame as  merge sA 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 ag and whose second parameter is the value of type a that will be received lazily in the future. The ChanNamej and the value of type a can be used in the body of the parameter function to create the output of type bL. 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) .t1You can connect to a reply channel with function parfill7 (this is an unsafe side effect!). The first parameter is the name of the channel, the second parameter is the value to be send. The third parameter will be the functions result after the concurrent sending operation is initiated. The sending operation will be triggered as soon as the result of type b4 is demanded. Take care not to make the result of parfill< depend on the sent value, as this will create a deadlock.u3Converts local data into corresponding remote data.vThis 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! wConverts local data into corresponding remote data. The result is in the parallel action monad and can be combined to a larger parallel action.xThis 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! yFTransforms a list of local data into a corresponding remote data list.zITransforms a list of remote data into a corresponding local data list.  map fetchJ would wait for each list element until fetching the next one. Function fetchAll? blocks only on partial defined list structure, not on content.{ Function liftRDm is used to lift functions acting on normal data to function performing the same computation on Remote Data.|see liftRD}see liftRD~see liftRDPUVWXYZ[\]^_`abcdeInput function'Process abstraction from input functionfInput function Offline input-Process abstraction; process takes unit inputgProcess abstraction Process inputProcess outputhMachine numberProcess abstraction Process inputProcess outputiFunction for Process Process inputProcess outputjMachine numberProcess abstraction Process inputProcess outputkProcess abstraction Process inputProcess outputlProcess abstraction Process inputProcess outputmProcess abstractionsProcess inputsProcess outputsnMachine numbersProcess abstractionsProcess inputsProcess outputsoProcess abstractionsProcess inputsProcess outputspMachine numbersProcess abstractionsProcess inputsProcess outputsq Input lists'Nondeterministically merged output listr Input lists'Nondeterministically merged output lists\Parameter function that takes a channel name and a substitute for the lazily received value.Forwarded resulttChanName to connect withData that will be sendForwarded to result Result (available after sending)uThe original dataThe Remote Data handlevThe Remote Data handleThe original datawThe original dataThe Remote Data handlexyThe original data2The Remote Data handles, one for each list elementzThe Remote Data handlesThe original data{Function to be lifted Remote input Remote output|Function to be liftedFirst remote inputSecond remote input Remote output}~4 !"#UVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~4Zef\bklmonpgihjUVWcd[Xuwvxyz{|}~Ystqr]^_`a" !#HUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         !"#$%&'()*+,,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ$%&'()*+,,-./0123456789:;<=>?@ABCDEFGHIJRSTUVWXYZ[\]^_`abcdefghijkRlmnoppq+rstuvwxyz{|}~#sppq+rstuvwxyz{|}~edenmodules-1.2.0.0 Control.Parallel.Eden.EdenConcHs#Control.Parallel.Eden.ParPrimConcHsControl.Parallel.Eden.MergeControl.Parallel.Eden.ParPrimControl.Parallel.Eden.EdiControl.Parallel.Edendeepseq-1.3.0.2Control.DeepSeqrnfNFDataMode InstantiateStreamDataConnect ChanName' simInitPesnoPeselfPeforkcreateC connectToPortsendData nmergeIO_Eparallel-3.2.0.4 Control.SeqStrategyusingseqList seqFoldablerseqrdeepseqr0Control.ParallelpseqTranswrite createCommRDChanNameProcessPlacesPALiftdeLift createProcesscpAtrunPAprocessrfi instantiate instantiateAt instantiateFinstantiateFAt#$#spawnspawnAtspawnFspawnFAtmerge mergeProcnewparfillreleasefetch releasePAfetchPA releaseAllfetchAllliftRDliftRD2liftRD3liftRD4spawnProcessAtspawnArgsProcessAtcreateCssendWithsendNFsendStreamWith sendNFStreamChanUntyped ThreadInfotracetoIOcasttoDynfromDynidSupplyfreshIdthrsmyInfomyChan removeThreadchsregisterSender getRemoveCVar updateGetCVarpesVar leftrotatechoosePeQSem_E newQSem_Eqsem_Pqsem_QsuckIO_EthisPEnPEsconnectToPort_ decodeModeCommProcfromPAsendViawrite2write3write4write5write6write7write8write9$fTrans(,,,,,,,,)$fTrans(,,,,,,,)$fTrans(,,,,,,)$fTrans(,,,,,) $fTrans(,,,,) $fTrans(,,,) $fTrans(,,) $fTrans(,) $fTransComm $fTrans[] $fTrans() $fTransEither $fTransMaybe $fTransBool$fTransInteger $fTransChar $fTransDouble $fTransFloat $fTransInt $fNFDataComm $fMonadPArnfMconnectSendNFviasendStreamNFvia$fNFDataChanName'RemoteException$fExceptionRemoteException$fShowRemoteException