úÎ4¾1ë)      !"#$%&'(None$7The monad in which the processes controller will run. %EThis is the driver for the threads adapter; the number of workers is 6 specified via. the (required) command-line option -n. LNote that there are not seperate drivers for the supervisor process and the Q worker process; instead, the same executable is used for both the supervisor N and the worker, with a sentinel argument (or arguments) determining which  role it should run as. &HThis runs the supervisor, which will spawn and kill worker processes as F needed so that the total number is equal to the number set by the  controller. 'IExplores the given tree using multiple processes to achieve parallelism. IThis function grants access to all of the functionality of this adapter, O rather than having to go through the more restricted driver interface. The M signature of this function is very complicated because it is meant to be M used in both the supervisor and worker; it figures out which role it is Q supposed to play based on whether the list of command line arguments matches  a sentinel. LThe configuration information is divided into two parts: information shared P between the supervisor and the workers, and information that is specific to Q the supervisor and not sent to the workers. (Note that only the former needs F to be serializable.) An action must be supplied that obtains this P configuration information, and most of the arguments are functions that are + given all or part of this information. ((Gets the full path to this executable. )*+,-$./012%&the exploration mode #the path to the worker executable 0the arguments to pass to the worker executable Pan action that writes any information needed by the worker to the given handle !the initial progress of the run {the controller of the supervisor, which must at least set the number of workers to be positive for anything to take place the result of the run 'Aa function that constructs the exploration mode given the shared  configuration the purity of the tree Ean action that gets the shared and supervisor-specific configuration 5 information (run only on the supervisor) Ean action that initializes the global state of the process given the O shared configuration (run on both supervisor and worker processes) Ba function that constructs the tree from the shared configuration ( (called only on the worker) 9an action that gets the starting progress given the full C configuration information (run only on the supervisor) Da function that constructs the controller for the supervisor, which P must at least set the number of workers to be non-zero (called only  on the supervisor) Bif this process is the supervisor, then the outcome of the run as = well as the configuration information wrapped in 3 ; otherwise  4 (56)  !"#$%&'()%$   #"!   &'( )*+,-$./012%&'(567          !"#$%&'()**+,-./00123456789:;9:<=>?!LogicGrowsOnTrees-processes-1.0.0,LogicGrowsOnTrees.Parallel.Adapter.ProcessesLogicGrowsOnTrees-1.0.0.0.1)LogicGrowsOnTrees.Parallel.Common.ProcessrunWorkerUsingHandles runWorker+LogicGrowsOnTrees.Parallel.Common.WorkgroupsetNumberOfWorkerssetNumberOfWorkersAsyncchangeNumberOfWorkerschangeNumberOfWorkersAsyncLogicGrowsOnTrees.Parallel.Main RunOutcomeAborted CompletedFailureTerminationReason.LogicGrowsOnTrees.Parallel.Common.RequestQueuerequestProgressUpdategetNumberOfWorkersgetCurrentProgresssetWorkloadBufferSizerequestProgressUpdateAsyncgetNumberOfWorkersAsyncgetCurrentProgressAsyncforkabort;LogicGrowsOnTrees.Parallel.Common.Supervisor.Implementation+runInstantaneousWorkloadStealTimeStatistics-runInstantaneousWorkloadRequestRateStatisticsrunAvailableWorkloadStatisticsrunWaitingWorkerStatisticsrunStealWaitTimesrunWorkerWaitTimesrunWorkerOccupationrunAverageTimePerCallrunNumberOfCallsrunSupervisorMonadOccupationrunSupervisorOccupation runWallTime runEndTime runStartTime RunStatisticsProcessesControllerMonaddriver runSupervisor runExplorergetProgFilepathWorker read_handle write_handleprocess_handleCunwrapCdebugMinfoMerrorMbase Data.MaybeJustNothingfromJustOrBust,$fHasExplorationModeProcessesControllerMonad