úÎ[YYp       DThis structure is how all kinds of useful data is fed into Dyre. Of  course, only the , , and  fields E are really necessary. By using the set of default values provided  as Config.Dyre.defaultParams", you can get all the benefits of E using Dyre to configure your program in only five or six lines of  code. ;The name of the project. This needs to also be the name of ; the executable, and the name of the configuration file. CShould Dyre look for and attempt to compile custom configurations? < Useful for creating program entry points that bypass Dyre's ( recompilation, for testing purposes. 3The directory to look for a configuration file in. ;The directory to store build files in, including the final  generated executable. :The main function of the program. When Dyre has completed > all of its recompilation, it passes the configuration data - to this function and gets out of the way. ;This function is used to display error messages that occur ? during recompilation, by allowing the program to modify its  initial configuration. 3Packages that need to be hidden during compilation /Miscellaneous GHC compilation settings go here -Should GHC be given the -fforce-recomp flag? 7A status output function. Will be called with messages ; when Dyre recompiles or launches anything. A good value  is 'hPutStrLn stderr' , assuming there is no pressing ) reason to not put messages on stderr.       Store Dyre''s command-line options to the IO-Store dyre, 8 and then execute the provided IO action with all Dyre's 4 options removed from the command-line arguments. Get the value of the '--force-reconf' flag, which is used 5 to force a recompile of the custom configuration. Get the value of the '--dyre-debug' flag, which is used : to debug a program without installation. Specifically, $ it forces the application to use  './cache/' as the cache  directory, and ./! as the configuration directory. >Get the path to the master binary. This is set to the path of # the *current* binary unless the '--dyre-master-binary=' flag " is set. Obviously, we pass the '--dyre-master-binary=' flag to = the custom configured application from the master binary. ?Get the path to a persistent state file. This is set only when  the '--dyre-state-persist='# flag is passed to the program. It  is used internally by Config.Dyre.Relaunch to save and restore ' state when relaunching the program. CReturn the set of options which will be passed to another instance D of Dyre. Preserves the master binary, state file, and debug mode  flags, but doesn'/t pass along the forced-recompile flag. Can be C passed a set of other arguments to use, or it defaults to using % the current arguments when passed  . !9Look for the given flag in the argument array, and store 0 its value under the given name if it exists. "9The array of all arguments that Dyre recognizes. Used to + make sure none of them are visible past       ;What it says on the tin. Gets the current PID as a string. B Used to determine the name for the state file during restarts. :Called whenever execution needs to be transferred over to  a different binary. 'Just relaunch the master binary. We don't have any important ( state to worry about. (Or, like when 'relaunchWith<X>State' calls  it, we':re managing state on our own). It takes an argument which C can optionally specify a new set of arguments. If it is given a  value of  , the current value of getArgs will be used. ;Relaunch the master binary, but first preserve the program  state so that we can use the  functions to  get it back again later. /Serialize the state for later restoration with , ( and then relaunch the master binary. #;Calculate the path that will be used for saving the state. @ The path used to load the state, meanwhile, is passed to the  program with the '--dyre-persist-state=<path>' flag. 6Serialize a state as text, for later loading with the   function. 9Serialize a state as binary data, for later loading with  the  function. 4Restore state which has been serialized through the  $ function. Takes a default which is  returned if the state doesn' t exist. 4Restore state which has been serialized through the  $ function. Takes a default which is  returned if the state doesn' t exist. BReturn the paths to, respectively, the current binary, the custom 5 binary, the config file, and the cache directory. CCheck if a file exists. If it exists, return Just the modification  time. If it doesn't exist, return Nothing. AAttempts to compile the configuration file. Will return a string # containing any compiler output. $<Assemble the arguments to GHC so everything compiles right. IA set of reasonable defaults for configuring Dyre. If the minimal set of K fields are modified, the program will use the XDG-defined locations for & configuration and cache files (see System.Environment.XDG.BaseDir for M details), pass no special options to GHC, and will output status messages  to stderr. +The fields that will have to be filled are , , and   = is how Dyre recieves control of the program. It is expected D that it will be partially applied with its parameters to yield a main 1 entry point, which will then be called by the main function, as well $ as by any custom configurations.   %      !"#$%&'()*+,-. dyre-0.7.3Config.Dyre.ParamsConfig.Dyre.OptionsConfig.Dyre.CompatConfig.Dyre.RelaunchConfig.Dyre.PathsConfig.Dyre.Compile Config.DyreParams projectName configCheck configDircacheDirrealMain showError hidePackagesghcOpts forceRecomp statusOutwithDyreOptions getReconfgetDebuggetMasterBinarygetStatePersist customOptions getPIDString customExecrelaunchMasterrelaunchWithTextStaterelaunchWithBinaryState saveTextStatesaveBinaryStaterestoreTextStaterestoreBinaryStategetPaths maybeModTime customCompile defaultParamswrapMainbase Data.MaybeNothing storeFlagdyreArgs genStatePath makeFlags