Skip to content
  • Rodrigo Mesquita's avatar
    f70fc980
    Refactor ProjectBuilding into Package Phases · f70fc980
    Rodrigo Mesquita authored
    This refactor of Distribution.Client.ProjectBuilding does the following:
    
    * Moves package file monitoring logic to
      Distribution.Client.ProjectBuilding.PackageFileMonitor
    
    * Moves the `buildInplaceUnpackedPackage` and
      `buildAndInstallUnpackedPackage` with auxiliary functions to
      Distribution.Client.ProjectBuilding.UnpackedPackage
    
    * Refactors the common bits of `buildInplaceUnpackedPackage` and
      `buildAndInstallUnpackedPackage` to remove considerable code
      duplication while simplifying and making both functions more
      structured.
    
    Namely, to better structure build inplace vs build and install, I've
    introduced:
    
    * `PackageBuildingPhase` describes the various phases of processing the
      unpacked package both inplace and on install
        * Configure
        * Build
        * Install (copy + register)
        * Test
        * Bench
        * Repl
        * Haddock
    
    * Then, `buildAndRegisterUnpackedPackage` implements the common logic
      between the two functions (such as calls to ./Setup and the order of
      the phases) but delegates the logic specific to each phase to an
      argument function which maps `PackageBuildingPhase` to `IO` actions.
    
    * Now, build inplace and build and install functions are comprised as:
        * A wrapper around `buildAndRegisterUnpackedPackage` which does
          things specific to each before and after the main phases are
          processed
        * A delegate function which maps an action to each package
          processing phase
    
    Fixes #9499
    f70fc980
    Refactor ProjectBuilding into Package Phases
    Rodrigo Mesquita authored
    This refactor of Distribution.Client.ProjectBuilding does the following:
    
    * Moves package file monitoring logic to
      Distribution.Client.ProjectBuilding.PackageFileMonitor
    
    * Moves the `buildInplaceUnpackedPackage` and
      `buildAndInstallUnpackedPackage` with auxiliary functions to
      Distribution.Client.ProjectBuilding.UnpackedPackage
    
    * Refactors the common bits of `buildInplaceUnpackedPackage` and
      `buildAndInstallUnpackedPackage` to remove considerable code
      duplication while simplifying and making both functions more
      structured.
    
    Namely, to better structure build inplace vs build and install, I've
    introduced:
    
    * `PackageBuildingPhase` describes the various phases of processing the
      unpacked package both inplace and on install
        * Configure
        * Build
        * Install (copy + register)
        * Test
        * Bench
        * Repl
        * Haddock
    
    * Then, `buildAndRegisterUnpackedPackage` implements the common logic
      between the two functions (such as calls to ./Setup and the order of
      the phases) but delegates the logic specific to each phase to an
      argument function which maps `PackageBuildingPhase` to `IO` actions.
    
    * Now, build inplace and build and install functions are comprised as:
        * A wrapper around `buildAndRegisterUnpackedPackage` which does
          things specific to each before and after the main phases are
          processed
        * A delegate function which maps an action to each package
          processing phase
    
    Fixes #9499
Loading