ú뤧    Safeæ NoneV:6Cmd is the external command like 'cat file.txt' to run.Task is the description of an external processhShell takes a task name and an external command and executes the given callbacks in the provided drivereProcessor has an input channel (for sending commands) and an output channel (for reading the output))The output of running an external processODriver is a collection of functions that describe what to do on process outputÇ(optionally) do something with the task name, and initialize data that will be passed between your handlers. you could store things like the task name, a spinner's position and last spin time, etc. what to do when polling returns g, so it's waiting on more output from the task, but the task still hasn't exited. usually it's sleep.what to do on stdout from the shell command. You could colorize it, append it to list of output (you could keep a list in the a), etc./what to do on stderr. Same things go as stdout. -what to do when a task completes successfully 4what to do when a task doesn't complete successfully rcreates a new processor to run external processes in, spawns a thread to run the processor loop, then returns a Z that can send commands to the processor loop, and react to them with functions from the +executes the given command in the processorPROCESSOR LOOP”run the command, putting any stdout, stderr, and exits into the output channel. will wait until stdout and stderr are empty to write the exit code.Unew async thread, linked to calling thread (will rethrow exceptions on linked thread)write to the channel           !"#'shellout-0.1.0.0-AKAGcUAT8GCBTAaHYQrKjHShelloutPaths_shelloutCmdTaskNameShellDriver initialState handleNothing handleOut handleErr handleSuccess handleFailurenewversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName ProcessorOutputbaseGHC.BaseNothingexecute processorLoopspawnsendMsgErrSuccessFailure