diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,49 @@
+## Tilia 0.0.2.0
+
+* Keep explicit braces on empty cases in both single-line and multiline
+  layouts. [PR 13](https://github.com/mrkkrp/tilia/pull/13).
+* Discover existing `optional-packages` in Cabal projects. [PR
+  13](https://github.com/mrkkrp/tilia/pull/13).
+* Where components share a source directory, format a module with the
+  settings of the component that declares it. [PR
+  13](https://github.com/mrkkrp/tilia/pull/13).
+* Inherit component settings for conditional source directories. [PR
+  13](https://github.com/mrkkrp/tilia/pull/13).
+* Compare formatted CPP configurations under matching branch choices rather
+  than matching the order or number of distinct source strings. [PR
+  13](https://github.com/mrkkrp/tilia/pull/13).
+* Preserve error-only CPP alternatives without parsing them as Haskell. [PR
+  13](https://github.com/mrkkrp/tilia/pull/13).
+* Exclude the files and directories named by a project's `.tiliaignore`.
+  [PR 14](https://github.com/mrkkrp/tilia/pull/14).
+* Keep the whitespace a line of a multi-line string literal ends in. [PR
+  15](https://github.com/mrkkrp/tilia/pull/15).
+* Do not fail on a `SPECIALIZE` expression with no head variable. [PR
+  15](https://github.com/mrkkrp/tilia/pull/15).
+* Put no space between a record and its braces on one line, as in
+  `T{a = 1}`, `x{a = 1}`, and `data T = T{a :: Int}`. [Issue
+  17](https://github.com/mrkkrp/tilia/issues/17).
+* Format only the modules components declare rather than every Haskell
+  file under their source directories. [Issue
+  3](https://github.com/mrkkrp/tilia/issues/3).
+* Format a package's `Setup.hs` with the compiler's default extensions. [PR
+  20](https://github.com/mrkkrp/tilia/pull/20).
+* Read the interfaces of dependencies concurrently, and each one once. [PR
+  23](https://github.com/mrkkrp/tilia/pull/23).
+* Read re-exported operators that contain a vertical bar, such as `.|.`. [PR
+  24](https://github.com/mrkkrp/tilia/pull/24).
+* Read the exports and fixities of dependencies straight out of their
+  interface files rather than through `ghc --show-iface`. [PR
+  24](https://github.com/mrkkrp/tilia/pull/24).
+* Add `--no-cache` to neither read from nor write to the cache. [PR
+  25](https://github.com/mrkkrp/tilia/pull/25).
+* Add `--no-downloads` to not download the sources of dependencies that are
+  missing. [PR 26](https://github.com/mrkkrp/tilia/pull/26).
+* Add `--must-not-decline` to turn declined files into failures. [PR
+  27](https://github.com/mrkkrp/tilia/pull/27).
+* Add `--build-plan` to trust a given build plan as up to date rather than
+  have Cabal solve one. [Issue 4](https://github.com/mrkkrp/tilia/issues/4).
+
 ## Tilia 0.0.1.0
 
 * Initial release.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,5 +1,15 @@
 # Tilia
 
+* [Getting started](#getting-started)
+* [Excluding files](#excluding-files)
+* [Formatting operator chains](#formatting-operator-chains)
+* [Formatting CPP](#formatting-cpp)
+* [Comparison with other formatters](#comparison-with-other-formatters)
+* [Suggested setup per use-case](#suggested-setup-per-use-case)
+* [Development](#development)
+* [Contribution](#contribution)
+* [License](#license)
+
 Tilia is a formatter for Haskell source code. Its primary design choices
 are:
 
@@ -12,6 +22,10 @@
 * Guarantee inference of operator fixity with absolute precision at all
   times.
 
+*If you are curious how Tilia works, see this [blog post][blog-post].*
+
+[blog-post]: https://markkarpov.com/post/announcing-tilia
+
 ## Getting started
 
 The two most useful (and only!) commands are `inplace` and `check`:
@@ -47,10 +61,11 @@
 `cabal.project` or a `.cabal` file. A `cabal.project` anywhere above wins
 over a `.cabal` file that is nearer, so a package inside a multi-package
 repository resolves to the repository. It is worth pointing out that a
-package in the tree that the `packages` field does not name is not part of
-the project and will not be visited. Within a package, a component's
-`hs-source-dirs` say which files belong to it, and every `.hs`, `.hs-boot`,
-and `.hsig` under them gets formatted.
+package in the tree that neither `packages` nor `optional-packages` names is
+not part of the project and will not be visited. Within a package, only the
+modules a component declares get formatted: its `exposed-modules`,
+`other-modules`, `signatures`, and `main-is`, in every conditional branch,
+found under its `hs-source-dirs` as `.hs`, `.hs-boot`, or `.hsig` files.
 
 If there is no build plan yet, or it is older than the `.cabal` and
 `cabal.project` files, or it says nothing about a component you asked for,
@@ -70,11 +85,34 @@
 
 Finally, here are some other flags that may be of interest:
 
-* `--check-ast` performs an AST-equivalence check;
-* `--check-idempotence` performs an idempotence check;
+* `--check-ast` performs an AST-equivalence check.
+* `--check-idempotence` performs an idempotence check.
 * `--debug-fixity` prints information that is useful for debugging
   formatting of operator chains.
+* `--build-plan PLAN` trusts a given build plan as up to date rather than
+  having Cabal solve one, see [Haskell.nix](#haskellnix).
+* `--no-cache` neither reads from nor writes to the cache.
+* `--no-downloads` does not download sources that are missing, and a file
+  whose operators come from a dependency that could not be read is then
+  declined.
+* `--must-not-decline` turns declined files into failures.
 
+## Excluding files
+
+You can tell Tilia to skip certain files and/or directories. To do so, list
+their paths in a `.tiliaignore` file at the project root:
+
+```gitignore
+# Fixtures compiled by a separate driver
+tests/shouldwork/
+tests/shouldfail/
+```
+
+Entries are literal file or directory paths relative to the project root,
+and a directory excludes everything below it. Blank lines, surrounding
+whitespace, and lines beginning with `#` are ignored. Wildcards and
+re-inclusion patterns are not supported.
+
 ## Formatting operator chains
 
 There is nothing you need to know about it or do to make it work. It will
@@ -87,6 +125,121 @@
 enclosed in a conditional branch will format, and it does not even need to
 be self-contained valid Haskell on its own, as long as every configuration
 of the module is a valid Haskell module.
+
+## Comparison with other formatters
+
+### Ormolu
+
+* Ormolu formats operator chains by consulting a hardcoded library of
+  operator fixities which it builds partly by running a rudimentary
+  analysis over some hand-picked packages and partly by consuming a Hoogle
+  dump. That hardcoded fixity library is built during development and then
+  bundled into the executable. The library is necessarily both incomplete
+  and prone to going out of date. Furthermore, Ormolu does not
+  automatically account for custom operators that occur in the code it is
+  asked to format. For that you need to write `.ormolu` files in which you
+  redeclare the fixities of your custom operators and any relevant
+  re-exports. Tilia guarantees resolution of operator fixities
+  automatically at all times.
+* Ormolu's CPP support is rudimentary. It splits the input file into
+  sections that must be parseable on their own, then preserves CPP
+  conditional blocks verbatim. First, the requirement for the sections to
+  be parseable on their own is only sometimes satisfied—CPP directives
+  tend to fall at arbitrary points in the code, which makes Ormolu choke.
+  Second, preserving CPP conditional blocks verbatim is not good enough.
+  For example, if Ormolu re-indents the surrounding code and the CPP
+  conditional block stays as it was, the result is broken code.
+* Ormolu has a very different CLI focused on explicit file names, so that
+  its users find themselves running invocations like
+  `ormolu -i $(git ls-files '*.hs' '*.hs-boot')`. Tilia focuses on Cabal
+  components, which is arguably better ergonomics.
+* Ormolu supports magic comments `{- ORMOLU_DISABLE -}` and
+  `{- ORMOLU_ENABLE -}` while Tilia has no equivalent to those. The
+  comments were introduced to work around the weaknesses of Ormolu's CPP
+  support as well as its inability to respect grouping of certain types of
+  definitions that the users wanted to preserve. Tilia both respects
+  grouping in more situations and has first-class support for CPP, so
+  these comments are not needed.
+* Ormolu can be asked to format regions in a file with `--start-line` and
+  `--end-line` options. Tilia has no such functionality since it operates
+  at a higher level (Cabal components or whole projects), which is aligned
+  with the current trends in software development.
+* Ormolu is self-contained and makes no assumption about tools on the
+  system where it is run. Tilia needs Cabal: it shells out to it and may
+  download packages, unless the build plan is given with `--build-plan`
+  and downloads are ruled out with `--no-downloads`. Ormolu does none of
+  this, which may be an advantage in some situations.
+
+### Fourmolu
+
+* Fourmolu is a configurable fork of Ormolu which shares the same
+  architecture, strengths, and weaknesses.
+
+## Suggested setup per use-case
+
+### Local development
+
+Have `cabal` and the compiler your project is built with on `PATH`, as you
+would to build it, and nothing else needs setting up. Tilia gets the build
+plan and the sources of dependencies through Cabal as described above, and
+maintains its cache in the user's cache directory: `~/.cache/tilia`, or
+`%LOCALAPPDATA%\tilia` on Windows.
+
+### CI with Cabal
+
+On GitHub Actions, [setup-tilia](https://github.com/mrkkrp/setup-tilia)
+installs Tilia and maintains its caches automatically, keyed on the version
+of Tilia and on your `.cabal` and `cabal.project` files:
+
+```yaml
+- uses: haskell-actions/setup@v2
+  with:
+    ghc-version: '9.10.3'
+- uses: actions/checkout@v7
+- uses: mrkkrp/setup-tilia@v1
+- run: tilia check
+```
+
+Nothing has to be built before the check.
+
+### Haskell.nix
+
+[haskell.nix](https://github.com/input-output-hk/haskell.nix) builds each
+component with every dependency already installed and keeps the plan it
+solved in `plan-nix`. `--build-plan` points Tilia at that plan, so Cabal is
+not asked to solve one, and with `--no-downloads` nothing is fetched either:
+only the interfaces of what is installed are read. Cabal is then not run at
+all and need not be installed.
+
+This makes a formatting check that runs as part of the build, before a
+component is compiled, with no development shell to set up for it. Each
+component is built from the whole package source, so each checks the
+component it builds:
+
+```nix
+project = pkgs.haskell-nix.cabalProject {
+  # ...
+  modules = [{
+    packages.my-package.components = {
+      library.preBuild = tiliaCheck "lib:my-package";
+      exes.my-exe.preBuild = tiliaCheck "exe:my-exe";
+    };
+  }];
+};
+tiliaCheck = target: ''
+  ${tilia.packages.${system}.default}/bin/tilia check ${target} \
+    --build-plan ${project.plan-nix}/plan.json \
+    --no-cache \
+    --no-downloads \
+    --must-not-decline
+'';
+```
+
+Here `tilia` is this repository as a flake input. There is nowhere to keep a
+cache between Nix builds, hence `--no-cache`, so every check reads the
+interfaces it needs again, which has been optimized to perform nearly as
+fast as a cached run outside of Nix (a fraction of a second on a project the
+size of Tilia).
 
 ## Development
 
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -6,8 +6,9 @@
 module Main (main) where
 
 import Control.Monad (when)
-import Data.Choice (Choice, fromBool)
+import Data.Choice (Choice, fromBool, isTrue)
 import Data.Foldable (traverse_)
+import Data.Maybe (mapMaybe)
 import Data.Text (Text)
 import Data.Text.IO qualified as T
 import Data.Version (showVersion)
@@ -26,9 +27,20 @@
     stderr,
     stdout,
   )
+import Tilia.Cabal.Project (ProjectRoot, findProjectRoot)
+import Tilia.Cabal.Target
+  ( Component,
+    Target,
+    componentInPlan,
+    componentsOfTarget,
+    describeTargetProblem,
+    filesOfComponents,
+    parseTarget,
+  )
 import Tilia.Fixity.Debug (renderFixityNotes)
 import Tilia.Format
   ( FormatError,
+    PlanSource (..),
     describeFormatError,
     fixityNotesOf,
     formatErrorExitCode,
@@ -36,53 +48,51 @@
   )
 import Tilia.Palette (Color (Bad), Palette, paletteFor)
 import Tilia.Parser (ghcLibParserVersion)
-import Tilia.Project (findProjectRoot)
 import Tilia.Run
   ( Outcome,
     Report (..),
     checkReport,
     differs,
     exitCodeOf,
+    failIfDeclined,
     inplaceReport,
     noted,
     runOver,
     writeBack,
   )
-import Tilia.Target
-  ( Component,
-    Target,
-    componentInPlan,
-    componentsOfTarget,
-    describeTargetProblem,
-    filesOfComponents,
-    parseTarget,
-  )
 import Tilia.Utils (lineWidth, quietly)
 
 -- | The program's entry point.
 main :: IO ()
 main = do
   traverse_ transliterateUnprintable [stdout, stderr]
-  Opts {..} <- customExecParser (prefs (columns lineWidth)) optsParserInfo
+  Opts{..} <- customExecParser (prefs (columns lineWidth)) optsParserInfo
   palette <- paletteFor
   target <-
     either
       (die usageExitCode palette)
       pure
       (maybe (parseTarget "all") parseTarget optTarget)
-  components <- componentsFor palette target
+  (root, components) <- componentsFor palette target
   files <-
     traverse makeRelativeToCurrentDirectory
-      =<< filesOfComponents components
+      =<< filesOfComponents root components
   session <-
     newSession
       "."
-      (componentInPlan <$> components)
+      ( case optBuildPlan of
+          Nothing -> PlanFromCabal (mapMaybe componentInPlan components)
+          Just givenPlan -> GivenPlan givenPlan
+      )
+      optUseCache
+      optDownload
       optCheckAst
       optCheckIdempotence
       optDebugFixity
       >>= either (dieFormatting palette) pure
-  outcomes <- runOver session files
+  outcomes <-
+    (if isTrue optMustNotDecline then fmap (fmap failIfDeclined) else id)
+      <$> runOver session files
   fixityNotesOf session
     >>= traverse_ (T.hPutStrLn stderr) . renderFixityNotes palette
   case optMode of
@@ -92,7 +102,8 @@
     Check -> printReport (checkReport palette outcomes)
   exitWith optMode outcomes
 
--- | Transliterate unprintable characters if the stream cannot handle them.
+-- | Transliterate unprintable characters if the output stream cannot handle
+-- them.
 transliterateUnprintable :: Handle -> IO ()
 transliterateUnprintable h =
   quietly () $
@@ -103,13 +114,17 @@
             hSetEncoding h =<< mkTextEncoding (name <> "//TRANSLIT")
       _ -> pure ()
 
--- | Exit the way the run turned out.
+-- | Exit with a status code determined by 'Mode' of operation and the
+-- formatting 'Outcome's.
 exitWith :: Mode -> [(FilePath, Outcome)] -> IO ()
 exitWith mode outcomes = case exitCodeOf outcomes of
   Just code -> System.Exit.exitWith (ExitFailure code)
   Nothing -> case mode of
     Inplace -> pure ()
-    Check -> when (any (differs . snd) outcomes) (System.Exit.exitWith (ExitFailure 1))
+    Check ->
+      when
+        (any (differs . snd) outcomes)
+        (System.Exit.exitWith (ExitFailure 1))
 
 -- | Print a 'Report'.
 printReport :: Report -> IO ()
@@ -119,16 +134,19 @@
   traverse_ (T.hPutStrLn stderr) (reportErr report)
   hFlush stderr
 
--- | Every component the target asks for.
-componentsFor :: Palette -> Target -> IO [Component]
+-- | Every component the target asks for, and the project they were found
+-- in, which is where the run's settings are read from as well.
+componentsFor :: Palette -> Target -> IO (ProjectRoot, [Component])
 componentsFor palette target =
   findProjectRoot "." >>= \case
     Nothing ->
       die 2 palette "no cabal.project or .cabal file at or above the working directory"
     Just root ->
       componentsOfTarget root target >>= \case
-        Left problem -> die usageExitCode palette (describeTargetProblem problem)
-        Right components -> pure components
+        Left problem ->
+          die usageExitCode palette (describeTargetProblem problem)
+        Right components ->
+          pure (root, components)
 
 -- | What @sysexits.h@ has called a usage error since 4.3BSD, and well clear
 -- of the codes 'formatErrorExitCode' returns.
@@ -149,10 +167,10 @@
 ----------------------------------------------------------------------------
 -- Command line options
 
--- | What a run was asked to do.
+-- | The mode of operation.
 data Mode = Inplace | Check
 
--- | The options a run was given.
+-- | The command line options.
 data Opts = Opts
   { -- | The mode of operation.
     optMode :: Mode,
@@ -163,7 +181,15 @@
     -- | Whether to check idempotence.
     optCheckIdempotence :: Choice "checkIdempotence",
     -- | Whether to print debugging information about fixities.
-    optDebugFixity :: Choice "debugFixity"
+    optDebugFixity :: Choice "debugFixity",
+    -- | A build plan to trust as up to date.
+    optBuildPlan :: Maybe FilePath,
+    -- | Whether to read from and write to the cache.
+    optUseCache :: Choice "useCache",
+    -- | Whether to download sources that are missing.
+    optDownload :: Choice "download",
+    -- | Whether to count declined files as failed.
+    optMustNotDecline :: Choice "mustNotDecline"
   }
 
 optsParserInfo :: ParserInfo Opts
@@ -171,19 +197,27 @@
   info (helper <*> versionOption <*> optsParser) . mconcat $
     [ fullDesc,
       progDesc "Format Haskell source code",
-      header "tilia - a formatter for Haskell source code"
+      header "tilia — a formatter for Haskell source code"
     ]
   where
     versionOption =
       infoOption
-        ("tilia " ++ showVersion version ++ "\nusing ghc-lib-parser " ++ ghcLibParserVersion)
+        ( "tilia "
+            ++ showVersion version
+            ++ "\nusing ghc-lib-parser "
+            ++ ghcLibParserVersion
+        )
         (long "version" <> short 'v' <> help "Print version of the program")
 
 optsParser :: Parser Opts
 optsParser =
   hsubparser . mconcat $
-    [ command "inplace" (info (parser Inplace) (progDesc "Format files, in place")),
-      command "check" (info (parser Check) (progDesc "Report what formatting would change, and fail if anything would"))
+    [ command
+        "inplace"
+        (info (parser Inplace) (progDesc "Format files, in place")),
+      command
+        "check"
+        (info (parser Check) (progDesc "Report what formatting would change, and fail if anything would"))
     ]
   where
     parser mode =
@@ -192,6 +226,10 @@
         <*> checkAstSwitch
         <*> checkIdempotenceSwitch
         <*> debugFixitySwitch
+        <*> optional buildPlanOption
+        <*> noCacheSwitch
+        <*> noDownloadsSwitch
+        <*> mustNotDeclineSwitch
     checkAstSwitch =
       fromBool
         <$> (switch . mconcat)
@@ -209,6 +247,30 @@
         <$> (switch . mconcat)
           [ long "debug-fixity",
             help "Print debugging information about fixities"
+          ]
+    buildPlanOption =
+      (strOption . mconcat)
+        [ long "build-plan",
+          metavar "PLAN",
+          help "Trust this plan.json as up to date rather than have Cabal solve one"
+        ]
+    noCacheSwitch =
+      fromBool . not
+        <$> (switch . mconcat)
+          [ long "no-cache",
+            help "Neither read from nor write to the cache"
+          ]
+    noDownloadsSwitch =
+      fromBool . not
+        <$> (switch . mconcat)
+          [ long "no-downloads",
+            help "Do not download sources that are missing"
+          ]
+    mustNotDeclineSwitch =
+      fromBool
+        <$> (switch . mconcat)
+          [ long "must-not-decline",
+            help "Fail on files that would otherwise be declined"
           ]
     targetArgument =
       (strArgument . mconcat)
diff --git a/corpora/hackage/hackage.manifest b/corpora/hackage/hackage.manifest
--- a/corpora/hackage/hackage.manifest
+++ b/corpora/hackage/hackage.manifest
@@ -5,5201 +5,5201 @@
 # not.
 
 formatted       8deb10445c00  Agda-2.8.0/src/agda-mode/Main.hs
-formatted       4e93ad007cfb  Agda-2.8.0/src/data/MAlonzo/src/MAlonzo/RTE.hs
-formatted       4e3f28ed5e54  Agda-2.8.0/src/data/MAlonzo/src/MAlonzo/RTE/Float.hs
-formatted       111f8e7154e9  Agda-2.8.0/src/full/Agda/Benchmarking.hs
-formatted       8080793f0fa5  Agda-2.8.0/src/full/Agda/Compiler/Backend.hs
-formatted       98789e7a7f39  Agda-2.8.0/src/full/Agda/Compiler/Backend/Base.hs
-formatted       b8be5cf3b8d8  Agda-2.8.0/src/full/Agda/Compiler/Builtin.hs
-formatted       ef45f44548b6  Agda-2.8.0/src/full/Agda/Compiler/CallCompiler.hs
-formatted       c83ed61f571c  Agda-2.8.0/src/full/Agda/Compiler/Common.hs
-formatted       591432260542  Agda-2.8.0/src/full/Agda/Compiler/JS/Compiler.hs
-formatted       ca0717d44b6a  Agda-2.8.0/src/full/Agda/Compiler/JS/Pretty.hs
-formatted       f3ee347549c0  Agda-2.8.0/src/full/Agda/Compiler/JS/Substitution.hs
-formatted       bb8f414ff908  Agda-2.8.0/src/full/Agda/Compiler/JS/Syntax.hs
-formatted       38a999dc0841  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Coerce.hs
-formatted       724b18d39db9  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Compiler.hs
-formatted       a5e37499e9c4  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Encode.hs
-formatted       bf9e10f9443d  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/HaskellTypes.hs
-formatted       aa62f795f1b2  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Misc.hs
-formatted       63bb8f6c7f1d  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Pragmas.hs
-formatted       550643b1a281  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Pretty.hs
-formatted       8431d6301172  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Primitives.hs
-formatted       d1a6c45e8549  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Strict.hs
-formatted       5024f9b4392b  Agda-2.8.0/src/full/Agda/Compiler/ToTreeless.hs
-formatted       fcf0c3d029c1  Agda-2.8.0/src/full/Agda/Compiler/Treeless/AsPatterns.hs
-formatted       e4084ca4a00b  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Builtin.hs
-formatted       ce128b9cab5e  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Compare.hs
-formatted       f24d73001033  Agda-2.8.0/src/full/Agda/Compiler/Treeless/EliminateDefaults.hs
-formatted       ebfd63fc43ed  Agda-2.8.0/src/full/Agda/Compiler/Treeless/EliminateLiteralPatterns.hs
-formatted       d11b630a3f26  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Erase.hs
-formatted       4bf71aa72967  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Erase.hs-boot
-formatted       e3c866a3b262  Agda-2.8.0/src/full/Agda/Compiler/Treeless/GuardsToPrims.hs
-formatted       861aba1dcf19  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Identity.hs
-formatted       39d8ddd0447e  Agda-2.8.0/src/full/Agda/Compiler/Treeless/NormalizeNames.hs
-formatted       79a064f98a58  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Pretty.hs
-formatted       9e9ffec9fb88  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Pretty.hs-boot
-formatted       cca1261b95c2  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Simplify.hs
-formatted       3750c8bfe53a  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Subst.hs
-formatted       e0117fa2b8cc  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Uncase.hs
-formatted       185411c97f8d  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Unused.hs
-formatted       3985ec175c5f  Agda-2.8.0/src/full/Agda/ImpossibleTest.hs
-formatted       2dd615d81e66  Agda-2.8.0/src/full/Agda/Interaction/AgdaTop.hs
-formatted       e41de99732fd  Agda-2.8.0/src/full/Agda/Interaction/Base.hs
-formatted       e47314761701  Agda-2.8.0/src/full/Agda/Interaction/BasicOps.hs
-formatted       a799c433771a  Agda-2.8.0/src/full/Agda/Interaction/BuildLibrary.hs
-formatted       eb4048782016  Agda-2.8.0/src/full/Agda/Interaction/Command.hs
-formatted       27569f5bd988  Agda-2.8.0/src/full/Agda/Interaction/CommandLine.hs
-formatted       ab83a5beeab5  Agda-2.8.0/src/full/Agda/Interaction/EmacsCommand.hs
-formatted       555155a56d86  Agda-2.8.0/src/full/Agda/Interaction/EmacsTop.hs
-formatted       720e5305288c  Agda-2.8.0/src/full/Agda/Interaction/ExitCode.hs
-formatted       7691578538c0  Agda-2.8.0/src/full/Agda/Interaction/FindFile.hs
-formatted       3170eb1921b4  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Common.hs
-formatted       1fb0462a1b45  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Dot.hs
-formatted       604a1fd2d42f  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Dot/Backend.hs
-formatted       fc10621b7e2c  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Dot/Base.hs
-formatted       773365a6b3e4  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Emacs.hs
-formatted       ff75327912fc  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/FromAbstract.hs
-formatted       a8d4144bdde2  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Generate.hs
-formatted       8bc140b18e62  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Generate.hs-boot
-formatted       9a3fde618f2b  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/HTML.hs
-formatted       99b5ef12d008  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/HTML/Backend.hs
-formatted       b17a80a34eff  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/HTML/Base.hs
-formatted       d36037cbeadf  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/JSON.hs
-formatted       b5bb035e43f1  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/LaTeX.hs
-formatted       7f14d85b664e  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/LaTeX/Backend.hs
-formatted       dd1725a94427  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/LaTeX/Base.hs
-formatted       ab86c6631700  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Precise.hs
-formatted       83c7932f742c  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Range.hs
-formatted       0054edf8b9e6  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Vim.hs
-formatted       767a9afa8f4b  Agda-2.8.0/src/full/Agda/Interaction/Imports.hs
-formatted       65e8798f3384  Agda-2.8.0/src/full/Agda/Interaction/Imports.hs-boot
-formatted       3cfa9e2d2bbf  Agda-2.8.0/src/full/Agda/Interaction/InteractionTop.hs
-formatted       3424b7b23f57  Agda-2.8.0/src/full/Agda/Interaction/JSON.hs
-formatted       ee7c581ca624  Agda-2.8.0/src/full/Agda/Interaction/JSONTop.hs
-formatted       b1854ec69b1d  Agda-2.8.0/src/full/Agda/Interaction/Library.hs
-formatted       d4a922d69a6c  Agda-2.8.0/src/full/Agda/Interaction/Library/Base.hs
-formatted       79e462154a68  Agda-2.8.0/src/full/Agda/Interaction/Library/Parse.hs
-formatted       64d6fc3383fb  Agda-2.8.0/src/full/Agda/Interaction/MakeCase.hs
-formatted       555b4179be0a  Agda-2.8.0/src/full/Agda/Interaction/Monad.hs
-formatted       c831a742f557  Agda-2.8.0/src/full/Agda/Interaction/Options.hs
-formatted       828aef6a3731  Agda-2.8.0/src/full/Agda/Interaction/Options/Base.hs
-formatted       d1a377c4a707  Agda-2.8.0/src/full/Agda/Interaction/Options/Errors.hs
-formatted       e44ed789f5f9  Agda-2.8.0/src/full/Agda/Interaction/Options/HasOptions.hs
-formatted       434d46226886  Agda-2.8.0/src/full/Agda/Interaction/Options/Help.hs
-formatted       1241fd26a436  Agda-2.8.0/src/full/Agda/Interaction/Options/Lenses.hs
-formatted       0cacf2e95f8d  Agda-2.8.0/src/full/Agda/Interaction/Options/Types.hs
-formatted       865f0c039c33  Agda-2.8.0/src/full/Agda/Interaction/Options/Warnings.hs
-formatted       11f05a0591fc  Agda-2.8.0/src/full/Agda/Interaction/Output.hs
-formatted       772e302dedad  Agda-2.8.0/src/full/Agda/Interaction/Response.hs
-formatted       77cf584c94f3  Agda-2.8.0/src/full/Agda/Interaction/Response/Base.hs
-formatted       150002ef2df6  Agda-2.8.0/src/full/Agda/Interaction/SearchAbout.hs
-declined        -             Agda-2.8.0/src/full/Agda/Main.hs
-formatted       b3fbe2c6389d  Agda-2.8.0/src/full/Agda/Mimer/Mimer.hs
-formatted       5ee8e2854fd8  Agda-2.8.0/src/full/Agda/Mimer/Options.hs
-formatted       4513e6faa1f1  Agda-2.8.0/src/full/Agda/Syntax/Abstract.hs
-formatted       ed5b0f0a1630  Agda-2.8.0/src/full/Agda/Syntax/Abstract/Name.hs
-formatted       992febb98ad9  Agda-2.8.0/src/full/Agda/Syntax/Abstract/Pattern.hs
-formatted       8f9f098701be  Agda-2.8.0/src/full/Agda/Syntax/Abstract/PatternSynonyms.hs
-formatted       3f1f9a03363a  Agda-2.8.0/src/full/Agda/Syntax/Abstract/Pretty.hs
-formatted       4fdca8ef893f  Agda-2.8.0/src/full/Agda/Syntax/Abstract/UsedNames.hs
-formatted       120c37e72495  Agda-2.8.0/src/full/Agda/Syntax/Abstract/Views.hs
-formatted       4860938107fe  Agda-2.8.0/src/full/Agda/Syntax/Builtin.hs
-formatted       b915aac0abef  Agda-2.8.0/src/full/Agda/Syntax/Common.hs
-formatted       e4fbe59bf094  Agda-2.8.0/src/full/Agda/Syntax/Common/Aspect.hs
-formatted       25d40d92c083  Agda-2.8.0/src/full/Agda/Syntax/Common/KeywordRange.hs
-formatted       bddb87a288f9  Agda-2.8.0/src/full/Agda/Syntax/Common/Pretty.hs
-formatted       0b01caf3aafb  Agda-2.8.0/src/full/Agda/Syntax/Common/Pretty/ANSI.hs
-formatted       6dfde2d67e3b  Agda-2.8.0/src/full/Agda/Syntax/Concrete.hs
-formatted       00ae9aed3826  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Attribute.hs
-formatted       775eefd66300  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Definitions.hs
-formatted       ac99ea65d8d0  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Definitions/Errors.hs
-formatted       3383d8244565  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Definitions/Monad.hs
-formatted       0c9352e12d50  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Definitions/Types.hs
-formatted       5104de9d5636  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Fixity.hs
-formatted       2ef3d6e9d84d  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Generic.hs
-formatted       6a2db093db8c  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Glyph.hs
-formatted       e23bf915bdc1  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Name.hs
-formatted       c075c7cb4c0b  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Operators.hs
-formatted       332b0602c260  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Operators/Parser.hs
-formatted       d052bdb98637  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Operators/Parser/Monad.hs
-formatted       ab5dcacbdf6e  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Pattern.hs
-formatted       3a81fcfb623a  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Pretty.hs
-formatted       a4b545b06abe  Agda-2.8.0/src/full/Agda/Syntax/DoNotation.hs
-formatted       232b18d60ee2  Agda-2.8.0/src/full/Agda/Syntax/Fixity.hs
-formatted       cfd07520b531  Agda-2.8.0/src/full/Agda/Syntax/IdiomBrackets.hs
-formatted       79409485ed3e  Agda-2.8.0/src/full/Agda/Syntax/Info.hs
-formatted       f69fe6ede869  Agda-2.8.0/src/full/Agda/Syntax/Internal.hs
-formatted       0e29f775f790  Agda-2.8.0/src/full/Agda/Syntax/Internal/Blockers.hs
-formatted       8a379f39a418  Agda-2.8.0/src/full/Agda/Syntax/Internal/Defs.hs
-formatted       150656090085  Agda-2.8.0/src/full/Agda/Syntax/Internal/Elim.hs
-formatted       16f733f04829  Agda-2.8.0/src/full/Agda/Syntax/Internal/Generic.hs
-formatted       05c9219e868e  Agda-2.8.0/src/full/Agda/Syntax/Internal/MetaVars.hs
-formatted       7d2cf90ab69b  Agda-2.8.0/src/full/Agda/Syntax/Internal/Names.hs
-formatted       3bb3112a21db  Agda-2.8.0/src/full/Agda/Syntax/Internal/Pattern.hs
-formatted       4f0688215ae9  Agda-2.8.0/src/full/Agda/Syntax/Internal/SanityCheck.hs
-formatted       dc9c871223a7  Agda-2.8.0/src/full/Agda/Syntax/Internal/Univ.hs
-formatted       5c12e7741878  Agda-2.8.0/src/full/Agda/Syntax/Literal.hs
-formatted       912aaf4945c5  Agda-2.8.0/src/full/Agda/Syntax/Notation.hs
-formatted       d38be9906bda  Agda-2.8.0/src/full/Agda/Syntax/Parser.hs
-formatted       bbd0148c6f3c  Agda-2.8.0/src/full/Agda/Syntax/Parser/Alex.hs
-formatted       040f0691743c  Agda-2.8.0/src/full/Agda/Syntax/Parser/Comments.hs
-formatted       aa98a9c8fab8  Agda-2.8.0/src/full/Agda/Syntax/Parser/Helpers.hs
-formatted       962b19f0478d  Agda-2.8.0/src/full/Agda/Syntax/Parser/Layout.hs
-formatted       700549be6fd6  Agda-2.8.0/src/full/Agda/Syntax/Parser/Layout.hs-boot
-formatted       aa496d556481  Agda-2.8.0/src/full/Agda/Syntax/Parser/LexActions.hs
-formatted       a5d57cb1b6b9  Agda-2.8.0/src/full/Agda/Syntax/Parser/LexActions.hs-boot
-formatted       8bcd7e473217  Agda-2.8.0/src/full/Agda/Syntax/Parser/Literate.hs
-formatted       bd9441d27edb  Agda-2.8.0/src/full/Agda/Syntax/Parser/LookAhead.hs
-formatted       988b42cfcde3  Agda-2.8.0/src/full/Agda/Syntax/Parser/Monad.hs
-formatted       6b041886ce39  Agda-2.8.0/src/full/Agda/Syntax/Parser/StringLiterals.hs
-formatted       2c4b958b94a9  Agda-2.8.0/src/full/Agda/Syntax/Parser/Tokens.hs
-formatted       aa9d78064d47  Agda-2.8.0/src/full/Agda/Syntax/Position.hs
-formatted       d16539c2a462  Agda-2.8.0/src/full/Agda/Syntax/Position.hs-boot
-formatted       b1dd8bfd3111  Agda-2.8.0/src/full/Agda/Syntax/Reflected.hs
-formatted       bb9a2f130d18  Agda-2.8.0/src/full/Agda/Syntax/Scope/Base.hs
-formatted       6ff9f287871d  Agda-2.8.0/src/full/Agda/Syntax/Scope/Flat.hs
-formatted       3f7e4d1c297e  Agda-2.8.0/src/full/Agda/Syntax/Scope/Monad.hs
-formatted       5751db976d34  Agda-2.8.0/src/full/Agda/Syntax/TopLevelModuleName.hs
-formatted       ac2fc82ba8a4  Agda-2.8.0/src/full/Agda/Syntax/TopLevelModuleName/Boot.hs
-formatted       09f51b9e33b1  Agda-2.8.0/src/full/Agda/Syntax/Translation/AbstractToConcrete.hs
-formatted       c0d33e44c05c  Agda-2.8.0/src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs
-formatted       4db4a0bb2579  Agda-2.8.0/src/full/Agda/Syntax/Translation/InternalToAbstract.hs
-formatted       4c1a1033f8d5  Agda-2.8.0/src/full/Agda/Syntax/Translation/ReflectedToAbstract.hs
-formatted       2ae972608fb0  Agda-2.8.0/src/full/Agda/Syntax/Treeless.hs
-formatted       25f21c7793f4  Agda-2.8.0/src/full/Agda/Termination/CallGraph.hs
-formatted       fec59f499d06  Agda-2.8.0/src/full/Agda/Termination/CallMatrix.hs
-formatted       ebc4ce14c917  Agda-2.8.0/src/full/Agda/Termination/CutOff.hs
-formatted       7978d5a44013  Agda-2.8.0/src/full/Agda/Termination/Monad.hs
-formatted       9436ec427f9a  Agda-2.8.0/src/full/Agda/Termination/Order.hs
-formatted       0f8827158a99  Agda-2.8.0/src/full/Agda/Termination/RecCheck.hs
-formatted       b6a7543ba3d1  Agda-2.8.0/src/full/Agda/Termination/Semiring.hs
-formatted       2978d402a77e  Agda-2.8.0/src/full/Agda/Termination/SparseMatrix.hs
-formatted       8fdc334dfc0f  Agda-2.8.0/src/full/Agda/Termination/TermCheck.hs
-formatted       ed0ea780ef94  Agda-2.8.0/src/full/Agda/Termination/Termination.hs
-formatted       9ce4d907acfa  Agda-2.8.0/src/full/Agda/TheTypeChecker.hs
-formatted       697581af4578  Agda-2.8.0/src/full/Agda/TypeChecking/Abstract.hs
-formatted       7066ed85a0fa  Agda-2.8.0/src/full/Agda/TypeChecking/CheckInternal.hs
-formatted       2d6bbce1312f  Agda-2.8.0/src/full/Agda/TypeChecking/CheckInternal.hs-boot
-formatted       e158edb02d76  Agda-2.8.0/src/full/Agda/TypeChecking/CompiledClause.hs
-formatted       e807c1d8a459  Agda-2.8.0/src/full/Agda/TypeChecking/CompiledClause/Compile.hs
-formatted       6b8cf4277b16  Agda-2.8.0/src/full/Agda/TypeChecking/CompiledClause/Compile.hs-boot
-formatted       a51bcd9a85c8  Agda-2.8.0/src/full/Agda/TypeChecking/CompiledClause/Match.hs
-formatted       3142e5d8c639  Agda-2.8.0/src/full/Agda/TypeChecking/CompiledClause/Match.hs-boot
-formatted       1c45f74cdbf6  Agda-2.8.0/src/full/Agda/TypeChecking/Constraints.hs
-formatted       47ac61419563  Agda-2.8.0/src/full/Agda/TypeChecking/Constraints.hs-boot
-broken          1b7f9f60a42c  Agda-2.8.0/src/full/Agda/TypeChecking/Conversion.hs
-formatted       cc3a6f5cf005  Agda-2.8.0/src/full/Agda/TypeChecking/Conversion.hs-boot
-formatted       330bf1da7807  Agda-2.8.0/src/full/Agda/TypeChecking/Conversion/Pure.hs
-formatted       4967e1b8d4f6  Agda-2.8.0/src/full/Agda/TypeChecking/Coverage.hs
-formatted       2269cd66c46c  Agda-2.8.0/src/full/Agda/TypeChecking/Coverage/Cubical.hs
-formatted       12c1a3918395  Agda-2.8.0/src/full/Agda/TypeChecking/Coverage/Match.hs
-formatted       66752ed436cd  Agda-2.8.0/src/full/Agda/TypeChecking/Coverage/SplitClause.hs
-formatted       860fb8b6d684  Agda-2.8.0/src/full/Agda/TypeChecking/Coverage/SplitTree.hs
-formatted       e11eb64dcee6  Agda-2.8.0/src/full/Agda/TypeChecking/Datatypes.hs
-formatted       bf771aa7c583  Agda-2.8.0/src/full/Agda/TypeChecking/Datatypes.hs-boot
-formatted       d195809b35f2  Agda-2.8.0/src/full/Agda/TypeChecking/DeadCode.hs
-formatted       bb854a3c2b16  Agda-2.8.0/src/full/Agda/TypeChecking/DiscrimTree.hs
-formatted       c17cb27af1b5  Agda-2.8.0/src/full/Agda/TypeChecking/DiscrimTree/Types.hs
-formatted       fbe3a0be6a73  Agda-2.8.0/src/full/Agda/TypeChecking/DisplayForm.hs
-formatted       db46b8c74ecf  Agda-2.8.0/src/full/Agda/TypeChecking/DropArgs.hs
-formatted       a7d18b90b5cb  Agda-2.8.0/src/full/Agda/TypeChecking/Empty.hs
-formatted       546e2690c8bd  Agda-2.8.0/src/full/Agda/TypeChecking/Empty.hs-boot
-formatted       c3bb228c6556  Agda-2.8.0/src/full/Agda/TypeChecking/Errors.hs
-formatted       4d637dbd29d8  Agda-2.8.0/src/full/Agda/TypeChecking/Errors.hs-boot
-formatted       3fd276903525  Agda-2.8.0/src/full/Agda/TypeChecking/Errors/Names.hs
-formatted       56b2daf135cc  Agda-2.8.0/src/full/Agda/TypeChecking/EtaContract.hs
-formatted       0b5e5500c9e6  Agda-2.8.0/src/full/Agda/TypeChecking/Forcing.hs
-formatted       91ec1972ef50  Agda-2.8.0/src/full/Agda/TypeChecking/Free.hs
-formatted       b17e10ebb4bf  Agda-2.8.0/src/full/Agda/TypeChecking/Free/Lazy.hs
-formatted       f5cc2aa53ce3  Agda-2.8.0/src/full/Agda/TypeChecking/Free/Precompute.hs
-formatted       4652dff8fa52  Agda-2.8.0/src/full/Agda/TypeChecking/Free/Reduce.hs
-formatted       dda08728d05b  Agda-2.8.0/src/full/Agda/TypeChecking/Functions.hs
-formatted       a2822b4bbb2a  Agda-2.8.0/src/full/Agda/TypeChecking/Generalize.hs
-formatted       170ae60a3b34  Agda-2.8.0/src/full/Agda/TypeChecking/IApplyConfluence.hs
-formatted       d2bedae2afec  Agda-2.8.0/src/full/Agda/TypeChecking/Implicit.hs
-formatted       5230555cc911  Agda-2.8.0/src/full/Agda/TypeChecking/Injectivity.hs
-formatted       765027ab5536  Agda-2.8.0/src/full/Agda/TypeChecking/Inlining.hs
-formatted       f69b901c92d1  Agda-2.8.0/src/full/Agda/TypeChecking/InstanceArguments.hs
-formatted       daede539773d  Agda-2.8.0/src/full/Agda/TypeChecking/InstanceArguments.hs-boot
-formatted       bc076aa1fdbe  Agda-2.8.0/src/full/Agda/TypeChecking/Irrelevance.hs
-formatted       f5e2359204d8  Agda-2.8.0/src/full/Agda/TypeChecking/Irrelevance.hs-boot
-formatted       3809c256f1bf  Agda-2.8.0/src/full/Agda/TypeChecking/Level.hs
-formatted       4df75f041db4  Agda-2.8.0/src/full/Agda/TypeChecking/Level.hs-boot
-formatted       43902630fee9  Agda-2.8.0/src/full/Agda/TypeChecking/Level/Solve.hs
-formatted       ae0893a4561e  Agda-2.8.0/src/full/Agda/TypeChecking/LevelConstraints.hs
-formatted       c4a1b0f2708c  Agda-2.8.0/src/full/Agda/TypeChecking/Lock.hs
-formatted       00b8f5e75aa7  Agda-2.8.0/src/full/Agda/TypeChecking/Lock.hs-boot
-formatted       4d870d6be892  Agda-2.8.0/src/full/Agda/TypeChecking/MetaVars.hs
-formatted       52101179c5b2  Agda-2.8.0/src/full/Agda/TypeChecking/MetaVars.hs-boot
-formatted       7e2cc6c3656a  Agda-2.8.0/src/full/Agda/TypeChecking/MetaVars/Mention.hs
-formatted       b8142e719029  Agda-2.8.0/src/full/Agda/TypeChecking/MetaVars/Occurs.hs
-formatted       a4be1ca0bbf7  Agda-2.8.0/src/full/Agda/TypeChecking/Modalities.hs
-formatted       1fd16a038ff2  Agda-2.8.0/src/full/Agda/TypeChecking/Monad.hs
-formatted       8628aa83fca2  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Base.hs
-formatted       d349fd5d15cf  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Base/Types.hs
-formatted       7860b2253820  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Base/Warning.hs
-formatted       56ab8bfd7ea3  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Benchmark.hs
-formatted       6bd9d4f5cc91  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Builtin.hs
-formatted       6b2e93e4eef0  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Builtin.hs-boot
-formatted       a608a81b85da  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Caching.hs
-formatted       f7eb389a97e5  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Closure.hs
-formatted       ecdbeb5fb96a  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Constraints.hs
-formatted       fb8152beded7  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Context.hs
-formatted       aa421afb353b  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Context.hs-boot
-formatted       25a69fe0b2e6  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Debug.hs
-formatted       07c8440dbd10  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Debug.hs-boot
-formatted       e171cc504b07  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Env.hs
-formatted       80aecb84d70e  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Imports.hs
-formatted       1f2b7f206ac5  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/MetaVars.hs
-formatted       894d39f81e58  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/MetaVars.hs-boot
-formatted       5d9486ab6943  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Modality.hs
-formatted       219de79701c4  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Mutual.hs
-formatted       8fe6e5c381d6  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Open.hs
-formatted       4e4d159df7b7  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Options.hs
-formatted       2b144a9f6ada  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Options.hs-boot
-formatted       a266ccade893  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Pure.hs
-formatted       f549f9160d1c  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Pure.hs-boot
-formatted       651849abb47d  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Signature.hs
-formatted       a5b44843ae0b  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Signature.hs-boot
-formatted       69d2cf4b28ec  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/SizedTypes.hs
-formatted       011c35706d91  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/State.hs
-formatted       63e1167a5c2e  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Statistics.hs
-formatted       9aa1d0aad9a7  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Trace.hs
-formatted       9e2717f40129  Agda-2.8.0/src/full/Agda/TypeChecking/Names.hs
-formatted       519f4d3abcf4  Agda-2.8.0/src/full/Agda/TypeChecking/Opacity.hs
-formatted       d26ddecf1923  Agda-2.8.0/src/full/Agda/TypeChecking/Opacity.hs-boot
-formatted       ec77f6d2c4ee  Agda-2.8.0/src/full/Agda/TypeChecking/Patterns/Abstract.hs
-formatted       0f6e0c168a7c  Agda-2.8.0/src/full/Agda/TypeChecking/Patterns/Internal.hs
-formatted       9e7f1b1cf5e9  Agda-2.8.0/src/full/Agda/TypeChecking/Patterns/Match.hs
-formatted       5ee7033010bf  Agda-2.8.0/src/full/Agda/TypeChecking/Patterns/Match.hs-boot
-formatted       262f6816a482  Agda-2.8.0/src/full/Agda/TypeChecking/Polarity.hs
-formatted       2f5659c12840  Agda-2.8.0/src/full/Agda/TypeChecking/Polarity.hs-boot
-formatted       7503757a37fb  Agda-2.8.0/src/full/Agda/TypeChecking/Positivity.hs
-formatted       5626959a260d  Agda-2.8.0/src/full/Agda/TypeChecking/Positivity/Occurrence.hs
-formatted       850bea97b290  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty.hs
-formatted       8bd6edac6240  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty.hs-boot
-formatted       f13c4b57eaf1  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Call.hs
-formatted       f5434869778b  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Call.hs-boot
-formatted       c54ae0776ac3  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Constraint.hs
-formatted       4c2edd49d675  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Constraint.hs-boot
-formatted       5734afd5c29b  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Warning.hs
-formatted       bf4e737ce041  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Warning.hs-boot
-formatted       de8c83eec1d4  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive.hs
-formatted       3c8fe98419dd  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive.hs-boot
-formatted       92564f8a667c  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Base.hs
-formatted       df2301069d40  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Cubical.hs
-formatted       2825417cf284  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Cubical/Base.hs
-formatted       34da472277ef  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Cubical/Base.hs-boot
-formatted       4aec12c8b204  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Cubical/Glue.hs
-formatted       4056250b5173  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Cubical/HCompU.hs
-formatted       dbe29e9e0df8  Agda-2.8.0/src/full/Agda/TypeChecking/ProjectionLike.hs
-formatted       21d019305ce5  Agda-2.8.0/src/full/Agda/TypeChecking/ProjectionLike.hs-boot
-formatted       0442d4c1571a  Agda-2.8.0/src/full/Agda/TypeChecking/Quote.hs
-formatted       185176614b3d  Agda-2.8.0/src/full/Agda/TypeChecking/ReconstructParameters.hs
-formatted       649031626628  Agda-2.8.0/src/full/Agda/TypeChecking/RecordPatterns.hs
-formatted       7b9818f0d07e  Agda-2.8.0/src/full/Agda/TypeChecking/Records.hs
-formatted       65b1d93597cd  Agda-2.8.0/src/full/Agda/TypeChecking/Records.hs-boot
-formatted       9000008643a3  Agda-2.8.0/src/full/Agda/TypeChecking/Reduce.hs
-formatted       82cb10489996  Agda-2.8.0/src/full/Agda/TypeChecking/Reduce.hs-boot
-formatted       e69843d8012c  Agda-2.8.0/src/full/Agda/TypeChecking/Reduce/Fast.hs
-formatted       2158647025d5  Agda-2.8.0/src/full/Agda/TypeChecking/Reduce/Fast.hs-boot
-formatted       52ceaeb66838  Agda-2.8.0/src/full/Agda/TypeChecking/Reduce/Monad.hs
-formatted       88bd74e33b27  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting.hs
-formatted       0158a552c77f  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting.hs-boot
-formatted       682e7693d697  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting/Clause.hs
-formatted       0259fd79bf81  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting/Confluence.hs
-formatted       e8d5ebd74ed8  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting/NonLinMatch.hs
-formatted       996477d19b29  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting/NonLinPattern.hs
-formatted       a6c2b94986a3  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Application.hs
-formatted       8094c6b9ca8d  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Application.hs-boot
-formatted       dbb4bda7bd40  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Builtin.hs
-formatted       6100823529c1  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs
-formatted       48f627566132  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs-boot
-formatted       d760db0d3bfa  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Data.hs
-formatted       89ea7a6db701  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Data.hs-boot
-formatted       e7ba6af78bdb  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Decl.hs
-formatted       c3dda6e649e5  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Decl.hs-boot
-formatted       d9c53c2db40c  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Def.hs
-formatted       aa2e722e924d  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Def.hs-boot
-formatted       cf342aa0175d  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Display.hs
-formatted       69ec6b99fd75  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS.hs
-formatted       199f73f82f56  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs
-formatted       11b826b41073  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/Problem.hs
-formatted       c5e217446f2f  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs
-formatted       30ba5ebd5abd  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/Unify.hs
-formatted       c06cebdc5744  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/Unify/LeftInverse.hs
-formatted       8db95ca4d472  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/Unify/Types.hs
-formatted       de67f3e2b3e6  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Record.hs
-formatted       3cb29243d1ce  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Term.hs
-formatted       ccd5b1bd7f62  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Term.hs-boot
-formatted       14e895036162  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise.hs
-formatted       7e6c6a48b26a  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Base.hs
-formatted       0b03fe8ecc8f  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances.hs
-formatted       01a9d48b433f  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs
-formatted       5e11ce5ca675  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Common.hs
-formatted       d11e2e781bb4  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Compilers.hs
-formatted       8047289f42cb  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Errors.hs
-formatted       abbb853d7207  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs
-formatted       93eed7f54faa  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs
-formatted       1a6e0ff617b0  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes.hs
-formatted       c502702d4646  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes/Pretty.hs
-formatted       7bbcf170102a  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes/Solve.hs
-formatted       5e69f4b9b310  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes/Syntax.hs
-formatted       904a4e241e74  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes/Utils.hs
-formatted       342d213dbae3  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes/WarshallSolver.hs
-formatted       8b1a445ba3fc  Agda-2.8.0/src/full/Agda/TypeChecking/Sort.hs
-formatted       082efa258eb6  Agda-2.8.0/src/full/Agda/TypeChecking/Substitute.hs
-formatted       c975b7162ab1  Agda-2.8.0/src/full/Agda/TypeChecking/Substitute/Class.hs
-formatted       2656f0d28fba  Agda-2.8.0/src/full/Agda/TypeChecking/Substitute/DeBruijn.hs
-formatted       639f3a17346d  Agda-2.8.0/src/full/Agda/TypeChecking/SyntacticEquality.hs
-formatted       abeda68a8419  Agda-2.8.0/src/full/Agda/TypeChecking/Telescope.hs
-formatted       d94c0d202dfc  Agda-2.8.0/src/full/Agda/TypeChecking/Telescope.hs-boot
-formatted       cea913d9b4f5  Agda-2.8.0/src/full/Agda/TypeChecking/Telescope/Path.hs
-formatted       eb5313ed3eb3  Agda-2.8.0/src/full/Agda/TypeChecking/Unquote.hs
-formatted       ceb3878e054e  Agda-2.8.0/src/full/Agda/TypeChecking/Warnings.hs
-formatted       0a8e5e5ab7e5  Agda-2.8.0/src/full/Agda/TypeChecking/With.hs
-formatted       b02f16e6d20a  Agda-2.8.0/src/full/Agda/Utils/AffineHole.hs
-formatted       ae5ced9ae20f  Agda-2.8.0/src/full/Agda/Utils/Applicative.hs
-formatted       7fe48d6127fe  Agda-2.8.0/src/full/Agda/Utils/AssocList.hs
-formatted       72df986a37f7  Agda-2.8.0/src/full/Agda/Utils/Bag.hs
-formatted       05b1c7f71baf  Agda-2.8.0/src/full/Agda/Utils/Benchmark.hs
-formatted       19e137bd74e4  Agda-2.8.0/src/full/Agda/Utils/BiMap.hs
-formatted       09925de009a1  Agda-2.8.0/src/full/Agda/Utils/BoolSet.hs
-formatted       7f37f70bbf2b  Agda-2.8.0/src/full/Agda/Utils/Boolean.hs
-formatted       880aa8847616  Agda-2.8.0/src/full/Agda/Utils/CallStack.hs
-formatted       c579014a9dbd  Agda-2.8.0/src/full/Agda/Utils/CallStack/Base.hs
-formatted       486c936e1b1e  Agda-2.8.0/src/full/Agda/Utils/CallStack/Pretty.hs
-formatted       eeedf1a4e3da  Agda-2.8.0/src/full/Agda/Utils/Char.hs
-formatted       2b8eb290abc6  Agda-2.8.0/src/full/Agda/Utils/Cluster.hs
-formatted       b2757fa5ae2f  Agda-2.8.0/src/full/Agda/Utils/Either.hs
-formatted       5c0f9924f59f  Agda-2.8.0/src/full/Agda/Utils/Empty.hs
-formatted       284145f1db7f  Agda-2.8.0/src/full/Agda/Utils/Environment.hs
-formatted       822c68a5ddb8  Agda-2.8.0/src/full/Agda/Utils/Fail.hs
-formatted       aa59492cb884  Agda-2.8.0/src/full/Agda/Utils/Favorites.hs
-formatted       9990de329253  Agda-2.8.0/src/full/Agda/Utils/FileId.hs
-formatted       6b83a7abbe9a  Agda-2.8.0/src/full/Agda/Utils/FileName.hs
-formatted       e5f5fbd21c99  Agda-2.8.0/src/full/Agda/Utils/Float.hs
-formatted       bb823613272f  Agda-2.8.0/src/full/Agda/Utils/Function.hs
-formatted       75a5028a6b1a  Agda-2.8.0/src/full/Agda/Utils/Functor.hs
-formatted       026b04b8661e  Agda-2.8.0/src/full/Agda/Utils/GetOpt.hs
-formatted       a7c248d266b0  Agda-2.8.0/src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional.hs
-formatted       989ea83c378b  Agda-2.8.0/src/full/Agda/Utils/Graph/TopSort.hs
-formatted       db38367e7a17  Agda-2.8.0/src/full/Agda/Utils/Hash.hs
-formatted       43284ef7124c  Agda-2.8.0/src/full/Agda/Utils/HashTable.hs
-formatted       019e9637b9b0  Agda-2.8.0/src/full/Agda/Utils/Haskell/Syntax.hs
-formatted       7802531cbbc5  Agda-2.8.0/src/full/Agda/Utils/IArray.hs
-formatted       8d53e1639c43  Agda-2.8.0/src/full/Agda/Utils/IO.hs
-formatted       ddd200e851ab  Agda-2.8.0/src/full/Agda/Utils/IO/Binary.hs
-formatted       c62ffb044eae  Agda-2.8.0/src/full/Agda/Utils/IO/Directory.hs
-formatted       44ca6943bebd  Agda-2.8.0/src/full/Agda/Utils/IO/TempFile.hs
-formatted       51a9c4ed68e8  Agda-2.8.0/src/full/Agda/Utils/IO/UTF8.hs
-formatted       d938f94198a6  Agda-2.8.0/src/full/Agda/Utils/IORef.hs
-formatted       695329a3bad9  Agda-2.8.0/src/full/Agda/Utils/Impossible.hs
-formatted       e5520ad27268  Agda-2.8.0/src/full/Agda/Utils/IndexedList.hs
-formatted       faa55c2f1ad1  Agda-2.8.0/src/full/Agda/Utils/IntSet/Infinite.hs
-formatted       37f9f2b34f7d  Agda-2.8.0/src/full/Agda/Utils/Lens.hs
-formatted       7cc1db9fff98  Agda-2.8.0/src/full/Agda/Utils/Lens/Examples.hs
-formatted       ef65f125c3b1  Agda-2.8.0/src/full/Agda/Utils/List.hs
-formatted       8392227e3997  Agda-2.8.0/src/full/Agda/Utils/List1.hs
-formatted       3bd635eb52aa  Agda-2.8.0/src/full/Agda/Utils/List1.hs-boot
-formatted       3514de48df05  Agda-2.8.0/src/full/Agda/Utils/List2.hs
-formatted       e460a45d4f65  Agda-2.8.0/src/full/Agda/Utils/ListT.hs
-formatted       960b2b6f10d7  Agda-2.8.0/src/full/Agda/Utils/Map.hs
-formatted       8c9045bc776a  Agda-2.8.0/src/full/Agda/Utils/Map1.hs
-formatted       6e06ef12a477  Agda-2.8.0/src/full/Agda/Utils/Maybe.hs
-formatted       f52b8f698d5f  Agda-2.8.0/src/full/Agda/Utils/Maybe/Strict.hs
-formatted       fde8defcff6d  Agda-2.8.0/src/full/Agda/Utils/Memo.hs
-formatted       df3a8985dc8e  Agda-2.8.0/src/full/Agda/Utils/Monad.hs
-formatted       dd3cac49f886  Agda-2.8.0/src/full/Agda/Utils/Monoid.hs
-formatted       92bb2192c3b2  Agda-2.8.0/src/full/Agda/Utils/Null.hs
-formatted       4fd8ca5748d3  Agda-2.8.0/src/full/Agda/Utils/POMonoid.hs
-formatted       bb186d0604db  Agda-2.8.0/src/full/Agda/Utils/Parser/MemoisedCPS.hs
-formatted       3298d386e71e  Agda-2.8.0/src/full/Agda/Utils/PartialOrd.hs
-formatted       5763223e9061  Agda-2.8.0/src/full/Agda/Utils/Permutation.hs
-formatted       1a3e4a1087c4  Agda-2.8.0/src/full/Agda/Utils/ProfileOptions.hs
-formatted       b58b87ef89f8  Agda-2.8.0/src/full/Agda/Utils/RangeMap.hs
-formatted       5039e6e9abfe  Agda-2.8.0/src/full/Agda/Utils/SemiRing.hs
-formatted       9aa281a4615c  Agda-2.8.0/src/full/Agda/Utils/Semigroup.hs
-formatted       fdb04073ce98  Agda-2.8.0/src/full/Agda/Utils/Set1.hs
-formatted       f45ad8f08443  Agda-2.8.0/src/full/Agda/Utils/Singleton.hs
-formatted       18c4a0bbe326  Agda-2.8.0/src/full/Agda/Utils/Size.hs
-formatted       a5753ba84ff3  Agda-2.8.0/src/full/Agda/Utils/SmallSet.hs
-formatted       21babb4b50a9  Agda-2.8.0/src/full/Agda/Utils/String.hs
-formatted       57a8a5b9fa29  Agda-2.8.0/src/full/Agda/Utils/Suffix.hs
-formatted       736b26cda8bc  Agda-2.8.0/src/full/Agda/Utils/Three.hs
-formatted       ebc104ac11d6  Agda-2.8.0/src/full/Agda/Utils/Time.hs
-formatted       628c44ebe216  Agda-2.8.0/src/full/Agda/Utils/Trie.hs
-formatted       1711e06969b5  Agda-2.8.0/src/full/Agda/Utils/Tuple.hs
-formatted       db9dcb1b8f66  Agda-2.8.0/src/full/Agda/Utils/TypeLevel.hs
-formatted       c8c672126225  Agda-2.8.0/src/full/Agda/Utils/TypeLits.hs
-formatted       8d8d3b50eebc  Agda-2.8.0/src/full/Agda/Utils/Unsafe.hs
-formatted       56bf105aca9a  Agda-2.8.0/src/full/Agda/Utils/Update.hs
-formatted       383866b27bb0  Agda-2.8.0/src/full/Agda/Utils/VarSet.hs
-formatted       9f0839da86cb  Agda-2.8.0/src/full/Agda/Utils/WithDefault.hs
-formatted       415a87aa2127  Agda-2.8.0/src/full/Agda/Utils/Zipper.hs
-formatted       86e923a357db  Agda-2.8.0/src/main/Main.hs
-formatted       d3512172a4bc  Agda-2.8.0/src/setup/Agda/Setup.hs
-formatted       114aa5ab1508  Agda-2.8.0/src/setup/Agda/Setup/DataFiles.hs
-formatted       42af21c8ecf8  Agda-2.8.0/src/setup/Agda/Setup/EmacsMode.hs
-formatted       acb74e0db7a5  Agda-2.8.0/src/setup/Agda/Version.hs
-formatted       5164a4006c26  Agda-2.8.0/src/setup/Agda/VersionCommit.hs
-formatted       90cd663d9426  HUnit-1.6.2.0/examples/Example.hs
-formatted       9b1cac4b6c09  HUnit-1.6.2.0/src/Test/HUnit.hs
-formatted       a7dea629b3ef  HUnit-1.6.2.0/src/Test/HUnit/Base.hs
-formatted       ab91586830e9  HUnit-1.6.2.0/src/Test/HUnit/Lang.hs
-formatted       f9959d10adae  HUnit-1.6.2.0/src/Test/HUnit/Terminal.hs
-formatted       c1c1d4fdc273  HUnit-1.6.2.0/src/Test/HUnit/Text.hs
-formatted       358e8e211fe4  HUnit-1.6.2.0/tests/HUnitTestExtended.hs
-formatted       2277de61adab  HUnit-1.6.2.0/tests/HUnitTests.hs
-formatted       6f374a392385  HUnit-1.6.2.0/tests/TerminalTest.hs
-formatted       3c8a199a8a36  QuickCheck-2.18.0.0/examples/Heap.hs
-formatted       0bd3a87ca5b5  QuickCheck-2.18.0.0/examples/Heap_Program.hs
-formatted       85df59b82228  QuickCheck-2.18.0.0/examples/Heap_ProgramAlgebraic.hs
-formatted       cc37d9bcd159  QuickCheck-2.18.0.0/examples/Lambda.hs
-formatted       56c98d50971f  QuickCheck-2.18.0.0/examples/Merge.hs
-formatted       6506a17a91ff  QuickCheck-2.18.0.0/examples/Set.hs
-formatted       598740b3d57c  QuickCheck-2.18.0.0/examples/Simple.hs
-partly-checked  5234e8085ba9  QuickCheck-2.18.0.0/src/Test/QuickCheck.hs
-formatted       d4509e6743a4  QuickCheck-2.18.0.0/src/Test/QuickCheck/All.hs
-declined        -             QuickCheck-2.18.0.0/src/Test/QuickCheck/Arbitrary.hs
-formatted       b394fbd4debb  QuickCheck-2.18.0.0/src/Test/QuickCheck/Compat.hs
-partly-checked  06fafd04e06a  QuickCheck-2.18.0.0/src/Test/QuickCheck/Exception.hs
-formatted       682aa52bce46  QuickCheck-2.18.0.0/src/Test/QuickCheck/Features.hs
-declined        -             QuickCheck-2.18.0.0/src/Test/QuickCheck/Function.hs
-formatted       061130c71dd5  QuickCheck-2.18.0.0/src/Test/QuickCheck/Gen.hs
-formatted       0488daa21096  QuickCheck-2.18.0.0/src/Test/QuickCheck/Gen/Unsafe.hs
-declined        -             QuickCheck-2.18.0.0/src/Test/QuickCheck/Modifiers.hs
-declined        -             QuickCheck-2.18.0.0/src/Test/QuickCheck/Monadic.hs
-formatted       521d14fa41a7  QuickCheck-2.18.0.0/src/Test/QuickCheck/Monoids.hs
-formatted       c7e1654e2011  QuickCheck-2.18.0.0/src/Test/QuickCheck/Poly.hs
-declined        -             QuickCheck-2.18.0.0/src/Test/QuickCheck/Property.hs
-formatted       d248979763fb  QuickCheck-2.18.0.0/src/Test/QuickCheck/Random.hs
-formatted       67a6c49f2d76  QuickCheck-2.18.0.0/src/Test/QuickCheck/State.hs
-formatted       b836923353a8  QuickCheck-2.18.0.0/src/Test/QuickCheck/Test.hs
-formatted       fc335cb1eb17  QuickCheck-2.18.0.0/src/Test/QuickCheck/Text.hs
-formatted       658c2a75fd36  QuickCheck-2.18.0.0/tests/CollectDataTypes.hs
-formatted       deb44539c869  QuickCheck-2.18.0.0/tests/DiscardRatio.hs
-formatted       5408e5e13bd3  QuickCheck-2.18.0.0/tests/GCoArbitraryExample.hs
-formatted       8dd012261272  QuickCheck-2.18.0.0/tests/GShrinkExample.hs
-formatted       ddae5a0658b8  QuickCheck-2.18.0.0/tests/Generators.hs
-formatted       79d32874cf04  QuickCheck-2.18.0.0/tests/Misc.hs
-formatted       414efdc48918  QuickCheck-2.18.0.0/tests/MonadFix.hs
-formatted       d98e80df98ac  QuickCheck-2.18.0.0/tests/Monoids.hs
-formatted       eae30fa51b1b  QuickCheck-2.18.0.0/tests/RunCollectDataTypes.hs
-formatted       a844703dc876  QuickCheck-2.18.0.0/tests/Split.hs
-formatted       da1fe583377c  QuickCheck-2.18.0.0/tests/Strictness.hs
-formatted       5b211214c287  QuickCheck-2.18.0.0/tests/Terminal.hs
-formatted       398a0f17171d  QuickCheck-2.18.0.0/tests/WithProgress.hs
-formatted       5bd7a41e0fb6  ShellCheck-0.11.0/shellcheck.hs
-formatted       e96f582d0994  ShellCheck-0.11.0/src/ShellCheck/AST.hs
-formatted       1a672e0e9b45  ShellCheck-0.11.0/src/ShellCheck/ASTLib.hs
-formatted       f856db0e58cd  ShellCheck-0.11.0/src/ShellCheck/Analytics.hs
-formatted       a37e7d6ad771  ShellCheck-0.11.0/src/ShellCheck/Analyzer.hs
-formatted       53f56d1c3ae1  ShellCheck-0.11.0/src/ShellCheck/AnalyzerLib.hs
-formatted       ae3b0ca5251a  ShellCheck-0.11.0/src/ShellCheck/CFG.hs
-formatted       8b94af7378f4  ShellCheck-0.11.0/src/ShellCheck/CFGAnalysis.hs
-formatted       64df5efa4dca  ShellCheck-0.11.0/src/ShellCheck/Checker.hs
-formatted       ca5d54071468  ShellCheck-0.11.0/src/ShellCheck/Checks/Commands.hs
-formatted       c5722fd33abb  ShellCheck-0.11.0/src/ShellCheck/Checks/ControlFlow.hs
-formatted       0cbfece4e54b  ShellCheck-0.11.0/src/ShellCheck/Checks/Custom.hs
-formatted       a6c175fc2ac7  ShellCheck-0.11.0/src/ShellCheck/Checks/ShellSupport.hs
-formatted       d39eda0efa56  ShellCheck-0.11.0/src/ShellCheck/Data.hs
-formatted       0b8c4331f2cb  ShellCheck-0.11.0/src/ShellCheck/Debug.hs
-formatted       eeebdf1e43d5  ShellCheck-0.11.0/src/ShellCheck/Fixer.hs
-formatted       1c5c142bbc8c  ShellCheck-0.11.0/src/ShellCheck/Formatter/CheckStyle.hs
-formatted       8b36dd878a90  ShellCheck-0.11.0/src/ShellCheck/Formatter/Diff.hs
-formatted       78112453fad7  ShellCheck-0.11.0/src/ShellCheck/Formatter/Format.hs
-formatted       d90b451f113e  ShellCheck-0.11.0/src/ShellCheck/Formatter/GCC.hs
-formatted       b5dba8eeaa1e  ShellCheck-0.11.0/src/ShellCheck/Formatter/JSON.hs
-formatted       780be929b254  ShellCheck-0.11.0/src/ShellCheck/Formatter/JSON1.hs
-formatted       a381122da904  ShellCheck-0.11.0/src/ShellCheck/Formatter/Quiet.hs
-formatted       ede5712d5ab7  ShellCheck-0.11.0/src/ShellCheck/Formatter/TTY.hs
-formatted       a601aea10041  ShellCheck-0.11.0/src/ShellCheck/Interface.hs
-formatted       d91cb8e53cd5  ShellCheck-0.11.0/src/ShellCheck/Parser.hs
-formatted       41e45f4ec82e  ShellCheck-0.11.0/src/ShellCheck/Prelude.hs
-formatted       0b6a2ca650ea  ShellCheck-0.11.0/src/ShellCheck/Regex.hs
-formatted       d7f66e7f3a00  ShellCheck-0.11.0/test/shellcheck.hs
-formatted       f11704872a0d  adjunctions-4.4.4/HLint.hs
-formatted       b76eebd88dde  adjunctions-4.4.4/src/Control/Comonad/Representable/Store.hs
-formatted       2dcd64bcfe48  adjunctions-4.4.4/src/Control/Comonad/Trans/Adjoint.hs
-formatted       7b743cda361d  adjunctions-4.4.4/src/Control/Monad/Representable/Reader.hs
-formatted       35d839d56a32  adjunctions-4.4.4/src/Control/Monad/Representable/State.hs
-formatted       4f5dfaf566a3  adjunctions-4.4.4/src/Control/Monad/Trans/Adjoint.hs
-formatted       daa2f636edb9  adjunctions-4.4.4/src/Control/Monad/Trans/Contravariant/Adjoint.hs
-formatted       067960eebdd3  adjunctions-4.4.4/src/Control/Monad/Trans/Conts.hs
-formatted       a9be4a7e726b  adjunctions-4.4.4/src/Data/Functor/Adjunction.hs
-formatted       191e78a8f894  adjunctions-4.4.4/src/Data/Functor/Contravariant/Adjunction.hs
-formatted       573a1fcd59fd  adjunctions-4.4.4/src/Data/Functor/Contravariant/Rep.hs
-formatted       16b695eb1cf2  adjunctions-4.4.4/src/Data/Functor/Rep.hs
-formatted       538f4bee921a  adjunctions-4.4.4/tests/GenericsSpec.hs
-formatted       2fbd14b119a4  adjunctions-4.4.4/tests/Spec.hs
-formatted       7bbf4758e5ad  aeson-2.3.1.0/src/Data/Aeson.hs
-formatted       e884d6813fc6  aeson-2.3.1.0/src/Data/Aeson/Decoding.hs
-formatted       93bdee10e02a  aeson-2.3.1.0/src/Data/Aeson/Decoding/ByteString.hs
-formatted       635321399aa4  aeson-2.3.1.0/src/Data/Aeson/Decoding/ByteString/Lazy.hs
-formatted       1d3a54288c25  aeson-2.3.1.0/src/Data/Aeson/Decoding/Conversion.hs
-formatted       f1f142fef403  aeson-2.3.1.0/src/Data/Aeson/Decoding/Internal.hs
-formatted       e972ebea468c  aeson-2.3.1.0/src/Data/Aeson/Decoding/Text.hs
-formatted       709b71ada144  aeson-2.3.1.0/src/Data/Aeson/Decoding/Tokens.hs
-formatted       c6cf8dff7aea  aeson-2.3.1.0/src/Data/Aeson/Encoding.hs
-formatted       96d4e6121b81  aeson-2.3.1.0/src/Data/Aeson/Encoding/Builder.hs
-formatted       32e6990c1aad  aeson-2.3.1.0/src/Data/Aeson/Encoding/Internal.hs
-formatted       d7002010fdc9  aeson-2.3.1.0/src/Data/Aeson/Internal/ByteString.hs
-formatted       7ff60392d6c3  aeson-2.3.1.0/src/Data/Aeson/Internal/Functions.hs
-formatted       e048ffa25767  aeson-2.3.1.0/src/Data/Aeson/Internal/Prelude.hs
-formatted       57e28222c296  aeson-2.3.1.0/src/Data/Aeson/Internal/Scientific.hs
-formatted       6bb6b5229c29  aeson-2.3.1.0/src/Data/Aeson/Internal/TH.hs
-formatted       b61b87ef28b1  aeson-2.3.1.0/src/Data/Aeson/Internal/Text.hs
-formatted       e83337edc6e6  aeson-2.3.1.0/src/Data/Aeson/Internal/Unescape.hs
-formatted       20257ed727b2  aeson-2.3.1.0/src/Data/Aeson/Internal/UnescapeFromText.hs
-formatted       726df9d09937  aeson-2.3.1.0/src/Data/Aeson/Key.hs
-formatted       ddeec884181e  aeson-2.3.1.0/src/Data/Aeson/KeyMap.hs
-formatted       a8f98f92bb33  aeson-2.3.1.0/src/Data/Aeson/Parser/Time.hs
-formatted       34673c7e3119  aeson-2.3.1.0/src/Data/Aeson/QQ/Simple.hs
-formatted       8c47510bfe90  aeson-2.3.1.0/src/Data/Aeson/RFC8785.hs
-formatted       7995a04278eb  aeson-2.3.1.0/src/Data/Aeson/TH.hs
-formatted       12a0132d4a2c  aeson-2.3.1.0/src/Data/Aeson/Text.hs
-formatted       d929af4e0687  aeson-2.3.1.0/src/Data/Aeson/Types.hs
-formatted       e11d9a90b593  aeson-2.3.1.0/src/Data/Aeson/Types/Class.hs
-formatted       057e2b106402  aeson-2.3.1.0/src/Data/Aeson/Types/FromJSON.hs
-formatted       3a14da7819a3  aeson-2.3.1.0/src/Data/Aeson/Types/Generic.hs
-formatted       9fc1ad97795b  aeson-2.3.1.0/src/Data/Aeson/Types/Internal.hs
-formatted       edb832a8dbeb  aeson-2.3.1.0/src/Data/Aeson/Types/ToJSON.hs
-formatted       4a92c519c2c4  aeson-2.3.1.0/tests/CastFloat.hs
-formatted       bad3a5065737  aeson-2.3.1.0/tests/DataFamilies/Encoders.hs
-formatted       0d864147e795  aeson-2.3.1.0/tests/DataFamilies/Instances.hs
-formatted       91fe7aa4d3dc  aeson-2.3.1.0/tests/DataFamilies/Properties.hs
-formatted       97579c76fd4d  aeson-2.3.1.0/tests/DataFamilies/Types.hs
-formatted       058d139e8724  aeson-2.3.1.0/tests/DoubleToScientific.hs
-formatted       29b00f8c0d83  aeson-2.3.1.0/tests/Encoders.hs
-formatted       30150da5a855  aeson-2.3.1.0/tests/ErrorMessages.hs
-formatted       72fb423455c1  aeson-2.3.1.0/tests/Functions.hs
-formatted       a2da87dc85a4  aeson-2.3.1.0/tests/Instances.hs
-formatted       38b7096d53c4  aeson-2.3.1.0/tests/JSONTestSuite.hs
-formatted       82f27586e194  aeson-2.3.1.0/tests/Options.hs
-formatted       269fd896fd74  aeson-2.3.1.0/tests/PropUtils.hs
-formatted       5c7e1bcf3dd6  aeson-2.3.1.0/tests/Properties.hs
-formatted       47a934388051  aeson-2.3.1.0/tests/PropertyGeneric.hs
-formatted       109d7fb52b5b  aeson-2.3.1.0/tests/PropertyKeys.hs
-formatted       0d9df9d04cba  aeson-2.3.1.0/tests/PropertyQC.hs
-formatted       a2e378d49eb8  aeson-2.3.1.0/tests/PropertyRTFunctors.hs
-formatted       d54279308532  aeson-2.3.1.0/tests/PropertyRoundTrip.hs
-formatted       1c47871a8c20  aeson-2.3.1.0/tests/PropertyTH.hs
-formatted       816e57772780  aeson-2.3.1.0/tests/RFC8785.hs
-formatted       378b97660503  aeson-2.3.1.0/tests/Regression/Issue1138.hs
-formatted       1cfcacdcaf11  aeson-2.3.1.0/tests/Regression/Issue351.hs
-formatted       d7ea7e8c0a78  aeson-2.3.1.0/tests/Regression/Issue571.hs
-formatted       c773b848db86  aeson-2.3.1.0/tests/Regression/Issue687.hs
-formatted       e5c541d1465a  aeson-2.3.1.0/tests/Regression/Issue967.hs
-formatted       97b26e935032  aeson-2.3.1.0/tests/SerializationFormatSpec.hs
-formatted       8eaa36c16021  aeson-2.3.1.0/tests/Tests.hs
-formatted       fca86e7ab321  aeson-2.3.1.0/tests/Types.hs
-formatted       b711a1e1b18d  aeson-2.3.1.0/tests/UnitTests.hs
-formatted       f18689008d86  aeson-2.3.1.0/tests/UnitTests/FromJSONKey.hs
-formatted       8fa12a214cda  aeson-2.3.1.0/tests/UnitTests/Hashable.hs
-formatted       2e6e13a2b307  aeson-2.3.1.0/tests/UnitTests/KeyMapInsertWith.hs
-formatted       fc462ed61e50  aeson-2.3.1.0/tests/UnitTests/MonadFix.hs
-formatted       657449faeb93  aeson-2.3.1.0/tests/UnitTests/NoThunks.hs
-formatted       31a111ec64d8  aeson-2.3.1.0/tests/UnitTests/NullaryConstructors.hs
-formatted       095b9b74ccb5  aeson-2.3.1.0/tests/UnitTests/OmitNothingFieldsNote.hs
-formatted       579ca9c8641b  aeson-2.3.1.0/tests/UnitTests/OptionalFields.hs
-formatted       4e613e1ef254  aeson-2.3.1.0/tests/UnitTests/OptionalFields/Common.hs
-formatted       d8f208687b90  aeson-2.3.1.0/tests/UnitTests/OptionalFields/Generics.hs
-formatted       cc59c7b4c685  aeson-2.3.1.0/tests/UnitTests/OptionalFields/Manual.hs
-formatted       4a6ecc95787f  aeson-2.3.1.0/tests/UnitTests/OptionalFields/TH.hs
-formatted       e93203961852  aeson-2.3.1.0/tests/UnitTests/UTCTime.hs
-formatted       e865ae48f11b  ansi-terminal-1.1.5/Setup.hs
-formatted       444d34793bf4  ansi-terminal-1.1.5/app/Example.hs
-formatted       64edb10877a8  ansi-terminal-1.1.5/src/System/Console/ANSI.hs
-formatted       0cc59e71668d  ansi-terminal-1.1.5/unix/System/Console/ANSI/Internal.hs
-formatted       2ee987b3a95a  ansi-terminal-1.1.5/win/System/Console/ANSI/Internal.hs
-formatted       1aaa3e2316a9  ansi-terminal-1.1.5/win/System/Console/ANSI/Windows/Foreign.hs
-does-not-parse  -             ansi-terminal-1.1.5/win/System/Console/ANSI/Windows/Win32/Types.hs
-formatted       9e25d9947df5  async-2.2.6/Control/Concurrent/Async.hs
-partly-checked  539941d64e62  async-2.2.6/Control/Concurrent/Async/Internal.hs
-formatted       68777666410b  async-2.2.6/Control/Concurrent/Async/Warden.hs
-formatted       a0f5a7bd29cb  async-2.2.6/Control/Concurrent/Stream.hs
-formatted       e865ae48f11b  async-2.2.6/Setup.hs
-formatted       7f1489b412a3  async-2.2.6/bench/concasync.hs
-formatted       947eb9e17a7c  async-2.2.6/bench/conccancel.hs
-formatted       6fd907018c80  async-2.2.6/bench/race.hs
-formatted       5737c788d68d  async-2.2.6/test/test-async.hs
-formatted       9f3238148609  attoparsec-0.14.4/Data/Attoparsec.hs
-formatted       7d88b33f4399  attoparsec-0.14.4/Data/Attoparsec/ByteString.hs
-formatted       4ba03080e749  attoparsec-0.14.4/Data/Attoparsec/ByteString/Char8.hs
-formatted       0e47afce0362  attoparsec-0.14.4/Data/Attoparsec/ByteString/Internal.hs
-formatted       fcc23ffbbc3d  attoparsec-0.14.4/Data/Attoparsec/ByteString/Lazy.hs
-formatted       220f76f3ce4e  attoparsec-0.14.4/Data/Attoparsec/Char8.hs
-formatted       90be588fbc3a  attoparsec-0.14.4/Data/Attoparsec/Combinator.hs
-formatted       4b9154d41c2a  attoparsec-0.14.4/Data/Attoparsec/Internal.hs
-formatted       4f1284a9fd4b  attoparsec-0.14.4/Data/Attoparsec/Internal/Types.hs
-formatted       ea3b710a875e  attoparsec-0.14.4/Data/Attoparsec/Lazy.hs
-formatted       3d8057d5d688  attoparsec-0.14.4/Data/Attoparsec/Number.hs
-formatted       45050bdb0a87  attoparsec-0.14.4/Data/Attoparsec/Text.hs
-formatted       8419b057d5a4  attoparsec-0.14.4/Data/Attoparsec/Text/Internal.hs
-formatted       b1c4021729a8  attoparsec-0.14.4/Data/Attoparsec/Text/Lazy.hs
-formatted       63d322215a87  attoparsec-0.14.4/Data/Attoparsec/Types.hs
-formatted       8ab300fd67b0  attoparsec-0.14.4/Data/Attoparsec/Zepto.hs
-formatted       53b0400e60aa  attoparsec-0.14.4/benchmarks/Aeson.hs
-formatted       b151a3ed3e1a  attoparsec-0.14.4/benchmarks/Benchmarks.hs
-formatted       bd0309211105  attoparsec-0.14.4/benchmarks/Common.hs
-formatted       baa4df75c7d8  attoparsec-0.14.4/benchmarks/Genome.hs
-formatted       3f8483fc03da  attoparsec-0.14.4/benchmarks/HeadersByteString.hs
-formatted       bb42606c4a8a  attoparsec-0.14.4/benchmarks/HeadersByteString/Atto.hs
-formatted       5a57c6aaa740  attoparsec-0.14.4/benchmarks/HeadersText.hs
-formatted       8fa6e462f95f  attoparsec-0.14.4/benchmarks/Links.hs
-formatted       f582abe3e244  attoparsec-0.14.4/benchmarks/Numbers.hs
-formatted       696be472825c  attoparsec-0.14.4/benchmarks/Sets.hs
-formatted       4127b367fedd  attoparsec-0.14.4/benchmarks/TextFastSet.hs
-formatted       2b16e18cd8c0  attoparsec-0.14.4/benchmarks/Warp.hs
-formatted       5aab92534568  attoparsec-0.14.4/benchmarks/warp-3.0.1.1/Network/Wai/Handler/Warp/ReadInt.hs
-formatted       1f7d3a417fb5  attoparsec-0.14.4/benchmarks/warp-3.0.1.1/Network/Wai/Handler/Warp/RequestHeader.hs
-formatted       0d3565bef090  attoparsec-0.14.4/examples/Atto_RFC2616.hs
-formatted       b6861e7aadf8  attoparsec-0.14.4/examples/Parsec_RFC2616.hs
-formatted       af7fdd1013cc  attoparsec-0.14.4/examples/RFC2616.hs
-formatted       ef93830525fb  attoparsec-0.14.4/internal/Data/Attoparsec/ByteString/Buffer.hs
-formatted       11586d954f58  attoparsec-0.14.4/internal/Data/Attoparsec/ByteString/FastSet.hs
-formatted       f21e47830b1f  attoparsec-0.14.4/internal/Data/Attoparsec/Internal/Compat.hs
-formatted       4498fcbfa61f  attoparsec-0.14.4/internal/Data/Attoparsec/Internal/Fhthagn.hs
-formatted       5702ff8f1bfe  attoparsec-0.14.4/internal/Data/Attoparsec/Text/Buffer.hs
-formatted       eb9808888de1  attoparsec-0.14.4/internal/Data/Attoparsec/Text/FastSet.hs
-formatted       ccaeb87485db  attoparsec-0.14.4/tests/QC.hs
-formatted       c4481214d6c0  attoparsec-0.14.4/tests/QC/Buffer.hs
-formatted       ae7fa7b38a4b  attoparsec-0.14.4/tests/QC/ByteString.hs
-formatted       455e4866502a  attoparsec-0.14.4/tests/QC/Combinator.hs
-formatted       432dc39c009b  attoparsec-0.14.4/tests/QC/Common.hs
-formatted       e1690783c200  attoparsec-0.14.4/tests/QC/IPv6/Internal.hs
-formatted       0692feda416d  attoparsec-0.14.4/tests/QC/IPv6/Types.hs
-formatted       08452f3d9508  attoparsec-0.14.4/tests/QC/Rechunked.hs
-formatted       0bab40e54197  attoparsec-0.14.4/tests/QC/Simple.hs
-formatted       f610227583f7  attoparsec-0.14.4/tests/QC/Text.hs
-formatted       930b366b3b68  attoparsec-0.14.4/tests/QC/Text/FastSet.hs
-formatted       ed6a9f21b67c  attoparsec-0.14.4/tests/QC/Text/Regressions.hs
-formatted       7710b806795e  aws-0.25.3/Aws.hs
-formatted       a9796f263dfc  aws-0.25.3/Aws/Aws.hs
-formatted       162fd677ca7f  aws-0.25.3/Aws/Core.hs
-formatted       526f7494fea1  aws-0.25.3/Aws/DynamoDb.hs
-formatted       11c5a36e6111  aws-0.25.3/Aws/DynamoDb/Commands.hs
-formatted       816c9145f15f  aws-0.25.3/Aws/DynamoDb/Commands/BatchGetItem.hs
-formatted       66180bb576de  aws-0.25.3/Aws/DynamoDb/Commands/BatchWriteItem.hs
-formatted       2dd73c556bae  aws-0.25.3/Aws/DynamoDb/Commands/DeleteItem.hs
-formatted       a4c1ac5401e1  aws-0.25.3/Aws/DynamoDb/Commands/GetItem.hs
-formatted       8eeae03bf6c6  aws-0.25.3/Aws/DynamoDb/Commands/PutItem.hs
-formatted       39a1d3ed567f  aws-0.25.3/Aws/DynamoDb/Commands/Query.hs
-formatted       ee62e16512fa  aws-0.25.3/Aws/DynamoDb/Commands/Scan.hs
-formatted       c38c6911e37d  aws-0.25.3/Aws/DynamoDb/Commands/Table.hs
-formatted       63e4dc333814  aws-0.25.3/Aws/DynamoDb/Commands/UpdateItem.hs
-formatted       953d8c1f7a8f  aws-0.25.3/Aws/DynamoDb/Core.hs
-formatted       7da30757579d  aws-0.25.3/Aws/Ec2/InstanceMetadata.hs
-formatted       64524ea72e53  aws-0.25.3/Aws/Iam.hs
-formatted       749eee8b56a6  aws-0.25.3/Aws/Iam/Commands.hs
-formatted       6cab7de997d4  aws-0.25.3/Aws/Iam/Commands/AddUserToGroup.hs
-formatted       86ddf2e56d99  aws-0.25.3/Aws/Iam/Commands/CreateAccessKey.hs
-formatted       d91ce3a3d7eb  aws-0.25.3/Aws/Iam/Commands/CreateGroup.hs
-formatted       0151d576a66e  aws-0.25.3/Aws/Iam/Commands/CreateUser.hs
-formatted       534cd5da900d  aws-0.25.3/Aws/Iam/Commands/DeleteAccessKey.hs
-formatted       69f808dacd5c  aws-0.25.3/Aws/Iam/Commands/DeleteGroup.hs
-formatted       c99d76b534c3  aws-0.25.3/Aws/Iam/Commands/DeleteGroupPolicy.hs
-formatted       7214274b0a75  aws-0.25.3/Aws/Iam/Commands/DeleteUser.hs
-formatted       539089e60152  aws-0.25.3/Aws/Iam/Commands/DeleteUserPolicy.hs
-formatted       96c13cf9a584  aws-0.25.3/Aws/Iam/Commands/GetGroupPolicy.hs
-formatted       512be8c8f03d  aws-0.25.3/Aws/Iam/Commands/GetUser.hs
-formatted       a2a951b85bd4  aws-0.25.3/Aws/Iam/Commands/GetUserPolicy.hs
-formatted       27c28857ce57  aws-0.25.3/Aws/Iam/Commands/ListAccessKeys.hs
-formatted       dbb935e72374  aws-0.25.3/Aws/Iam/Commands/ListGroupPolicies.hs
-formatted       650c943b98e3  aws-0.25.3/Aws/Iam/Commands/ListGroups.hs
-formatted       ba0e4827b583  aws-0.25.3/Aws/Iam/Commands/ListMfaDevices.hs
-formatted       318b8d56fcfa  aws-0.25.3/Aws/Iam/Commands/ListUserPolicies.hs
-formatted       1238be9d0ebe  aws-0.25.3/Aws/Iam/Commands/ListUsers.hs
-formatted       a9adfe2a442f  aws-0.25.3/Aws/Iam/Commands/PutGroupPolicy.hs
-formatted       6f67f99ccb94  aws-0.25.3/Aws/Iam/Commands/PutUserPolicy.hs
-formatted       3108bb7a63ed  aws-0.25.3/Aws/Iam/Commands/RemoveUserFromGroup.hs
-formatted       fbb2573ec037  aws-0.25.3/Aws/Iam/Commands/UpdateAccessKey.hs
-formatted       318f4ad2dd6f  aws-0.25.3/Aws/Iam/Commands/UpdateGroup.hs
-formatted       0e38dcbc3f33  aws-0.25.3/Aws/Iam/Commands/UpdateUser.hs
-formatted       0e616b268e22  aws-0.25.3/Aws/Iam/Core.hs
-formatted       feab396b426b  aws-0.25.3/Aws/Iam/Internal.hs
-formatted       02714b33e7fa  aws-0.25.3/Aws/Network.hs
-formatted       ce77812a32a4  aws-0.25.3/Aws/S3.hs
-formatted       468614525265  aws-0.25.3/Aws/S3/Commands.hs
-formatted       6e0d1bf40820  aws-0.25.3/Aws/S3/Commands/CopyObject.hs
-formatted       74b3876221d3  aws-0.25.3/Aws/S3/Commands/DeleteBucket.hs
-formatted       2172bd0ac689  aws-0.25.3/Aws/S3/Commands/DeleteObject.hs
-formatted       71b066deaf91  aws-0.25.3/Aws/S3/Commands/DeleteObjectVersion.hs
-formatted       aec32a8ce26a  aws-0.25.3/Aws/S3/Commands/DeleteObjects.hs
-formatted       58c26ad66fe6  aws-0.25.3/Aws/S3/Commands/GetBucket.hs
-formatted       25df4181bd01  aws-0.25.3/Aws/S3/Commands/GetBucketLocation.hs
-formatted       8576d8050fa2  aws-0.25.3/Aws/S3/Commands/GetBucketObjectVersions.hs
-formatted       c2ae17dfac1c  aws-0.25.3/Aws/S3/Commands/GetBucketVersioning.hs
-formatted       1da66c4c9858  aws-0.25.3/Aws/S3/Commands/GetObject.hs
-formatted       6f29ea695d0a  aws-0.25.3/Aws/S3/Commands/GetService.hs
-formatted       293d655f68ee  aws-0.25.3/Aws/S3/Commands/HeadObject.hs
-formatted       6d71ddbd4d83  aws-0.25.3/Aws/S3/Commands/Multipart.hs
-formatted       c9972f937c82  aws-0.25.3/Aws/S3/Commands/PutBucket.hs
-formatted       17fac1555526  aws-0.25.3/Aws/S3/Commands/PutBucketVersioning.hs
-formatted       5f970509bf06  aws-0.25.3/Aws/S3/Commands/PutObject.hs
-formatted       35b464748fc1  aws-0.25.3/Aws/S3/Commands/RestoreObject.hs
-formatted       627fffa71c1a  aws-0.25.3/Aws/S3/Core.hs
-formatted       e59133632c71  aws-0.25.3/Aws/Ses.hs
-formatted       98906d812790  aws-0.25.3/Aws/Ses/Commands.hs
-formatted       d82f6af0c772  aws-0.25.3/Aws/Ses/Commands/DeleteIdentity.hs
-formatted       0a54c52718c5  aws-0.25.3/Aws/Ses/Commands/GetIdentityDkimAttributes.hs
-formatted       661cdba65ae1  aws-0.25.3/Aws/Ses/Commands/GetIdentityNotificationAttributes.hs
-formatted       abee7d091f47  aws-0.25.3/Aws/Ses/Commands/GetIdentityVerificationAttributes.hs
-formatted       cf1089b5ea07  aws-0.25.3/Aws/Ses/Commands/ListIdentities.hs
-formatted       7ab7fc59aa36  aws-0.25.3/Aws/Ses/Commands/SendRawEmail.hs
-formatted       562173d60b20  aws-0.25.3/Aws/Ses/Commands/SetIdentityDkimEnabled.hs
-formatted       629ac12fe396  aws-0.25.3/Aws/Ses/Commands/SetIdentityFeedbackForwardingEnabled.hs
-formatted       7b13bc8a115c  aws-0.25.3/Aws/Ses/Commands/SetIdentityNotificationTopic.hs
-formatted       2ef608635aeb  aws-0.25.3/Aws/Ses/Commands/VerifyDomainDkim.hs
-formatted       ffb19c08b235  aws-0.25.3/Aws/Ses/Commands/VerifyDomainIdentity.hs
-formatted       de43062d4755  aws-0.25.3/Aws/Ses/Commands/VerifyEmailIdentity.hs
-formatted       b9023a14f6f1  aws-0.25.3/Aws/Ses/Core.hs
-formatted       4115c76b6f3d  aws-0.25.3/Aws/SimpleDb.hs
-formatted       0b6040677d6d  aws-0.25.3/Aws/SimpleDb/Commands.hs
-formatted       81ffab76c170  aws-0.25.3/Aws/SimpleDb/Commands/Attributes.hs
-formatted       9616c948cf13  aws-0.25.3/Aws/SimpleDb/Commands/Domain.hs
-formatted       8deb23c46a5b  aws-0.25.3/Aws/SimpleDb/Commands/Select.hs
-formatted       1542fdb811fb  aws-0.25.3/Aws/SimpleDb/Core.hs
-formatted       412e7ea774c8  aws-0.25.3/Aws/Sqs.hs
-formatted       346f822a2760  aws-0.25.3/Aws/Sqs/Commands.hs
-formatted       6d4c58eca68a  aws-0.25.3/Aws/Sqs/Commands/Message.hs
-formatted       05c968d4a089  aws-0.25.3/Aws/Sqs/Commands/Permission.hs
-formatted       3a2b342a12c4  aws-0.25.3/Aws/Sqs/Commands/Queue.hs
-formatted       33ff20c0cc1b  aws-0.25.3/Aws/Sqs/Commands/QueueAttributes.hs
-formatted       8141a49d45ee  aws-0.25.3/Aws/Sqs/Core.hs
-formatted       eb8ba0f68d00  aws-0.25.3/Examples/DynamoDb.hs
-formatted       9a96ec734f74  aws-0.25.3/Examples/GetObject.hs
-formatted       799e429953e7  aws-0.25.3/Examples/GetObjectGoogle.hs
-formatted       8065499ab307  aws-0.25.3/Examples/GetObjectV4.hs
-formatted       0121b3f3d691  aws-0.25.3/Examples/MultipartTransfer.hs
-formatted       c09c03a39390  aws-0.25.3/Examples/MultipartUpload.hs
-formatted       f8163e1e4473  aws-0.25.3/Examples/NukeBucket.hs
-formatted       34698069cedb  aws-0.25.3/Examples/PutBucketNearLine.hs
-formatted       d6caebe65382  aws-0.25.3/Examples/SimpleDb.hs
-formatted       c31e8b7adbf5  aws-0.25.3/Examples/Sqs.hs
-formatted       e865ae48f11b  aws-0.25.3/Setup.hs
-formatted       354bb309a68c  aws-0.25.3/tests/DynamoDb/Main.hs
-formatted       75daea597c6a  aws-0.25.3/tests/DynamoDb/Utils.hs
-formatted       3ffa8999bdf7  aws-0.25.3/tests/S3/Main.hs
-formatted       44336eea1e26  aws-0.25.3/tests/Sqs/Main.hs
-formatted       001f1d1eb163  aws-0.25.3/tests/Utils.hs
-formatted       c4588035d2e2  base64-bytestring-1.2.1.0/Data/ByteString/Base64.hs
-formatted       2897fc80ce31  base64-bytestring-1.2.1.0/Data/ByteString/Base64/Internal.hs
-formatted       dae9abac8bd0  base64-bytestring-1.2.1.0/Data/ByteString/Base64/Lazy.hs
-formatted       f0e7d8a34f4b  base64-bytestring-1.2.1.0/Data/ByteString/Base64/URL.hs
-formatted       0d8bf6b77f56  base64-bytestring-1.2.1.0/Data/ByteString/Base64/URL/Lazy.hs
-formatted       e865ae48f11b  base64-bytestring-1.2.1.0/Setup.hs
-formatted       0328dc0c3c7c  base64-bytestring-1.2.1.0/benchmarks/BM.hs
-formatted       e856b328c01f  base64-bytestring-1.2.1.0/tests/Tests.hs
-formatted       d41a83550f57  base64-bytestring-1.2.1.0/utils/Transcode.hs
-formatted       a696585f6bb3  bifunctors-5.6.3/src/Data/Biapplicative.hs
-formatted       445cc73ae2f4  bifunctors-5.6.3/src/Data/Bifunctor/Biap.hs
-formatted       4e8e99fc3d02  bifunctors-5.6.3/src/Data/Bifunctor/Biff.hs
-formatted       622562a94746  bifunctors-5.6.3/src/Data/Bifunctor/Clown.hs
-formatted       5ed71c802f86  bifunctors-5.6.3/src/Data/Bifunctor/Fix.hs
-formatted       2b2e1c855d83  bifunctors-5.6.3/src/Data/Bifunctor/Flip.hs
-formatted       3ac44f1c96ed  bifunctors-5.6.3/src/Data/Bifunctor/Functor.hs
-formatted       c5ca87b8d191  bifunctors-5.6.3/src/Data/Bifunctor/Join.hs
-formatted       50a39353a74f  bifunctors-5.6.3/src/Data/Bifunctor/Joker.hs
-formatted       d60de274f1df  bifunctors-5.6.3/src/Data/Bifunctor/Product.hs
-formatted       a4989781f0a5  bifunctors-5.6.3/src/Data/Bifunctor/Sum.hs
-formatted       07398be9dabc  bifunctors-5.6.3/src/Data/Bifunctor/TH.hs
-formatted       b4784a48aa1a  bifunctors-5.6.3/src/Data/Bifunctor/TH/Internal.hs
-formatted       d65d2830209f  bifunctors-5.6.3/src/Data/Bifunctor/Tannen.hs
-formatted       4b43e6d2b7ee  bifunctors-5.6.3/src/Data/Bifunctor/Wrapped.hs
-formatted       0abba42a51a4  bifunctors-5.6.3/tests/BifunctorSpec.hs
-formatted       2fbd14b119a4  bifunctors-5.6.3/tests/Spec.hs
-formatted       20bbaaea7be2  bifunctors-5.6.3/tests/T89Spec.hs
-formatted       e865ae48f11b  blaze-html-0.9.2.0/Setup.hs
-formatted       59b1e28dc18c  blaze-html-0.9.2.0/src/Text/Blaze/Html.hs
-formatted       1ceaed7998ed  blaze-html-0.9.2.0/src/Text/Blaze/Html/Renderer/Pretty.hs
-formatted       a5a8080ce8a3  blaze-html-0.9.2.0/src/Text/Blaze/Html/Renderer/String.hs
-formatted       850270b61be0  blaze-html-0.9.2.0/src/Text/Blaze/Html/Renderer/Text.hs
-formatted       4dbd824fb533  blaze-html-0.9.2.0/src/Text/Blaze/Html/Renderer/Utf8.hs
-formatted       193787aa6e82  blaze-html-0.9.2.0/src/Text/Blaze/Html4/FrameSet.hs
-formatted       311d6a242cd1  blaze-html-0.9.2.0/src/Text/Blaze/Html4/FrameSet/Attributes.hs
-formatted       980072ab3333  blaze-html-0.9.2.0/src/Text/Blaze/Html4/Strict.hs
-formatted       6d96fbabc526  blaze-html-0.9.2.0/src/Text/Blaze/Html4/Strict/Attributes.hs
-formatted       4c6ce53fa6c0  blaze-html-0.9.2.0/src/Text/Blaze/Html4/Transitional.hs
-formatted       d39d423c9274  blaze-html-0.9.2.0/src/Text/Blaze/Html4/Transitional/Attributes.hs
-formatted       6593178d8914  blaze-html-0.9.2.0/src/Text/Blaze/Html5.hs
-formatted       a51b4ec4c88c  blaze-html-0.9.2.0/src/Text/Blaze/Html5/Attributes.hs
-formatted       a3131475444c  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/FrameSet.hs
-formatted       b11110851d4d  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/FrameSet/Attributes.hs
-formatted       326a6b8007f4  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/Strict.hs
-formatted       614d1d8b8758  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/Strict/Attributes.hs
-formatted       f18debc4b04a  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/Transitional.hs
-formatted       b02420bd150d  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/Transitional/Attributes.hs
-formatted       19fcd3fe0b2a  blaze-html-0.9.2.0/src/Text/Blaze/XHtml5.hs
-formatted       e7349ea7b26e  blaze-html-0.9.2.0/src/Text/Blaze/XHtml5/Attributes.hs
-formatted       6a3eeb3e9d8b  blaze-html-0.9.2.0/src/Util/GenerateHtmlCombinators.hs
-formatted       c350d72adcf6  blaze-html-0.9.2.0/src/Util/Sanitize.hs
-formatted       3b0e5b5fbcb0  blaze-html-0.9.2.0/tests/TestSuite.hs
-formatted       e2943235e42d  blaze-html-0.9.2.0/tests/Text/Blaze/Html/Tests.hs
-formatted       9dae0554f33d  blaze-html-0.9.2.0/tests/Text/Blaze/Html/Tests/Util.hs
-formatted       c858d7e158e9  blaze-html-0.9.2.0/tests/Util/Tests.hs
-formatted       e865ae48f11b  blaze-markup-0.8.3.0/Setup.hs
-formatted       a414efd123bb  blaze-markup-0.8.3.0/src/Text/Blaze.hs
-formatted       b748bec53a7d  blaze-markup-0.8.3.0/src/Text/Blaze/Internal.hs
-formatted       4846f41adc9e  blaze-markup-0.8.3.0/src/Text/Blaze/Renderer/Pretty.hs
-formatted       2e54745ce84a  blaze-markup-0.8.3.0/src/Text/Blaze/Renderer/String.hs
-formatted       8bb5a6b40341  blaze-markup-0.8.3.0/src/Text/Blaze/Renderer/Text.hs
-formatted       c0f54cd6a8ef  blaze-markup-0.8.3.0/src/Text/Blaze/Renderer/Utf8.hs
-formatted       c7292f26d075  blaze-markup-0.8.3.0/tests/TestSuite.hs
-formatted       efa997a477e9  blaze-markup-0.8.3.0/tests/Text/Blaze/Tests.hs
-formatted       e6ac9555645c  blaze-markup-0.8.3.0/tests/Text/Blaze/Tests/Util.hs
-formatted       e865ae48f11b  brick-2.13/Setup.hs
-formatted       63a60b3578b5  brick-2.13/programs/AnimationDemo.hs
-formatted       5d807c6bfef9  brick-2.13/programs/AttrDemo.hs
-formatted       efff9829e309  brick-2.13/programs/BorderDemo.hs
-formatted       aef958fe74cd  brick-2.13/programs/CacheDemo.hs
-formatted       095e55ce36f6  brick-2.13/programs/CroppingDemo.hs
-formatted       2bd41626b7f1  brick-2.13/programs/CustomEventDemo.hs
-formatted       74968af52af2  brick-2.13/programs/CustomKeybindingDemo.hs
-formatted       8438ad4ac269  brick-2.13/programs/DialogDemo.hs
-formatted       70a751a6fa70  brick-2.13/programs/DynamicBorderDemo.hs
-formatted       464ea19b0d91  brick-2.13/programs/EditDemo.hs
-formatted       4cce67dc7675  brick-2.13/programs/EditorLineNumbersDemo.hs
-formatted       cb441c25368f  brick-2.13/programs/FileBrowserDemo.hs
-formatted       f42c468e824d  brick-2.13/programs/FillDemo.hs
-formatted       f53d59f91db3  brick-2.13/programs/FormDemo.hs
-formatted       ccec85b0d210  brick-2.13/programs/HelloWorldDemo.hs
-formatted       df3c26970095  brick-2.13/programs/LayerDemo.hs
-formatted       f010e64931de  brick-2.13/programs/ListDemo.hs
-formatted       72b3c637e7a9  brick-2.13/programs/ListViDemo.hs
-formatted       b09c3f445d0e  brick-2.13/programs/MouseDemo.hs
-formatted       07bae652c697  brick-2.13/programs/PaddingDemo.hs
-formatted       b42491ad385a  brick-2.13/programs/ProgressBarDemo.hs
-formatted       663c2424c9c5  brick-2.13/programs/ReadmeDemo.hs
-formatted       d199bd740848  brick-2.13/programs/SuspendAndResumeDemo.hs
-formatted       da922e788566  brick-2.13/programs/TableDemo.hs
-formatted       4475181f29de  brick-2.13/programs/TabularListDemo.hs
-formatted       b7e39f0a8d19  brick-2.13/programs/TailDemo.hs
-formatted       d386391b5c6d  brick-2.13/programs/TextWrapDemo.hs
-formatted       4539be6276d5  brick-2.13/programs/ThemeDemo.hs
-formatted       2c64cf0649ba  brick-2.13/programs/ViewportScrollDemo.hs
-formatted       76a2aa468b27  brick-2.13/programs/ViewportScrollbarsDemo.hs
-formatted       e2bd645f4c8a  brick-2.13/programs/VisibilityDemo.hs
-formatted       0abc07286e47  brick-2.13/src/Brick.hs
-formatted       5c7acfef56e2  brick-2.13/src/Brick/Animation.hs
-formatted       deb1866c9333  brick-2.13/src/Brick/Animation/Clock.hs
-formatted       91b158ee4b8a  brick-2.13/src/Brick/AttrMap.hs
-formatted       13c109f25eb8  brick-2.13/src/Brick/BChan.hs
-formatted       a220048b3f60  brick-2.13/src/Brick/BorderMap.hs
-formatted       7aa4818185b3  brick-2.13/src/Brick/Focus.hs
-formatted       b99dcc536b6e  brick-2.13/src/Brick/Forms.hs
-formatted       d6c2a2e1b0a0  brick-2.13/src/Brick/Keybindings.hs
-formatted       4afba3471679  brick-2.13/src/Brick/Keybindings/KeyConfig.hs
-formatted       e8fe81270a11  brick-2.13/src/Brick/Keybindings/KeyDispatcher.hs
-formatted       10682f468a33  brick-2.13/src/Brick/Keybindings/KeyEvents.hs
-formatted       20d38a2fef1c  brick-2.13/src/Brick/Keybindings/Normalize.hs
-formatted       422ce68b006b  brick-2.13/src/Brick/Keybindings/Parse.hs
-formatted       500582ecf6a0  brick-2.13/src/Brick/Keybindings/Pretty.hs
-formatted       3a2fd805219a  brick-2.13/src/Brick/Main.hs
-formatted       74d114b85be0  brick-2.13/src/Brick/Themes.hs
-formatted       af2489bd5835  brick-2.13/src/Brick/Types.hs
-formatted       5a0fb2f107c1  brick-2.13/src/Brick/Types/Common.hs
-formatted       1053ffe4d321  brick-2.13/src/Brick/Types/EventM.hs
-formatted       680c7fc4c12b  brick-2.13/src/Brick/Types/Internal.hs
-formatted       81c674829568  brick-2.13/src/Brick/Types/TH.hs
-formatted       02b0e53f451c  brick-2.13/src/Brick/Util.hs
-formatted       cba7b18b8f68  brick-2.13/src/Brick/Widgets/Border.hs
-formatted       89894b08f498  brick-2.13/src/Brick/Widgets/Border/Style.hs
-formatted       e3b47970aba1  brick-2.13/src/Brick/Widgets/Center.hs
-formatted       d864d6f5529c  brick-2.13/src/Brick/Widgets/Core.hs
-formatted       9b5313ab5ee9  brick-2.13/src/Brick/Widgets/Dialog.hs
-formatted       c71ef0bf6ec5  brick-2.13/src/Brick/Widgets/Edit.hs
-formatted       4478fd2c6064  brick-2.13/src/Brick/Widgets/FileBrowser.hs
-formatted       c480d93b371e  brick-2.13/src/Brick/Widgets/Internal.hs
-formatted       f35028306876  brick-2.13/src/Brick/Widgets/List.hs
-formatted       45273510047b  brick-2.13/src/Brick/Widgets/ProgressBar.hs
-formatted       18c427091a7b  brick-2.13/src/Brick/Widgets/Table.hs
-formatted       868aec6c5d83  brick-2.13/src/Data/IMap.hs
-formatted       15733bb95234  brick-2.13/tests/List.hs
-formatted       2e6ed8d0e976  brick-2.13/tests/Main.hs
-formatted       073f01c2462e  brick-2.13/tests/Render.hs
-formatted       e0fa5e2b222c  brittany-0.14.0.2/data/Test1.hs
-formatted       a7fed1125f29  brittany-0.14.0.2/data/Test10.hs
-formatted       dd2db552d155  brittany-0.14.0.2/data/Test100.hs
-formatted       3ebccae4d2bf  brittany-0.14.0.2/data/Test101.hs
-formatted       000b618097d0  brittany-0.14.0.2/data/Test102.hs
-formatted       26845ab84f6a  brittany-0.14.0.2/data/Test103.hs
-formatted       25cf4c76ed6b  brittany-0.14.0.2/data/Test104.hs
-formatted       bac120fe0092  brittany-0.14.0.2/data/Test105.hs
-formatted       e29d7ffca93f  brittany-0.14.0.2/data/Test106.hs
-formatted       0b6e06bf2c23  brittany-0.14.0.2/data/Test107.hs
-formatted       eda42fe4d65b  brittany-0.14.0.2/data/Test108.hs
-formatted       9ce1b7bc7832  brittany-0.14.0.2/data/Test109.hs
-formatted       c7d09069af77  brittany-0.14.0.2/data/Test11.hs
-formatted       61661f795457  brittany-0.14.0.2/data/Test110.hs
-formatted       37d78f5961ec  brittany-0.14.0.2/data/Test111.hs
-formatted       1e4bb8275bfb  brittany-0.14.0.2/data/Test112.hs
-formatted       8cda89e87702  brittany-0.14.0.2/data/Test113.hs
-formatted       751bfd56bc69  brittany-0.14.0.2/data/Test114.hs
-formatted       5078888fc5d2  brittany-0.14.0.2/data/Test115.hs
-formatted       3fdf3b074d25  brittany-0.14.0.2/data/Test116.hs
-formatted       15ad0c63e705  brittany-0.14.0.2/data/Test117.hs
-formatted       5d67c955a452  brittany-0.14.0.2/data/Test118.hs
-formatted       4581aecedf18  brittany-0.14.0.2/data/Test119.hs
-formatted       624becd3f674  brittany-0.14.0.2/data/Test12.hs
-formatted       5bbfe94a03d4  brittany-0.14.0.2/data/Test120.hs
-formatted       01ac88bcab1a  brittany-0.14.0.2/data/Test121.hs
-formatted       057f0ce3ffb0  brittany-0.14.0.2/data/Test122.hs
-formatted       661f6da49632  brittany-0.14.0.2/data/Test123.hs
-formatted       86c1caf3eee5  brittany-0.14.0.2/data/Test124.hs
-formatted       c6ffbf389d8d  brittany-0.14.0.2/data/Test125.hs
-formatted       1b2ef1cfadaa  brittany-0.14.0.2/data/Test126.hs
-formatted       058f31d7f6cc  brittany-0.14.0.2/data/Test127.hs
-formatted       bec0f8aa554d  brittany-0.14.0.2/data/Test128.hs
-formatted       f712d9c961eb  brittany-0.14.0.2/data/Test129.hs
-formatted       79735ec00a3d  brittany-0.14.0.2/data/Test13.hs
-formatted       f808d5477ba7  brittany-0.14.0.2/data/Test130.hs
-formatted       2372bf2e1670  brittany-0.14.0.2/data/Test131.hs
-formatted       c6526aabb3c3  brittany-0.14.0.2/data/Test132.hs
-formatted       5287afc100b5  brittany-0.14.0.2/data/Test133.hs
-formatted       cbf28cc3de46  brittany-0.14.0.2/data/Test134.hs
-formatted       e9f15a2df4fd  brittany-0.14.0.2/data/Test135.hs
-formatted       d40ccadec39d  brittany-0.14.0.2/data/Test136.hs
-formatted       e8b4564e3bfa  brittany-0.14.0.2/data/Test137.hs
-formatted       ddbd7b880898  brittany-0.14.0.2/data/Test138.hs
-formatted       4ce9b0b36ac2  brittany-0.14.0.2/data/Test139.hs
-formatted       bb31ea72e15c  brittany-0.14.0.2/data/Test14.hs
-formatted       f04daeaa79e9  brittany-0.14.0.2/data/Test140.hs
-formatted       3f2c0367c6f9  brittany-0.14.0.2/data/Test141.hs
-formatted       edb875329172  brittany-0.14.0.2/data/Test142.hs
-formatted       fa53ce7f455d  brittany-0.14.0.2/data/Test143.hs
-formatted       1c5e166b5b3c  brittany-0.14.0.2/data/Test144.hs
-formatted       412dc562e63e  brittany-0.14.0.2/data/Test145.hs
-formatted       6594ac0ac89d  brittany-0.14.0.2/data/Test146.hs
-formatted       0132945dc887  brittany-0.14.0.2/data/Test147.hs
-formatted       0277bb5ca795  brittany-0.14.0.2/data/Test148.hs
-formatted       cbbb9e8ddafa  brittany-0.14.0.2/data/Test149.hs
-formatted       9db344b52a25  brittany-0.14.0.2/data/Test15.hs
-formatted       d29a46b01b30  brittany-0.14.0.2/data/Test150.hs
-formatted       d4d803460298  brittany-0.14.0.2/data/Test151.hs
-formatted       a36d7b2912f5  brittany-0.14.0.2/data/Test152.hs
-formatted       ea0b611491be  brittany-0.14.0.2/data/Test153.hs
-formatted       6607ab7d8924  brittany-0.14.0.2/data/Test154.hs
-formatted       66cbd556135d  brittany-0.14.0.2/data/Test155.hs
-formatted       2913f4f1ea6b  brittany-0.14.0.2/data/Test156.hs
-formatted       57f3fe7514c4  brittany-0.14.0.2/data/Test157.hs
-formatted       7cff7b0ac651  brittany-0.14.0.2/data/Test158.hs
-formatted       d8fde995e15b  brittany-0.14.0.2/data/Test159.hs
-formatted       b65a3702395c  brittany-0.14.0.2/data/Test16.hs
-formatted       8f083a4a74fc  brittany-0.14.0.2/data/Test160.hs
-formatted       756b8d709d75  brittany-0.14.0.2/data/Test161.hs
-formatted       fb931ccfd1e4  brittany-0.14.0.2/data/Test162.hs
-formatted       30ebe5ac65f1  brittany-0.14.0.2/data/Test163.hs
-formatted       729a285d4963  brittany-0.14.0.2/data/Test164.hs
-formatted       1d7b340799de  brittany-0.14.0.2/data/Test165.hs
-formatted       660e2a8d17c4  brittany-0.14.0.2/data/Test166.hs
-formatted       9034e094d375  brittany-0.14.0.2/data/Test167.hs
-formatted       d8056c8b2928  brittany-0.14.0.2/data/Test168.hs
-formatted       cd8fce2bda23  brittany-0.14.0.2/data/Test169.hs
-formatted       bce8e4d3c9ba  brittany-0.14.0.2/data/Test17.hs
-formatted       b9c1ba677274  brittany-0.14.0.2/data/Test170.hs
-formatted       81fa7c381707  brittany-0.14.0.2/data/Test171.hs
-formatted       ac4339e3794f  brittany-0.14.0.2/data/Test172.hs
-formatted       c651a0d78d61  brittany-0.14.0.2/data/Test173.hs
-formatted       893e9047ccc9  brittany-0.14.0.2/data/Test174.hs
-formatted       44a807f3c420  brittany-0.14.0.2/data/Test175.hs
-formatted       feac3083c99d  brittany-0.14.0.2/data/Test176.hs
-formatted       2cc15cb26130  brittany-0.14.0.2/data/Test177.hs
-formatted       47771349ee44  brittany-0.14.0.2/data/Test178.hs
-formatted       fe3c3245408d  brittany-0.14.0.2/data/Test179.hs
-formatted       674dab4fdbcb  brittany-0.14.0.2/data/Test18.hs
-formatted       c68cfb31f575  brittany-0.14.0.2/data/Test180.hs
-formatted       e6325e11af38  brittany-0.14.0.2/data/Test181.hs
-formatted       42d9bc7fc2ce  brittany-0.14.0.2/data/Test182.hs
-formatted       a1e86d78ee32  brittany-0.14.0.2/data/Test183.hs
-formatted       88ddfc17a44e  brittany-0.14.0.2/data/Test184.hs
-formatted       f6c7f8ad0585  brittany-0.14.0.2/data/Test185.hs
-formatted       5016aa65eeae  brittany-0.14.0.2/data/Test186.hs
-formatted       1f6812c3d99f  brittany-0.14.0.2/data/Test187.hs
-formatted       a063a95ec0b5  brittany-0.14.0.2/data/Test188.hs
-formatted       67c40f7b42e6  brittany-0.14.0.2/data/Test189.hs
-formatted       1b68494e9013  brittany-0.14.0.2/data/Test19.hs
-formatted       96f1ef06a2f4  brittany-0.14.0.2/data/Test190.hs
-formatted       a063a95ec0b5  brittany-0.14.0.2/data/Test191.hs
-formatted       dc32174d8f9d  brittany-0.14.0.2/data/Test192.hs
-formatted       b35395abfd05  brittany-0.14.0.2/data/Test193.hs
-formatted       4d5ddfd8aaab  brittany-0.14.0.2/data/Test194.hs
-formatted       8bb98e83f59e  brittany-0.14.0.2/data/Test195.hs
-formatted       45232601b2c3  brittany-0.14.0.2/data/Test196.hs
-formatted       bdc233fea9ba  brittany-0.14.0.2/data/Test197.hs
-formatted       9ce65738e093  brittany-0.14.0.2/data/Test198.hs
-formatted       eec0cab9f980  brittany-0.14.0.2/data/Test199.hs
-formatted       31b2046f8a67  brittany-0.14.0.2/data/Test2.hs
-formatted       a7a0e1c03060  brittany-0.14.0.2/data/Test20.hs
-formatted       d2a7653b9ba4  brittany-0.14.0.2/data/Test200.hs
-formatted       585cd696f310  brittany-0.14.0.2/data/Test201.hs
-formatted       8bba3630cd88  brittany-0.14.0.2/data/Test202.hs
-formatted       3e4e79b5a82a  brittany-0.14.0.2/data/Test203.hs
-formatted       4ce40055a31c  brittany-0.14.0.2/data/Test204.hs
-formatted       be6b7a8883f5  brittany-0.14.0.2/data/Test205.hs
-formatted       8e7d7929e338  brittany-0.14.0.2/data/Test206.hs
-formatted       3e6a91618060  brittany-0.14.0.2/data/Test207.hs
-formatted       59f9efb3349d  brittany-0.14.0.2/data/Test208.hs
-formatted       79081f0fe37d  brittany-0.14.0.2/data/Test209.hs
-formatted       b383b15d82f0  brittany-0.14.0.2/data/Test21.hs
-formatted       4f8c82f9b51b  brittany-0.14.0.2/data/Test210.hs
-formatted       210d2b918c18  brittany-0.14.0.2/data/Test211.hs
-formatted       d8fb0486ae8c  brittany-0.14.0.2/data/Test212.hs
-formatted       e75e1dd08970  brittany-0.14.0.2/data/Test213.hs
-formatted       43a86c48e3e0  brittany-0.14.0.2/data/Test214.hs
-formatted       ccd8170ddd1c  brittany-0.14.0.2/data/Test215.hs
-formatted       d9d08f97d6ce  brittany-0.14.0.2/data/Test216.hs
-formatted       ee242f311cec  brittany-0.14.0.2/data/Test217.hs
-formatted       2c1a4f8388c7  brittany-0.14.0.2/data/Test218.hs
-formatted       77521cf0255b  brittany-0.14.0.2/data/Test219.hs
-formatted       df6920225c3e  brittany-0.14.0.2/data/Test22.hs
-formatted       6912b515f3d4  brittany-0.14.0.2/data/Test220.hs
-formatted       7e87f164cb90  brittany-0.14.0.2/data/Test221.hs
-formatted       d7e0783e5c83  brittany-0.14.0.2/data/Test222.hs
-formatted       ac59786a0059  brittany-0.14.0.2/data/Test223.hs
-formatted       f4b2c131b776  brittany-0.14.0.2/data/Test224.hs
-formatted       fc2a39383602  brittany-0.14.0.2/data/Test225.hs
-formatted       0a2523228f93  brittany-0.14.0.2/data/Test226.hs
-formatted       228fee2942c2  brittany-0.14.0.2/data/Test227.hs
-formatted       911d30954d07  brittany-0.14.0.2/data/Test228.hs
-formatted       2f660f4ac662  brittany-0.14.0.2/data/Test229.hs
-formatted       fbc349a18ac2  brittany-0.14.0.2/data/Test23.hs
-formatted       a7a3d4cdb042  brittany-0.14.0.2/data/Test230.hs
-formatted       8213e25c0010  brittany-0.14.0.2/data/Test231.hs
-formatted       cf2c7ac7b851  brittany-0.14.0.2/data/Test232.hs
-formatted       60e66feea926  brittany-0.14.0.2/data/Test233.hs
-formatted       b6113299b5da  brittany-0.14.0.2/data/Test234.hs
-formatted       661c1fe894fb  brittany-0.14.0.2/data/Test235.hs
-formatted       57f09569ac82  brittany-0.14.0.2/data/Test236.hs
-formatted       0dfd55915ad3  brittany-0.14.0.2/data/Test237.hs
-formatted       4bc18bfc8664  brittany-0.14.0.2/data/Test238.hs
-formatted       f1066c5f9396  brittany-0.14.0.2/data/Test239.hs
-formatted       d0c0b62e11ea  brittany-0.14.0.2/data/Test24.hs
-formatted       a51ff778ca0c  brittany-0.14.0.2/data/Test240.hs
-formatted       6f66ff6e7884  brittany-0.14.0.2/data/Test241.hs
-formatted       7526d4749124  brittany-0.14.0.2/data/Test242.hs
-formatted       d600bfded86f  brittany-0.14.0.2/data/Test243.hs
-formatted       dc1932ee9eaf  brittany-0.14.0.2/data/Test244.hs
-formatted       03cd50abedcb  brittany-0.14.0.2/data/Test245.hs
-formatted       676a58886eb0  brittany-0.14.0.2/data/Test246.hs
-formatted       86d72bb559bc  brittany-0.14.0.2/data/Test247.hs
-formatted       15d8e562989b  brittany-0.14.0.2/data/Test248.hs
-formatted       95a821921e97  brittany-0.14.0.2/data/Test249.hs
-formatted       372e384be5d9  brittany-0.14.0.2/data/Test25.hs
-formatted       c8b79c319e1b  brittany-0.14.0.2/data/Test250.hs
-formatted       9e983a1c88d0  brittany-0.14.0.2/data/Test251.hs
-formatted       e25fa77a311d  brittany-0.14.0.2/data/Test252.hs
-formatted       2abc462210d7  brittany-0.14.0.2/data/Test253.hs
-formatted       3dab93bb6c11  brittany-0.14.0.2/data/Test254.hs
-formatted       ded4f913ac25  brittany-0.14.0.2/data/Test255.hs
-formatted       7072c13a95c7  brittany-0.14.0.2/data/Test256.hs
-formatted       f79f249e0890  brittany-0.14.0.2/data/Test257.hs
-formatted       a9cbb8a905a0  brittany-0.14.0.2/data/Test258.hs
-formatted       7c0c18756066  brittany-0.14.0.2/data/Test259.hs
-formatted       a9993e322f84  brittany-0.14.0.2/data/Test26.hs
-formatted       bd4ad74e5ad1  brittany-0.14.0.2/data/Test260.hs
-formatted       40147eb0ec0f  brittany-0.14.0.2/data/Test261.hs
-formatted       3821b5d35161  brittany-0.14.0.2/data/Test262.hs
-formatted       fd9a1453387e  brittany-0.14.0.2/data/Test263.hs
-formatted       b7281c5fb795  brittany-0.14.0.2/data/Test264.hs
-formatted       d815db72d171  brittany-0.14.0.2/data/Test265.hs
-formatted       e1e74708d396  brittany-0.14.0.2/data/Test266.hs
-formatted       eedcbb210202  brittany-0.14.0.2/data/Test267.hs
-formatted       0ca543b36b5d  brittany-0.14.0.2/data/Test268.hs
-formatted       93850bc1adc9  brittany-0.14.0.2/data/Test269.hs
-formatted       b82004f9b520  brittany-0.14.0.2/data/Test27.hs
-formatted       56d7e350bfb5  brittany-0.14.0.2/data/Test270.hs
-formatted       8da0ed8508b1  brittany-0.14.0.2/data/Test271.hs
-formatted       059cb60e3ffb  brittany-0.14.0.2/data/Test272.hs
-formatted       ce7c5a9f7346  brittany-0.14.0.2/data/Test273.hs
-formatted       cf3d3b9f17a4  brittany-0.14.0.2/data/Test274.hs
-formatted       5687e1c0c469  brittany-0.14.0.2/data/Test275.hs
-formatted       f54d68eb932d  brittany-0.14.0.2/data/Test276.hs
-formatted       5280a70aa08d  brittany-0.14.0.2/data/Test277.hs
-formatted       334f9705684d  brittany-0.14.0.2/data/Test278.hs
-formatted       9a6ca39add52  brittany-0.14.0.2/data/Test279.hs
-formatted       35c64cf444f0  brittany-0.14.0.2/data/Test28.hs
-formatted       2c62cf845c15  brittany-0.14.0.2/data/Test280.hs
-formatted       6582acde6803  brittany-0.14.0.2/data/Test281.hs
-formatted       d69c5a291173  brittany-0.14.0.2/data/Test282.hs
-formatted       dad1fa89cc7b  brittany-0.14.0.2/data/Test283.hs
-formatted       61ba8c0a1014  brittany-0.14.0.2/data/Test284.hs
-formatted       dc5e12a45407  brittany-0.14.0.2/data/Test285.hs
-formatted       dc5e12a45407  brittany-0.14.0.2/data/Test286.hs
-formatted       f395a35ab415  brittany-0.14.0.2/data/Test287.hs
-formatted       3fdaf4d18a7c  brittany-0.14.0.2/data/Test288.hs
-formatted       8472b4d5d119  brittany-0.14.0.2/data/Test289.hs
-formatted       4b4297a0f4c5  brittany-0.14.0.2/data/Test29.hs
-formatted       af881940fba6  brittany-0.14.0.2/data/Test290.hs
-formatted       6b8b53cb8029  brittany-0.14.0.2/data/Test291.hs
-formatted       afd400f5f5ca  brittany-0.14.0.2/data/Test292.hs
-formatted       dbd53f969525  brittany-0.14.0.2/data/Test293.hs
-formatted       8e4e40c43066  brittany-0.14.0.2/data/Test294.hs
-formatted       5378d8225be8  brittany-0.14.0.2/data/Test295.hs
-formatted       efa089fba7ce  brittany-0.14.0.2/data/Test296.hs
-formatted       f2528253489c  brittany-0.14.0.2/data/Test297.hs
-formatted       a71313de7a74  brittany-0.14.0.2/data/Test298.hs
-formatted       9c7a3513d329  brittany-0.14.0.2/data/Test299.hs
-formatted       e430aa9e3dac  brittany-0.14.0.2/data/Test3.hs
-formatted       b786e0a045c4  brittany-0.14.0.2/data/Test30.hs
-formatted       82411c11ab17  brittany-0.14.0.2/data/Test300.hs
-formatted       6578a96b238b  brittany-0.14.0.2/data/Test301.hs
-formatted       8cee95f91f47  brittany-0.14.0.2/data/Test302.hs
-formatted       01d16f13bc99  brittany-0.14.0.2/data/Test303.hs
-formatted       2f37bef49ce1  brittany-0.14.0.2/data/Test304.hs
-formatted       9d3e8b7bf639  brittany-0.14.0.2/data/Test305.hs
-formatted       20c63b9ecba6  brittany-0.14.0.2/data/Test306.hs
-formatted       348106878578  brittany-0.14.0.2/data/Test307.hs
-formatted       017f020a856d  brittany-0.14.0.2/data/Test308.hs
-formatted       980708cbb4c4  brittany-0.14.0.2/data/Test309.hs
-formatted       b7f73c7d2a34  brittany-0.14.0.2/data/Test31.hs
-formatted       3c2cc10d169b  brittany-0.14.0.2/data/Test310.hs
-formatted       66fcc75686ea  brittany-0.14.0.2/data/Test311.hs
-formatted       8897cdb0ddcd  brittany-0.14.0.2/data/Test312.hs
-formatted       0c098371b939  brittany-0.14.0.2/data/Test313.hs
-formatted       8de65d3cce3e  brittany-0.14.0.2/data/Test314.hs
-formatted       3e5aa0cbbf8d  brittany-0.14.0.2/data/Test315.hs
-formatted       77220193f4fd  brittany-0.14.0.2/data/Test316.hs
-formatted       681c70c26bdd  brittany-0.14.0.2/data/Test317.hs
-formatted       c9b19f55338f  brittany-0.14.0.2/data/Test318.hs
-formatted       fa83330d01a6  brittany-0.14.0.2/data/Test319.hs
-formatted       310b7bac3014  brittany-0.14.0.2/data/Test32.hs
-formatted       d911bbdfeb7f  brittany-0.14.0.2/data/Test320.hs
-formatted       1275e28eeb82  brittany-0.14.0.2/data/Test321.hs
-formatted       d51414b5c108  brittany-0.14.0.2/data/Test322.hs
-formatted       e318ac8aa564  brittany-0.14.0.2/data/Test323.hs
-formatted       f018e148e8d5  brittany-0.14.0.2/data/Test324.hs
-formatted       1d0af944da7b  brittany-0.14.0.2/data/Test325.hs
-formatted       5798a680c21f  brittany-0.14.0.2/data/Test326.hs
-formatted       023057e5ea2c  brittany-0.14.0.2/data/Test327.hs
-formatted       2341d88441d5  brittany-0.14.0.2/data/Test328.hs
-formatted       947d63282515  brittany-0.14.0.2/data/Test329.hs
-formatted       786cf111bdad  brittany-0.14.0.2/data/Test33.hs
-formatted       9dd64349f3ea  brittany-0.14.0.2/data/Test330.hs
-formatted       15292e5353c7  brittany-0.14.0.2/data/Test331.hs
-formatted       909ea0b219f8  brittany-0.14.0.2/data/Test332.hs
-formatted       2ad0ebe6ebb0  brittany-0.14.0.2/data/Test333.hs
-formatted       9b7204f946d7  brittany-0.14.0.2/data/Test334.hs
-formatted       2baa737cfd00  brittany-0.14.0.2/data/Test335.hs
-formatted       b2addef5d712  brittany-0.14.0.2/data/Test336.hs
-formatted       571c3cac2376  brittany-0.14.0.2/data/Test337.hs
-formatted       7ab714dc2fd3  brittany-0.14.0.2/data/Test338.hs
-formatted       0b6993151fe2  brittany-0.14.0.2/data/Test339.hs
-formatted       7056ebf6bcea  brittany-0.14.0.2/data/Test34.hs
-formatted       aed8c9d9f03b  brittany-0.14.0.2/data/Test340.hs
-formatted       c93ad9724528  brittany-0.14.0.2/data/Test341.hs
-formatted       f189a1720eae  brittany-0.14.0.2/data/Test342.hs
-formatted       1e9cfbe2f3ab  brittany-0.14.0.2/data/Test343.hs
-formatted       5af677fa0a9b  brittany-0.14.0.2/data/Test344.hs
-formatted       abe1b659b346  brittany-0.14.0.2/data/Test345.hs
-formatted       3c1f80fba7f5  brittany-0.14.0.2/data/Test346.hs
-formatted       7f12720f2600  brittany-0.14.0.2/data/Test347.hs
-formatted       264cc0e7cf96  brittany-0.14.0.2/data/Test348.hs
-formatted       03a3efa0a75e  brittany-0.14.0.2/data/Test349.hs
-formatted       b7f73c7d2a34  brittany-0.14.0.2/data/Test35.hs
-formatted       726069a13358  brittany-0.14.0.2/data/Test350.hs
-formatted       a50f8646bfb1  brittany-0.14.0.2/data/Test351.hs
-formatted       849dab5ec39d  brittany-0.14.0.2/data/Test352.hs
-formatted       baedf91b8ccd  brittany-0.14.0.2/data/Test353.hs
-formatted       fcae903dc453  brittany-0.14.0.2/data/Test354.hs
-formatted       2637fe2659d5  brittany-0.14.0.2/data/Test355.hs
-formatted       65798192c40d  brittany-0.14.0.2/data/Test356.hs
-formatted       2cdb94cbf551  brittany-0.14.0.2/data/Test357.hs
-formatted       501e5f69073e  brittany-0.14.0.2/data/Test358.hs
-formatted       86bec0344083  brittany-0.14.0.2/data/Test359.hs
-formatted       987603d032ac  brittany-0.14.0.2/data/Test36.hs
-formatted       15308dc2dd01  brittany-0.14.0.2/data/Test360.hs
-formatted       0b2ad491920b  brittany-0.14.0.2/data/Test361.hs
-formatted       d9da88c7cdef  brittany-0.14.0.2/data/Test362.hs
-formatted       d9831cd6816b  brittany-0.14.0.2/data/Test363.hs
-formatted       1ae4a98bcc4a  brittany-0.14.0.2/data/Test364.hs
-formatted       ce4109a16e55  brittany-0.14.0.2/data/Test365.hs
-formatted       d16eae4aad20  brittany-0.14.0.2/data/Test366.hs
-formatted       b07954dfc9bf  brittany-0.14.0.2/data/Test367.hs
-formatted       45eeef287ee4  brittany-0.14.0.2/data/Test368.hs
-formatted       e61e587a6843  brittany-0.14.0.2/data/Test369.hs
-formatted       f500b3d5f559  brittany-0.14.0.2/data/Test37.hs
-formatted       08718fefbaf6  brittany-0.14.0.2/data/Test370.hs
-formatted       2fc71603e098  brittany-0.14.0.2/data/Test371.hs
-formatted       34177b9d84e3  brittany-0.14.0.2/data/Test372.hs
-formatted       5fa71c232724  brittany-0.14.0.2/data/Test373.hs
-formatted       f5fca966196b  brittany-0.14.0.2/data/Test374.hs
-formatted       a4d64bf7587b  brittany-0.14.0.2/data/Test375.hs
-formatted       14e2ed1f0f63  brittany-0.14.0.2/data/Test376.hs
-formatted       f5a4e0c1e34f  brittany-0.14.0.2/data/Test377.hs
-formatted       bddefc49765b  brittany-0.14.0.2/data/Test378.hs
-formatted       ea19c516bcbf  brittany-0.14.0.2/data/Test379.hs
-formatted       7335e7ca5bd3  brittany-0.14.0.2/data/Test38.hs
-formatted       d2ee555751f5  brittany-0.14.0.2/data/Test380.hs
-formatted       3823e3c2d919  brittany-0.14.0.2/data/Test381.hs
-formatted       80271da1e835  brittany-0.14.0.2/data/Test382.hs
-formatted       ed5f4e8c4709  brittany-0.14.0.2/data/Test383.hs
-formatted       d4963535df46  brittany-0.14.0.2/data/Test384.hs
-formatted       6ced47de66db  brittany-0.14.0.2/data/Test385.hs
-formatted       1570d72029b7  brittany-0.14.0.2/data/Test386.hs
-formatted       1416aa178cdb  brittany-0.14.0.2/data/Test387.hs
-formatted       edfafa8fb3e5  brittany-0.14.0.2/data/Test388.hs
-formatted       4e122b4b2697  brittany-0.14.0.2/data/Test389.hs
-formatted       6c58063d3fab  brittany-0.14.0.2/data/Test39.hs
-formatted       fac1b1c7f0c1  brittany-0.14.0.2/data/Test390.hs
-formatted       edfafa8fb3e5  brittany-0.14.0.2/data/Test391.hs
-formatted       b0d3ee7240ad  brittany-0.14.0.2/data/Test392.hs
-formatted       3742d5df31d3  brittany-0.14.0.2/data/Test393.hs
-formatted       28dd7a32aa13  brittany-0.14.0.2/data/Test394.hs
-formatted       91de5c22d799  brittany-0.14.0.2/data/Test395.hs
-formatted       15521d568177  brittany-0.14.0.2/data/Test396.hs
-formatted       bc632756e066  brittany-0.14.0.2/data/Test397.hs
-formatted       fc2de0dfca48  brittany-0.14.0.2/data/Test398.hs
-formatted       8294327ebf8b  brittany-0.14.0.2/data/Test399.hs
-formatted       c3cdd2cbcecc  brittany-0.14.0.2/data/Test4.hs
-formatted       c8a00284c5f4  brittany-0.14.0.2/data/Test40.hs
-formatted       e55074dcd689  brittany-0.14.0.2/data/Test400.hs
-formatted       4da9e5870180  brittany-0.14.0.2/data/Test401.hs
-formatted       74396290a673  brittany-0.14.0.2/data/Test402.hs
-formatted       d2fafd899e89  brittany-0.14.0.2/data/Test403.hs
-formatted       dede30d772d6  brittany-0.14.0.2/data/Test404.hs
-formatted       899e8af490d3  brittany-0.14.0.2/data/Test405.hs
-formatted       6a318c357310  brittany-0.14.0.2/data/Test406.hs
-formatted       183f062112e1  brittany-0.14.0.2/data/Test407.hs
-formatted       55c58dc8cf59  brittany-0.14.0.2/data/Test408.hs
-formatted       a04dc9525882  brittany-0.14.0.2/data/Test409.hs
-formatted       cdc2db1c8449  brittany-0.14.0.2/data/Test41.hs
-formatted       a59bda637fa1  brittany-0.14.0.2/data/Test410.hs
-formatted       c65e5f1f3ba5  brittany-0.14.0.2/data/Test411.hs
-formatted       462efbd02872  brittany-0.14.0.2/data/Test412.hs
-formatted       4fc4ab30dcc3  brittany-0.14.0.2/data/Test413.hs
-formatted       d9eab58246aa  brittany-0.14.0.2/data/Test414.hs
-formatted       3d11263d426e  brittany-0.14.0.2/data/Test415.hs
-formatted       dbbe7b5f2b24  brittany-0.14.0.2/data/Test416.hs
-formatted       099959230be5  brittany-0.14.0.2/data/Test417.hs
-formatted       056c3c85e1ce  brittany-0.14.0.2/data/Test418.hs
-formatted       bd3660de0717  brittany-0.14.0.2/data/Test419.hs
-formatted       e3f087db5440  brittany-0.14.0.2/data/Test42.hs
-formatted       821fd8910ac5  brittany-0.14.0.2/data/Test420.hs
-formatted       d9b47c23fec6  brittany-0.14.0.2/data/Test421.hs
-formatted       15fe8b3f5a9e  brittany-0.14.0.2/data/Test422.hs
-formatted       cafda87f90a6  brittany-0.14.0.2/data/Test423.hs
-formatted       7fa298da41f9  brittany-0.14.0.2/data/Test424.hs
-formatted       acddf7b49624  brittany-0.14.0.2/data/Test425.hs
-formatted       84cfb756f2f4  brittany-0.14.0.2/data/Test426.hs
-formatted       33c641a7a072  brittany-0.14.0.2/data/Test427.hs
-formatted       19772ef1090c  brittany-0.14.0.2/data/Test428.hs
-formatted       07a30e1c142f  brittany-0.14.0.2/data/Test429.hs
-formatted       6aa1c5a0086b  brittany-0.14.0.2/data/Test43.hs
-formatted       f5d76f5634f5  brittany-0.14.0.2/data/Test430.hs
-formatted       9aae587a1706  brittany-0.14.0.2/data/Test431.hs
-formatted       cab5eb48ea87  brittany-0.14.0.2/data/Test432.hs
-formatted       035c19e15e23  brittany-0.14.0.2/data/Test433.hs
-formatted       54c8c833912d  brittany-0.14.0.2/data/Test434.hs
-formatted       4b85517ecc64  brittany-0.14.0.2/data/Test435.hs
-formatted       ab4c449d67c6  brittany-0.14.0.2/data/Test436.hs
-formatted       9e0a9c4de4a7  brittany-0.14.0.2/data/Test437.hs
-formatted       22f3bbfaab9e  brittany-0.14.0.2/data/Test438.hs
-formatted       27ee3c3a9f1d  brittany-0.14.0.2/data/Test439.hs
-formatted       bc6e01f7c126  brittany-0.14.0.2/data/Test44.hs
-formatted       f114f80afa88  brittany-0.14.0.2/data/Test440.hs
-formatted       91959f72bf42  brittany-0.14.0.2/data/Test441.hs
-formatted       e100c133e0a6  brittany-0.14.0.2/data/Test442.hs
-formatted       a447fa310286  brittany-0.14.0.2/data/Test443.hs
-formatted       afb74691ba25  brittany-0.14.0.2/data/Test444.hs
-formatted       b04dcb13770d  brittany-0.14.0.2/data/Test445.hs
-formatted       005984004c81  brittany-0.14.0.2/data/Test446.hs
-formatted       519cfd48a90e  brittany-0.14.0.2/data/Test447.hs
-formatted       245fb4545054  brittany-0.14.0.2/data/Test448.hs
-formatted       036f126597a1  brittany-0.14.0.2/data/Test449.hs
-formatted       914e8892ce9f  brittany-0.14.0.2/data/Test45.hs
-formatted       dfae62440755  brittany-0.14.0.2/data/Test450.hs
-formatted       3d8e022d4ea8  brittany-0.14.0.2/data/Test451.hs
-formatted       204a8f956d01  brittany-0.14.0.2/data/Test452.hs
-formatted       3ae152eef9f8  brittany-0.14.0.2/data/Test453.hs
-formatted       dd5c2ba000d9  brittany-0.14.0.2/data/Test454.hs
-formatted       255bf40fcf81  brittany-0.14.0.2/data/Test455.hs
-formatted       186aedf45b55  brittany-0.14.0.2/data/Test456.hs
-formatted       00342a85f4ce  brittany-0.14.0.2/data/Test457.hs
-formatted       4d9ccb4d6155  brittany-0.14.0.2/data/Test458.hs
-formatted       33f453ac627f  brittany-0.14.0.2/data/Test459.hs
-formatted       65a9efd49258  brittany-0.14.0.2/data/Test46.hs
-formatted       dbfa4f771264  brittany-0.14.0.2/data/Test460.hs
-formatted       75bf53838e5c  brittany-0.14.0.2/data/Test461.hs
-formatted       5fde28db6063  brittany-0.14.0.2/data/Test462.hs
-formatted       ff5bcd3737f2  brittany-0.14.0.2/data/Test463.hs
-formatted       e30c0ff394dd  brittany-0.14.0.2/data/Test464.hs
-formatted       82f7c7fb716e  brittany-0.14.0.2/data/Test465.hs
-formatted       f59579bd97ca  brittany-0.14.0.2/data/Test466.hs
-formatted       5909971846f9  brittany-0.14.0.2/data/Test467.hs
-formatted       fe8bf0d3f053  brittany-0.14.0.2/data/Test468.hs
-formatted       79dd70b7320f  brittany-0.14.0.2/data/Test469.hs
-formatted       1983a10a25f3  brittany-0.14.0.2/data/Test47.hs
-formatted       271132ce279b  brittany-0.14.0.2/data/Test470.hs
-formatted       14a056182567  brittany-0.14.0.2/data/Test471.hs
-formatted       cbe652ef0cbb  brittany-0.14.0.2/data/Test472.hs
-formatted       3bf39beb5bf7  brittany-0.14.0.2/data/Test473.hs
-formatted       ac6e5e3c9b28  brittany-0.14.0.2/data/Test474.hs
-formatted       7752938de9c6  brittany-0.14.0.2/data/Test475.hs
-formatted       756e0e0edd8b  brittany-0.14.0.2/data/Test476.hs
-formatted       a87acb3bdeb3  brittany-0.14.0.2/data/Test477.hs
-formatted       d489d082ed14  brittany-0.14.0.2/data/Test478.hs
-formatted       dca2bbac2e81  brittany-0.14.0.2/data/Test479.hs
-formatted       00909af2b184  brittany-0.14.0.2/data/Test48.hs
-formatted       0150b83ded52  brittany-0.14.0.2/data/Test480.hs
-formatted       9fd1038ae87c  brittany-0.14.0.2/data/Test481.hs
-formatted       99e73c09fd8f  brittany-0.14.0.2/data/Test482.hs
-formatted       b6e0c157ec82  brittany-0.14.0.2/data/Test483.hs
-formatted       5308cabef2dd  brittany-0.14.0.2/data/Test484.hs
-formatted       3b0850dd8d8d  brittany-0.14.0.2/data/Test485.hs
-formatted       3a14007e64e3  brittany-0.14.0.2/data/Test486.hs
-formatted       e28b3f6dc92a  brittany-0.14.0.2/data/Test487.hs
-formatted       d7ac2e728ca4  brittany-0.14.0.2/data/Test488.hs
-formatted       3455b362a4d8  brittany-0.14.0.2/data/Test489.hs
-formatted       379cdfc91569  brittany-0.14.0.2/data/Test49.hs
-formatted       d2c2b5b45546  brittany-0.14.0.2/data/Test490.hs
-formatted       964f39f9fdd1  brittany-0.14.0.2/data/Test491.hs
-formatted       d469e1b3965b  brittany-0.14.0.2/data/Test492.hs
-formatted       d469e1b3965b  brittany-0.14.0.2/data/Test493.hs
-formatted       1eddc3503b32  brittany-0.14.0.2/data/Test494.hs
-formatted       196d9b015a57  brittany-0.14.0.2/data/Test495.hs
-formatted       fae583830ad8  brittany-0.14.0.2/data/Test496.hs
-formatted       cbeb80fac007  brittany-0.14.0.2/data/Test497.hs
-formatted       326e5653c262  brittany-0.14.0.2/data/Test498.hs
-formatted       7f7e87e04f47  brittany-0.14.0.2/data/Test499.hs
-formatted       3bb5ad04d6c9  brittany-0.14.0.2/data/Test5.hs
-formatted       30d139cbecdf  brittany-0.14.0.2/data/Test50.hs
-formatted       bb1de50ba61a  brittany-0.14.0.2/data/Test500.hs
-formatted       46987cddeeb1  brittany-0.14.0.2/data/Test501.hs
-formatted       a26bb5e5e289  brittany-0.14.0.2/data/Test502.hs
-formatted       608441a45ea2  brittany-0.14.0.2/data/Test503.hs
-formatted       088a029a2027  brittany-0.14.0.2/data/Test504.hs
-formatted       b8d19bd75331  brittany-0.14.0.2/data/Test505.hs
-formatted       7aafe7248e10  brittany-0.14.0.2/data/Test506.hs
-formatted       4c5c5d2bb818  brittany-0.14.0.2/data/Test507.hs
-formatted       a017d7235dda  brittany-0.14.0.2/data/Test508.hs
-formatted       525ac73a7645  brittany-0.14.0.2/data/Test509.hs
-formatted       bdb9309b69ef  brittany-0.14.0.2/data/Test51.hs
-formatted       be3e1e21b3e7  brittany-0.14.0.2/data/Test510.hs
-formatted       386680696e97  brittany-0.14.0.2/data/Test511.hs
-formatted       c74bbb4b17cf  brittany-0.14.0.2/data/Test512.hs
-formatted       bb9ffbc270ba  brittany-0.14.0.2/data/Test513.hs
-formatted       4babc1db968e  brittany-0.14.0.2/data/Test514.hs
-formatted       4babc1db968e  brittany-0.14.0.2/data/Test515.hs
-formatted       4ef117d8e3e2  brittany-0.14.0.2/data/Test516.hs
-formatted       9cdba405b7be  brittany-0.14.0.2/data/Test517.hs
-formatted       6192bf9c4318  brittany-0.14.0.2/data/Test518.hs
-formatted       438975b07785  brittany-0.14.0.2/data/Test519.hs
-formatted       3e9fb57fe53f  brittany-0.14.0.2/data/Test52.hs
-formatted       e0922f030820  brittany-0.14.0.2/data/Test520.hs
-formatted       7a6eceaa78bc  brittany-0.14.0.2/data/Test521.hs
-formatted       cd889668f531  brittany-0.14.0.2/data/Test522.hs
-formatted       5eae819cfab2  brittany-0.14.0.2/data/Test523.hs
-formatted       cdd55a113657  brittany-0.14.0.2/data/Test524.hs
-formatted       948aab2f7cf9  brittany-0.14.0.2/data/Test525.hs
-formatted       74dd57f3e6b2  brittany-0.14.0.2/data/Test526.hs
-formatted       ebc6624271d5  brittany-0.14.0.2/data/Test527.hs
-formatted       6d566659bc06  brittany-0.14.0.2/data/Test528.hs
-formatted       86bb82b0ae12  brittany-0.14.0.2/data/Test529.hs
-formatted       113cb843c235  brittany-0.14.0.2/data/Test53.hs
-formatted       c77ad7418bdb  brittany-0.14.0.2/data/Test530.hs
-formatted       e82e4a69ecaf  brittany-0.14.0.2/data/Test531.hs
-formatted       98d38ba919b8  brittany-0.14.0.2/data/Test532.hs
-formatted       93f0725e6f33  brittany-0.14.0.2/data/Test533.hs
-formatted       2f3eea919721  brittany-0.14.0.2/data/Test534.hs
-formatted       4dfe442efa9f  brittany-0.14.0.2/data/Test535.hs
-formatted       083e49e545b1  brittany-0.14.0.2/data/Test536.hs
-formatted       a93167132f4b  brittany-0.14.0.2/data/Test537.hs
-formatted       76a9d8390ac0  brittany-0.14.0.2/data/Test538.hs
-formatted       cb52a4163a3d  brittany-0.14.0.2/data/Test539.hs
-formatted       3206388ca862  brittany-0.14.0.2/data/Test54.hs
-formatted       32bac85b1c99  brittany-0.14.0.2/data/Test540.hs
-formatted       c1076b4718f2  brittany-0.14.0.2/data/Test55.hs
-formatted       5b5da4a27041  brittany-0.14.0.2/data/Test56.hs
-formatted       7d48cd742ee9  brittany-0.14.0.2/data/Test57.hs
-formatted       09a9442047e7  brittany-0.14.0.2/data/Test58.hs
-formatted       007b3f5499fb  brittany-0.14.0.2/data/Test59.hs
-formatted       d9ed4ebe21ed  brittany-0.14.0.2/data/Test6.hs
-formatted       87e8860858b2  brittany-0.14.0.2/data/Test60.hs
-formatted       7bba808f3304  brittany-0.14.0.2/data/Test61.hs
-formatted       7e7c53e8f5f9  brittany-0.14.0.2/data/Test62.hs
-formatted       38957227fb18  brittany-0.14.0.2/data/Test63.hs
-formatted       d1d477cbcd19  brittany-0.14.0.2/data/Test64.hs
-formatted       abec5eceeaf7  brittany-0.14.0.2/data/Test65.hs
-formatted       7e83cb328466  brittany-0.14.0.2/data/Test66.hs
-formatted       08c924dc75db  brittany-0.14.0.2/data/Test67.hs
-formatted       534f9f24c4c4  brittany-0.14.0.2/data/Test68.hs
-formatted       0edc4bf88879  brittany-0.14.0.2/data/Test69.hs
-formatted       6e4a80a16587  brittany-0.14.0.2/data/Test7.hs
-formatted       c26c8d4af0d4  brittany-0.14.0.2/data/Test70.hs
-formatted       7f9b2bb1df69  brittany-0.14.0.2/data/Test71.hs
-formatted       9d549df4742d  brittany-0.14.0.2/data/Test72.hs
-formatted       05ed72d9e760  brittany-0.14.0.2/data/Test73.hs
-formatted       a54128f146c1  brittany-0.14.0.2/data/Test74.hs
-formatted       29302a244e5c  brittany-0.14.0.2/data/Test75.hs
-formatted       89a2a63deffe  brittany-0.14.0.2/data/Test76.hs
-formatted       7a3ad7569e3d  brittany-0.14.0.2/data/Test77.hs
-formatted       286a50a0eb22  brittany-0.14.0.2/data/Test78.hs
-formatted       bc99bdbbbb1e  brittany-0.14.0.2/data/Test79.hs
-formatted       0a8cec799b2a  brittany-0.14.0.2/data/Test8.hs
-formatted       2f2e96416d6d  brittany-0.14.0.2/data/Test80.hs
-formatted       d1d172867e08  brittany-0.14.0.2/data/Test81.hs
-formatted       f66f9b2381e3  brittany-0.14.0.2/data/Test82.hs
-formatted       4fe035cf193a  brittany-0.14.0.2/data/Test83.hs
-formatted       43e925441c75  brittany-0.14.0.2/data/Test84.hs
-formatted       dddcd81d8e89  brittany-0.14.0.2/data/Test85.hs
-formatted       b34676f3162a  brittany-0.14.0.2/data/Test86.hs
-formatted       847e26a48a11  brittany-0.14.0.2/data/Test87.hs
-formatted       d37afb2bca9c  brittany-0.14.0.2/data/Test88.hs
-formatted       870cc6003dc1  brittany-0.14.0.2/data/Test89.hs
-formatted       cd000b5a236a  brittany-0.14.0.2/data/Test9.hs
-formatted       14a1a4f54ceb  brittany-0.14.0.2/data/Test90.hs
-formatted       583f169ace4c  brittany-0.14.0.2/data/Test91.hs
-formatted       1d30d5458df2  brittany-0.14.0.2/data/Test92.hs
-formatted       21ca73bf65e9  brittany-0.14.0.2/data/Test93.hs
-formatted       2640ff7299cc  brittany-0.14.0.2/data/Test94.hs
-formatted       139f17bd37c8  brittany-0.14.0.2/data/Test95.hs
-formatted       3f35ed17b5d4  brittany-0.14.0.2/data/Test96.hs
-formatted       54dbf9915298  brittany-0.14.0.2/data/Test97.hs
-formatted       25178db879d4  brittany-0.14.0.2/data/Test98.hs
-formatted       52caf5793d73  brittany-0.14.0.2/data/Test99.hs
-formatted       7a5d0ee67b99  brittany-0.14.0.2/source/executable/Main.hs
-formatted       f006bb65ddb6  brittany-0.14.0.2/source/library/Language/Haskell/Brittany.hs
-formatted       bd3007c00bcb  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal.hs
-formatted       52c61c8f36a7  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Backend.hs
-formatted       d92b21322bd4  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/BackendUtils.hs
-formatted       6c0d53b31d45  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Config.hs
-formatted       4387eb5344c3  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Config/Types.hs
-formatted       e13b5e1cf845  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Config/Types/Instances.hs
-formatted       3a7e4e0507b6  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/ExactPrintUtils.hs
-formatted       10f39372ebc8  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/LayouterBasics.hs
-formatted       5d4ba42810fc  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/DataDecl.hs
-formatted       c1d4180a7364  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Decl.hs
-formatted       6da334c9b8cc  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Expr.hs
-formatted       63ac93aa854f  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Expr.hs-boot
-formatted       acf1184a4039  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/IE.hs
-formatted       ba5e2c3aa9ff  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Import.hs
-formatted       b3eeef75906a  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Module.hs
-formatted       c314ecc033b2  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs
-formatted       d46ed5a9675b  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Stmt.hs
-formatted       08c3e5d27dd4  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Stmt.hs-boot
-formatted       48b61a61db4a  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Type.hs
-formatted       8d7327e29615  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Obfuscation.hs
-formatted       0dc2352f4480  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/ParseModule.hs
-formatted       79e767ee3e91  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Prelude.hs
-formatted       1a8db66fd521  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/PreludeUtils.hs
-formatted       7bd9ea5667be  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Transformations/Alt.hs
-formatted       8524c6970b7f  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Transformations/Columns.hs
-formatted       73d5a7f6f8f9  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Transformations/Floating.hs
-formatted       e2ac60fc2da6  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Transformations/Indent.hs
-formatted       2ed0cc6dc5ae  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Transformations/Par.hs
-formatted       a0c752ec0c1d  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Types.hs
-formatted       df622f9a5a85  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Utils.hs
-formatted       5e05cfeb3dd6  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Main.hs
-formatted       e425ebfb8e97  brittany-0.14.0.2/source/test-suite/Main.hs
-formatted       e865ae48f11b  capability-0.5.0.1/Setup.hs
-formatted       eb7b2158a88b  capability-0.5.0.1/examples/CountLog.hs
-formatted       aa1d67f90726  capability-0.5.0.1/examples/Error.hs
-formatted       7bb91536c52e  capability-0.5.0.1/examples/Reader.hs
-formatted       cf7788db327f  capability-0.5.0.1/examples/Reflection.hs
-formatted       4ca78b40a428  capability-0.5.0.1/examples/Sink.hs
-formatted       4bd9f1f5ce20  capability-0.5.0.1/examples/State.hs
-formatted       de729285889f  capability-0.5.0.1/examples/Test.hs
-formatted       bc483d61ffa2  capability-0.5.0.1/examples/Test/Common.hs
-formatted       6c9e8b236461  capability-0.5.0.1/examples/WordCount.hs
-formatted       9a2c6692cf10  capability-0.5.0.1/examples/Writer.hs
-formatted       c7634b7f4e60  capability-0.5.0.1/src/Capability.hs
-formatted       83447b7b7ea5  capability-0.5.0.1/src/Capability/Accessors.hs
-formatted       8d8d36f3f008  capability-0.5.0.1/src/Capability/Constraints.hs
-formatted       f8fc4a2aaee2  capability-0.5.0.1/src/Capability/Derive.hs
-formatted       08904961a765  capability-0.5.0.1/src/Capability/Error.hs
-formatted       97515747424b  capability-0.5.0.1/src/Capability/Reader.hs
-formatted       89877e765220  capability-0.5.0.1/src/Capability/Reader/Internal/Class.hs
-formatted       007089e89b2a  capability-0.5.0.1/src/Capability/Reader/Internal/Strategies.hs
-formatted       cdf1d99e626f  capability-0.5.0.1/src/Capability/Reflection.hs
-formatted       42f2a624abd3  capability-0.5.0.1/src/Capability/Sink.hs
-formatted       dc0a5d3d3878  capability-0.5.0.1/src/Capability/Sink/Internal/Class.hs
-formatted       074cd292b8a7  capability-0.5.0.1/src/Capability/Sink/Internal/Strategies.hs
-formatted       d6a811b81394  capability-0.5.0.1/src/Capability/Source.hs
-formatted       7655749a90f6  capability-0.5.0.1/src/Capability/Source/Internal/Class.hs
-formatted       b718392f90a6  capability-0.5.0.1/src/Capability/Source/Internal/Strategies.hs
-formatted       e288db1d616d  capability-0.5.0.1/src/Capability/State.hs
-formatted       9d0280d2e19e  capability-0.5.0.1/src/Capability/State/Internal/Class.hs
-formatted       77e19ee12ef0  capability-0.5.0.1/src/Capability/State/Internal/Strategies.hs
-formatted       e0fc7f2c44f9  capability-0.5.0.1/src/Capability/State/Internal/Strategies/Common.hs
-formatted       dca34ed58cfd  capability-0.5.0.1/src/Capability/Stream.hs
-formatted       6cd51b2d63f1  capability-0.5.0.1/src/Capability/TypeOf.hs
-formatted       9a266b123a93  capability-0.5.0.1/src/Capability/Writer.hs
-formatted       e865ae48f11b  cassava-0.5.5.0/Setup.hs
-formatted       f8de97e1c58a  cassava-0.5.5.0/examples/IncrementalIndexedBasedDecode.hs
-formatted       b9e7e3d9a0fb  cassava-0.5.5.0/examples/IncrementalNamedBasedEncode.hs
-formatted       a004028b7dc3  cassava-0.5.5.0/examples/IndexBasedDecode.hs
-formatted       03830830ed9e  cassava-0.5.5.0/examples/IndexBasedGeneric.hs
-formatted       f4fb7ce7564b  cassava-0.5.5.0/examples/NamedBasedDecode.hs
-formatted       ecf9a4c54a67  cassava-0.5.5.0/examples/NamedBasedExplicitDecode.hs
-formatted       d51604b7e89f  cassava-0.5.5.0/examples/NamedBasedGeneric.hs
-formatted       9612391bd37b  cassava-0.5.5.0/examples/StreamingIndexBasedDecode.hs
-formatted       efc1fe9896ec  cassava-0.5.5.0/src/Data/Csv.hs
-formatted       817b8cca8d06  cassava-0.5.5.0/src/Data/Csv/Builder.hs
-formatted       38c7c4badf0a  cassava-0.5.5.0/src/Data/Csv/Conversion.hs
-formatted       a4c56813cba7  cassava-0.5.5.0/src/Data/Csv/Conversion/Internal.hs
-formatted       5906452b290a  cassava-0.5.5.0/src/Data/Csv/Encoding.hs
-formatted       32c60ff1a4fd  cassava-0.5.5.0/src/Data/Csv/Incremental.hs
-formatted       be1c60df3b34  cassava-0.5.5.0/src/Data/Csv/Parser.hs
-formatted       014bb9b262b9  cassava-0.5.5.0/src/Data/Csv/Streaming.hs
-formatted       20f42a736b97  cassava-0.5.5.0/src/Data/Csv/Types.hs
-formatted       4a5a0e1a51c9  cassava-0.5.5.0/src/Data/Csv/Util.hs
-formatted       a844141d1fe8  cassava-0.5.5.0/tests/UnitTests.hs
-formatted       7dbba0331af5  comonad-5.0.10/examples/History.hs
-formatted       f218701f2ac5  comonad-5.0.10/src/Control/Comonad.hs
-formatted       d084cf5c7fa7  comonad-5.0.10/src/Control/Comonad/Env.hs
-formatted       3b8ec012a04c  comonad-5.0.10/src/Control/Comonad/Env/Class.hs
-formatted       0dcf633542eb  comonad-5.0.10/src/Control/Comonad/Hoist/Class.hs
-formatted       4bfafba3ce3b  comonad-5.0.10/src/Control/Comonad/Identity.hs
-formatted       49b438747b63  comonad-5.0.10/src/Control/Comonad/Store.hs
-formatted       cf408da422ba  comonad-5.0.10/src/Control/Comonad/Store/Class.hs
-formatted       2c72a397c339  comonad-5.0.10/src/Control/Comonad/Traced.hs
-formatted       da617308f9a3  comonad-5.0.10/src/Control/Comonad/Traced/Class.hs
-formatted       adbd6d7e0f72  comonad-5.0.10/src/Control/Comonad/Trans/Class.hs
-formatted       871b9e0bc5cd  comonad-5.0.10/src/Control/Comonad/Trans/Env.hs
-formatted       c405a550608b  comonad-5.0.10/src/Control/Comonad/Trans/Identity.hs
-formatted       6b990e80a8eb  comonad-5.0.10/src/Control/Comonad/Trans/Store.hs
-formatted       b9f942c1ae6c  comonad-5.0.10/src/Control/Comonad/Trans/Traced.hs
-formatted       34f425eff98b  comonad-5.0.10/src/Data/Functor/Composition.hs
-formatted       be111de01001  conduit-1.3.6.1/benchmarks/optimize-201408.hs
-formatted       f70f6155e62a  conduit-1.3.6.1/benchmarks/unfused.hs
-formatted       20fad0c5aecd  conduit-1.3.6.1/src/Conduit.hs
-formatted       bf88ceabad43  conduit-1.3.6.1/src/Data/Conduit.hs
-formatted       6fba99ab1b1b  conduit-1.3.6.1/src/Data/Conduit/Combinators.hs
-formatted       9e46f7ab29ac  conduit-1.3.6.1/src/Data/Conduit/Combinators/Stream.hs
-formatted       1290e9b983f1  conduit-1.3.6.1/src/Data/Conduit/Combinators/Unqualified.hs
-formatted       8e861a915c2f  conduit-1.3.6.1/src/Data/Conduit/Internal.hs
-formatted       2081cc2fc43d  conduit-1.3.6.1/src/Data/Conduit/Internal/Conduit.hs
-formatted       bbfd28e5b98b  conduit-1.3.6.1/src/Data/Conduit/Internal/Fusion.hs
-formatted       54120af8edce  conduit-1.3.6.1/src/Data/Conduit/Internal/List/Stream.hs
-formatted       2fe8b1b7e798  conduit-1.3.6.1/src/Data/Conduit/Internal/Pipe.hs
-formatted       4a4c14b72249  conduit-1.3.6.1/src/Data/Conduit/Lift.hs
-formatted       15e5ac8a2cb1  conduit-1.3.6.1/src/Data/Conduit/List.hs
-formatted       55a50272f6a7  conduit-1.3.6.1/src/Data/Streaming/FileRead.hs
-formatted       71e1c3bf7039  conduit-1.3.6.1/src/Data/Streaming/Filesystem.hs
-formatted       d9e8dbaa2534  conduit-1.3.6.1/test/Data/Conduit/Extra/ZipConduitSpec.hs
-formatted       3df81ded6599  conduit-1.3.6.1/test/Data/Conduit/StreamSpec.hs
-formatted       cf41359a6248  conduit-1.3.6.1/test/Spec.hs
-formatted       d10fe79bbeec  conduit-1.3.6.1/test/StreamSpec.hs
-formatted       db2295b8113a  conduit-1.3.6.1/test/doctests.hs
-formatted       a21201eaf0ea  conduit-1.3.6.1/test/main.hs
-formatted       e29ee20973f2  contravariant-1.5.6/old-src/Data/Functor/Contravariant.hs
-formatted       acc631e94060  contravariant-1.5.6/src/Data/Functor/Contravariant/Compose.hs
-formatted       12261ada3c4f  contravariant-1.5.6/src/Data/Functor/Contravariant/Divisible.hs
-formatted       6e8599bf8082  contravariant-1.5.6/src/Data/Functor/Contravariant/Generic.hs
-formatted       2841bd16822b  criterion-1.6.5.0/Criterion.hs
-formatted       ee1798194249  criterion-1.6.5.0/Criterion/Analysis.hs
-formatted       c039ba5918a9  criterion-1.6.5.0/Criterion/EmbeddedData.hs
-formatted       f07714df2d3d  criterion-1.6.5.0/Criterion/IO.hs
-formatted       9cbbe0381e04  criterion-1.6.5.0/Criterion/IO/Printf.hs
-formatted       6b182673462d  criterion-1.6.5.0/Criterion/Internal.hs
-formatted       9c5a685a07c7  criterion-1.6.5.0/Criterion/Main.hs
-formatted       99f71e90fa4b  criterion-1.6.5.0/Criterion/Main/Options.hs
-formatted       aab23b74a86d  criterion-1.6.5.0/Criterion/Monad.hs
-formatted       bbcaa9535a9f  criterion-1.6.5.0/Criterion/Monad/Internal.hs
-formatted       b2eb4d4fb4eb  criterion-1.6.5.0/Criterion/Report.hs
-formatted       74308ba37d6a  criterion-1.6.5.0/Criterion/Types.hs
-formatted       54f92871c793  criterion-1.6.5.0/app/Options.hs
-formatted       49dcbeebb5c4  criterion-1.6.5.0/app/Report.hs
-formatted       a437ea93f53e  criterion-1.6.5.0/examples/BadReadFile.hs
-formatted       bfb4844251ca  criterion-1.6.5.0/examples/Comparison.hs
-formatted       f54fba36e069  criterion-1.6.5.0/examples/ConduitVsPipes.hs
-formatted       a4f8cda29d3c  criterion-1.6.5.0/examples/ExtensibleCLI.hs
-formatted       8f4df570ff4e  criterion-1.6.5.0/examples/Fibber.hs
-formatted       9196e3f4c3d7  criterion-1.6.5.0/examples/GoodReadFile.hs
-formatted       30240b972d60  criterion-1.6.5.0/examples/Judy.hs
-formatted       7d1ede331f1f  criterion-1.6.5.0/examples/Maps.hs
-formatted       f396bcf9c829  criterion-1.6.5.0/examples/Overhead.hs
-formatted       3a50edf5477c  criterion-1.6.5.0/examples/Quotes.hs
-formatted       ce8d353ea567  criterion-1.6.5.0/tests/Cleanup.hs
-formatted       78253dc00e1a  criterion-1.6.5.0/tests/Properties.hs
-formatted       a99e4edb542c  criterion-1.6.5.0/tests/Sanity.hs
-formatted       f8a8d8f2c4ae  criterion-1.6.5.0/tests/Tests.hs
-formatted       44af498375d5  cryptonite-0.30/Crypto/Cipher/AES.hs
-formatted       2240267dad51  cryptonite-0.30/Crypto/Cipher/AES/Primitive.hs
-formatted       5694da9617bf  cryptonite-0.30/Crypto/Cipher/AESGCMSIV.hs
-formatted       ab05e6ed96e9  cryptonite-0.30/Crypto/Cipher/Blowfish.hs
-formatted       98e1845904ad  cryptonite-0.30/Crypto/Cipher/Blowfish/Box.hs
-formatted       23c195272bfd  cryptonite-0.30/Crypto/Cipher/Blowfish/Primitive.hs
-formatted       7ece5bd42232  cryptonite-0.30/Crypto/Cipher/CAST5.hs
-formatted       d0210ba9a96f  cryptonite-0.30/Crypto/Cipher/CAST5/Primitive.hs
-formatted       c818f5ccfd4a  cryptonite-0.30/Crypto/Cipher/Camellia.hs
-formatted       f429b69d6156  cryptonite-0.30/Crypto/Cipher/Camellia/Primitive.hs
-formatted       dbd216d2f0aa  cryptonite-0.30/Crypto/Cipher/ChaCha.hs
-formatted       bcadafa03089  cryptonite-0.30/Crypto/Cipher/ChaChaPoly1305.hs
-formatted       092e6bcae818  cryptonite-0.30/Crypto/Cipher/DES.hs
-formatted       7b3282079b6c  cryptonite-0.30/Crypto/Cipher/DES/Primitive.hs
-formatted       bc58b513348e  cryptonite-0.30/Crypto/Cipher/RC4.hs
-formatted       d59fa1e97895  cryptonite-0.30/Crypto/Cipher/Salsa.hs
-formatted       58b5729d32db  cryptonite-0.30/Crypto/Cipher/TripleDES.hs
-formatted       8aafca6b830e  cryptonite-0.30/Crypto/Cipher/Twofish.hs
-formatted       7d7789d95b82  cryptonite-0.30/Crypto/Cipher/Twofish/Primitive.hs
-formatted       54afbb146e5c  cryptonite-0.30/Crypto/Cipher/Types.hs
-formatted       9872fb82a680  cryptonite-0.30/Crypto/Cipher/Types/AEAD.hs
-formatted       839caaf5c14b  cryptonite-0.30/Crypto/Cipher/Types/Base.hs
-formatted       e02385d86f90  cryptonite-0.30/Crypto/Cipher/Types/Block.hs
-formatted       7c2782316618  cryptonite-0.30/Crypto/Cipher/Types/GF.hs
-formatted       17ceaf6e3360  cryptonite-0.30/Crypto/Cipher/Types/Stream.hs
-formatted       6cdb1c7bd28d  cryptonite-0.30/Crypto/Cipher/Types/Utils.hs
-formatted       f1893d3edfa7  cryptonite-0.30/Crypto/Cipher/Utils.hs
-formatted       20107f92349f  cryptonite-0.30/Crypto/Cipher/XSalsa.hs
-formatted       117e7ce7c967  cryptonite-0.30/Crypto/ConstructHash/MiyaguchiPreneel.hs
-formatted       4f15b3874982  cryptonite-0.30/Crypto/Data/AFIS.hs
-formatted       37c60fc95ef2  cryptonite-0.30/Crypto/Data/Padding.hs
-formatted       2ba3cd2f51b9  cryptonite-0.30/Crypto/ECC.hs
-formatted       951ccc172449  cryptonite-0.30/Crypto/ECC/Edwards25519.hs
-formatted       e213548aa40e  cryptonite-0.30/Crypto/ECC/Simple/Prim.hs
-formatted       64fc04cd74ae  cryptonite-0.30/Crypto/ECC/Simple/Types.hs
-formatted       3560b9821c3b  cryptonite-0.30/Crypto/Error.hs
-formatted       0caeb40058f2  cryptonite-0.30/Crypto/Error/Types.hs
-formatted       bcc2e2a5ecac  cryptonite-0.30/Crypto/Hash.hs
-formatted       514502d73233  cryptonite-0.30/Crypto/Hash/Algorithms.hs
-formatted       a83eee5ae7b0  cryptonite-0.30/Crypto/Hash/Blake2.hs
-formatted       f99040e35232  cryptonite-0.30/Crypto/Hash/Blake2b.hs
-formatted       9fc6dd4195c9  cryptonite-0.30/Crypto/Hash/Blake2bp.hs
-formatted       aa6fb8816478  cryptonite-0.30/Crypto/Hash/Blake2s.hs
-formatted       5987b76d2285  cryptonite-0.30/Crypto/Hash/Blake2sp.hs
-formatted       36d330a27ffe  cryptonite-0.30/Crypto/Hash/IO.hs
-formatted       527ac917164f  cryptonite-0.30/Crypto/Hash/Keccak.hs
-formatted       988960beff03  cryptonite-0.30/Crypto/Hash/MD2.hs
-formatted       643fd2f5f7f2  cryptonite-0.30/Crypto/Hash/MD4.hs
-formatted       0176320f82f4  cryptonite-0.30/Crypto/Hash/MD5.hs
-formatted       54c369b13f00  cryptonite-0.30/Crypto/Hash/RIPEMD160.hs
-formatted       0cf990ecd2cd  cryptonite-0.30/Crypto/Hash/SHA1.hs
-formatted       6b15758ab087  cryptonite-0.30/Crypto/Hash/SHA224.hs
-formatted       a5a52f418404  cryptonite-0.30/Crypto/Hash/SHA256.hs
-formatted       05629720d732  cryptonite-0.30/Crypto/Hash/SHA3.hs
-formatted       076c9d704bf2  cryptonite-0.30/Crypto/Hash/SHA384.hs
-formatted       d65edf0aeac8  cryptonite-0.30/Crypto/Hash/SHA512.hs
-formatted       94400683916e  cryptonite-0.30/Crypto/Hash/SHA512t.hs
-formatted       9b214034fb00  cryptonite-0.30/Crypto/Hash/SHAKE.hs
-formatted       506e64c190a2  cryptonite-0.30/Crypto/Hash/Skein256.hs
-formatted       da70bee9980a  cryptonite-0.30/Crypto/Hash/Skein512.hs
-formatted       2f8832cc95bb  cryptonite-0.30/Crypto/Hash/Tiger.hs
-formatted       f7994b599588  cryptonite-0.30/Crypto/Hash/Types.hs
-formatted       4ea25e04f5c1  cryptonite-0.30/Crypto/Hash/Whirlpool.hs
-formatted       f70544b8e5f8  cryptonite-0.30/Crypto/Internal/Builder.hs
-formatted       98a5de0267ed  cryptonite-0.30/Crypto/Internal/ByteArray.hs
-formatted       f801f423094d  cryptonite-0.30/Crypto/Internal/Compat.hs
-formatted       54db2fce0fcc  cryptonite-0.30/Crypto/Internal/CompatPrim.hs
-formatted       d4435b068486  cryptonite-0.30/Crypto/Internal/DeepSeq.hs
-formatted       4646f54cc944  cryptonite-0.30/Crypto/Internal/Imports.hs
-formatted       4878b8fb8411  cryptonite-0.30/Crypto/Internal/Nat.hs
-formatted       483861a9b72d  cryptonite-0.30/Crypto/Internal/WordArray.hs
-formatted       5786998be3b3  cryptonite-0.30/Crypto/Internal/Words.hs
-formatted       0434f24b7a9f  cryptonite-0.30/Crypto/KDF/Argon2.hs
-formatted       9725e47b1b66  cryptonite-0.30/Crypto/KDF/BCrypt.hs
-formatted       28be07832b83  cryptonite-0.30/Crypto/KDF/BCryptPBKDF.hs
-formatted       7c78160cd13d  cryptonite-0.30/Crypto/KDF/HKDF.hs
-formatted       f25d68c357c2  cryptonite-0.30/Crypto/KDF/PBKDF2.hs
-formatted       3307468c4b5d  cryptonite-0.30/Crypto/KDF/Scrypt.hs
-formatted       8f3891401559  cryptonite-0.30/Crypto/MAC/CMAC.hs
-formatted       b5b065a845f0  cryptonite-0.30/Crypto/MAC/HMAC.hs
-formatted       4d0062fd1ebe  cryptonite-0.30/Crypto/MAC/KMAC.hs
-formatted       a54d3189768c  cryptonite-0.30/Crypto/MAC/Poly1305.hs
-formatted       c065c0ae8804  cryptonite-0.30/Crypto/Number/Basic.hs
-partly-checked  27ebb2f56bcc  cryptonite-0.30/Crypto/Number/Compat.hs
-formatted       d8e4da3cf8c5  cryptonite-0.30/Crypto/Number/F2m.hs
-formatted       7b62d9f0185b  cryptonite-0.30/Crypto/Number/Generate.hs
-formatted       53fbd1bf4d6c  cryptonite-0.30/Crypto/Number/ModArithmetic.hs
-formatted       3887ba3c7c43  cryptonite-0.30/Crypto/Number/Nat.hs
-formatted       930fa05c486f  cryptonite-0.30/Crypto/Number/Prime.hs
-formatted       3be1d9c43e52  cryptonite-0.30/Crypto/Number/Serialize.hs
-formatted       cfe6a456efe7  cryptonite-0.30/Crypto/Number/Serialize/Internal.hs
-formatted       8f181f9bc069  cryptonite-0.30/Crypto/Number/Serialize/Internal/LE.hs
-formatted       c21267dc7970  cryptonite-0.30/Crypto/Number/Serialize/LE.hs
-formatted       306914497f38  cryptonite-0.30/Crypto/OTP.hs
-formatted       47ac3109be1c  cryptonite-0.30/Crypto/PubKey/Curve25519.hs
-formatted       ff1bad4fe0ae  cryptonite-0.30/Crypto/PubKey/Curve448.hs
-formatted       7279b7fc32ee  cryptonite-0.30/Crypto/PubKey/DH.hs
-formatted       61fc8cd02023  cryptonite-0.30/Crypto/PubKey/DSA.hs
-formatted       9671d669d9fb  cryptonite-0.30/Crypto/PubKey/ECC/DH.hs
-formatted       face3da85363  cryptonite-0.30/Crypto/PubKey/ECC/ECDSA.hs
-formatted       97c5eb3f0754  cryptonite-0.30/Crypto/PubKey/ECC/Generate.hs
-formatted       d4527eb98a84  cryptonite-0.30/Crypto/PubKey/ECC/P256.hs
-formatted       0a2b67b3348e  cryptonite-0.30/Crypto/PubKey/ECC/Prim.hs
-formatted       65081a388743  cryptonite-0.30/Crypto/PubKey/ECC/Types.hs
-formatted       dae44ef68546  cryptonite-0.30/Crypto/PubKey/ECDSA.hs
-formatted       04ef544fcbc1  cryptonite-0.30/Crypto/PubKey/ECIES.hs
-formatted       ca8ec46db323  cryptonite-0.30/Crypto/PubKey/Ed25519.hs
-formatted       dba822ca565e  cryptonite-0.30/Crypto/PubKey/Ed448.hs
-formatted       365814eb2b58  cryptonite-0.30/Crypto/PubKey/EdDSA.hs
-formatted       e083f4a748a3  cryptonite-0.30/Crypto/PubKey/ElGamal.hs
-formatted       5a0517dd2399  cryptonite-0.30/Crypto/PubKey/Internal.hs
-formatted       83e024783092  cryptonite-0.30/Crypto/PubKey/MaskGenFunction.hs
-formatted       aaafa0f20f26  cryptonite-0.30/Crypto/PubKey/RSA.hs
-formatted       c12317773f47  cryptonite-0.30/Crypto/PubKey/RSA/OAEP.hs
-formatted       b777939c6984  cryptonite-0.30/Crypto/PubKey/RSA/PKCS15.hs
-formatted       9255a1c6fd3d  cryptonite-0.30/Crypto/PubKey/RSA/PSS.hs
-formatted       8643b6ddea84  cryptonite-0.30/Crypto/PubKey/RSA/Prim.hs
-formatted       7ab3ae862f55  cryptonite-0.30/Crypto/PubKey/RSA/Types.hs
-formatted       a97d7fbec7cf  cryptonite-0.30/Crypto/PubKey/Rabin/Basic.hs
-formatted       3e0ac8c999c0  cryptonite-0.30/Crypto/PubKey/Rabin/Modified.hs
-formatted       a53ee7c1c1a5  cryptonite-0.30/Crypto/PubKey/Rabin/OAEP.hs
-formatted       b578b97afc3e  cryptonite-0.30/Crypto/PubKey/Rabin/RW.hs
-formatted       c0eae64dcf68  cryptonite-0.30/Crypto/PubKey/Rabin/Types.hs
-formatted       1854f69b3828  cryptonite-0.30/Crypto/Random.hs
-formatted       f3902d2c9c96  cryptonite-0.30/Crypto/Random/ChaChaDRG.hs
-formatted       8b31b5a87af9  cryptonite-0.30/Crypto/Random/Entropy.hs
-formatted       f8afb2ba19cc  cryptonite-0.30/Crypto/Random/Entropy/Backend.hs
-formatted       9b0c8653e10a  cryptonite-0.30/Crypto/Random/Entropy/RDRand.hs
-formatted       0c206170779c  cryptonite-0.30/Crypto/Random/Entropy/Source.hs
-formatted       75121bc8d581  cryptonite-0.30/Crypto/Random/Entropy/Unix.hs
-formatted       2b02d2fc4203  cryptonite-0.30/Crypto/Random/Entropy/Unsafe.hs
-declined        -             cryptonite-0.30/Crypto/Random/Entropy/Windows.hs
-formatted       4f4ac464c6e9  cryptonite-0.30/Crypto/Random/EntropyPool.hs
-formatted       762f30275eb4  cryptonite-0.30/Crypto/Random/Probabilistic.hs
-formatted       dd360e4a76e6  cryptonite-0.30/Crypto/Random/SystemDRG.hs
-formatted       3613df3a0846  cryptonite-0.30/Crypto/Random/Types.hs
-formatted       b12c43b64866  cryptonite-0.30/Crypto/System/CPU.hs
-formatted       3f10131f3add  cryptonite-0.30/Crypto/Tutorial.hs
-formatted       e865ae48f11b  cryptonite-0.30/Setup.hs
-formatted       6977c38d789e  cryptonite-0.30/benchs/Bench.hs
-formatted       772fcb717c67  cryptonite-0.30/benchs/Number/F2m.hs
-formatted       57d09cf26ff7  cryptonite-0.30/tests/BCrypt.hs
-formatted       e0a9d879663a  cryptonite-0.30/tests/BCryptPBKDF.hs
-formatted       523e547e051d  cryptonite-0.30/tests/BlockCipher.hs
-formatted       ae1da1712bf7  cryptonite-0.30/tests/ChaCha.hs
-formatted       2ff39a30e968  cryptonite-0.30/tests/ChaChaPoly1305.hs
-formatted       c628564c97aa  cryptonite-0.30/tests/ECC.hs
-formatted       5d886e661761  cryptonite-0.30/tests/ECC/Edwards25519.hs
-formatted       e8de6edaf6ac  cryptonite-0.30/tests/ECDSA.hs
-formatted       27ce811073c1  cryptonite-0.30/tests/Hash.hs
-formatted       e00752436aeb  cryptonite-0.30/tests/Imports.hs
-formatted       b56f327286e8  cryptonite-0.30/tests/KAT_AES.hs
-formatted       810d48314931  cryptonite-0.30/tests/KAT_AES/KATCBC.hs
-formatted       18eaacc22a0b  cryptonite-0.30/tests/KAT_AES/KATCCM.hs
-formatted       44fe15b7084a  cryptonite-0.30/tests/KAT_AES/KATECB.hs
-formatted       82fa19f7ce7a  cryptonite-0.30/tests/KAT_AES/KATGCM.hs
-formatted       615d3d0c3896  cryptonite-0.30/tests/KAT_AES/KATOCB3.hs
-formatted       7ab1f2d998b8  cryptonite-0.30/tests/KAT_AES/KATXTS.hs
-formatted       0ad3fede040b  cryptonite-0.30/tests/KAT_AESGCMSIV.hs
-formatted       5f71c9d0489d  cryptonite-0.30/tests/KAT_AFIS.hs
-formatted       a29f1f177a83  cryptonite-0.30/tests/KAT_Argon2.hs
-formatted       f080f3e9d382  cryptonite-0.30/tests/KAT_Blowfish.hs
-formatted       c8352efb01e7  cryptonite-0.30/tests/KAT_CAST5.hs
-formatted       a3584b1b317f  cryptonite-0.30/tests/KAT_CMAC.hs
-formatted       a2b1c23d4a23  cryptonite-0.30/tests/KAT_Camellia.hs
-formatted       6afe12fcf4eb  cryptonite-0.30/tests/KAT_Curve25519.hs
-formatted       6093259a5aa9  cryptonite-0.30/tests/KAT_Curve448.hs
-formatted       101e8ac3b19d  cryptonite-0.30/tests/KAT_DES.hs
-formatted       3a7902b73bd8  cryptonite-0.30/tests/KAT_Ed25519.hs
-formatted       bbf6a21d5f18  cryptonite-0.30/tests/KAT_Ed448.hs
-formatted       6a2436512f8d  cryptonite-0.30/tests/KAT_EdDSA.hs
-formatted       0fa0afdb302b  cryptonite-0.30/tests/KAT_HKDF.hs
-formatted       f0b45b263f2a  cryptonite-0.30/tests/KAT_HMAC.hs
-formatted       1735ae86f00c  cryptonite-0.30/tests/KAT_KMAC.hs
-formatted       66cf41c37e13  cryptonite-0.30/tests/KAT_MiyaguchiPreneel.hs
-formatted       5161823955d7  cryptonite-0.30/tests/KAT_OTP.hs
-formatted       e23a8a363aff  cryptonite-0.30/tests/KAT_PBKDF2.hs
-formatted       1f0d2812b0a5  cryptonite-0.30/tests/KAT_PubKey.hs
-formatted       c92369374dbb  cryptonite-0.30/tests/KAT_PubKey/DSA.hs
-formatted       743790d1c893  cryptonite-0.30/tests/KAT_PubKey/ECC.hs
-formatted       72827abb8090  cryptonite-0.30/tests/KAT_PubKey/ECDSA.hs
-formatted       0a8edec8bb84  cryptonite-0.30/tests/KAT_PubKey/OAEP.hs
-formatted       6ba37e5828ed  cryptonite-0.30/tests/KAT_PubKey/P256.hs
-formatted       93c9f8d40494  cryptonite-0.30/tests/KAT_PubKey/PSS.hs
-formatted       bba8cd12072c  cryptonite-0.30/tests/KAT_PubKey/RSA.hs
-formatted       cd527ad025c4  cryptonite-0.30/tests/KAT_PubKey/Rabin.hs
-formatted       fa1389bb8af8  cryptonite-0.30/tests/KAT_RC4.hs
-formatted       6c174475decc  cryptonite-0.30/tests/KAT_Scrypt.hs
-formatted       36380d994c1c  cryptonite-0.30/tests/KAT_TripleDES.hs
-formatted       509c09091817  cryptonite-0.30/tests/KAT_Twofish.hs
-formatted       d3ffb4dd724c  cryptonite-0.30/tests/Number.hs
-formatted       7da4a28c8580  cryptonite-0.30/tests/Number/F2m.hs
-formatted       153769199399  cryptonite-0.30/tests/Padding.hs
-formatted       e4b87212dc1f  cryptonite-0.30/tests/Poly1305.hs
-formatted       38c09837971d  cryptonite-0.30/tests/Salsa.hs
-formatted       54065ea7b3f2  cryptonite-0.30/tests/Tests.hs
-formatted       8ebf266d6afa  cryptonite-0.30/tests/Utils.hs
-formatted       f7ee48c90ce9  cryptonite-0.30/tests/XSalsa.hs
-formatted       e865ae48f11b  diagrams-core-1.5.1.2/Setup.hs
-formatted       390dfdff3fbc  diagrams-core-1.5.1.2/src/Diagrams/Core.hs
-formatted       5b9f4064740f  diagrams-core-1.5.1.2/src/Diagrams/Core/Compile.hs
-formatted       dcc0b6e7d82d  diagrams-core-1.5.1.2/src/Diagrams/Core/Envelope.hs
-formatted       c945af86b66d  diagrams-core-1.5.1.2/src/Diagrams/Core/HasOrigin.hs
-formatted       5e6397a73cbf  diagrams-core-1.5.1.2/src/Diagrams/Core/Juxtapose.hs
-formatted       5d249b0ae2ba  diagrams-core-1.5.1.2/src/Diagrams/Core/Measure.hs
-formatted       3f232ced8cd3  diagrams-core-1.5.1.2/src/Diagrams/Core/Names.hs
-formatted       169fec80496d  diagrams-core-1.5.1.2/src/Diagrams/Core/Points.hs
-formatted       d8167797c638  diagrams-core-1.5.1.2/src/Diagrams/Core/Query.hs
-formatted       c1f6572049e6  diagrams-core-1.5.1.2/src/Diagrams/Core/Style.hs
-formatted       67cdc6b4a26e  diagrams-core-1.5.1.2/src/Diagrams/Core/Trace.hs
-formatted       ceb1829b99d5  diagrams-core-1.5.1.2/src/Diagrams/Core/Transform.hs
-formatted       053c9acdc8a3  diagrams-core-1.5.1.2/src/Diagrams/Core/Types.hs
-formatted       a9f71c9c75d0  diagrams-core-1.5.1.2/src/Diagrams/Core/V.hs
-formatted       5cabe7655bac  distributed-process-0.7.8/benchmarks/Channels.hs
-formatted       504953bb1387  distributed-process-0.7.8/benchmarks/Latency.hs
-formatted       d09b9e8f8cf6  distributed-process-0.7.8/benchmarks/ProcessRing.hs
-formatted       c83a31f749c7  distributed-process-0.7.8/benchmarks/Spawns.hs
-formatted       85c826b4657d  distributed-process-0.7.8/benchmarks/Throughput.hs
-formatted       e7bfb48f27d1  distributed-process-0.7.8/src/Control/Distributed/Process.hs
-formatted       3f710068b83b  distributed-process-0.7.8/src/Control/Distributed/Process/Closure.hs
-formatted       9abdf121594b  distributed-process-0.7.8/src/Control/Distributed/Process/Debug.hs
-formatted       c98976ba0493  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/BiMultiMap.hs
-formatted       fe72c6f43347  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/CQueue.hs
-formatted       2946b3a11a2f  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Closure/BuiltIn.hs
-formatted       a950bf8d3ff9  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Closure/Explicit.hs
-formatted       8ab242465a6d  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Closure/TH.hs
-formatted       4f632ae95bca  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Messaging.hs
-formatted       371d302bf97d  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Primitives.hs
-formatted       e8934f2fb775  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Spawn.hs
-formatted       cd3afabcd890  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/StrictContainerAccessors.hs
-formatted       8a9d9c67b86f  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/StrictList.hs
-formatted       b21182e8f9f2  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/StrictMVar.hs
-formatted       8741f1720d69  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Types.hs
-formatted       d8a70ea27555  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/WeakTQueue.hs
-formatted       7260ec04f829  distributed-process-0.7.8/src/Control/Distributed/Process/Management.hs
-formatted       0fc21b015e4c  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Agent.hs
-formatted       39b50d32c5a6  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Bus.hs
-formatted       5e7aa53931dc  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Trace/Primitives.hs
-formatted       818907f11c3f  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Trace/Remote.hs
-formatted       de6da63f59ad  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Trace/Tracer.hs
-formatted       2b21046051cd  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Trace/Types.hs
-formatted       7142839f16fe  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Types.hs
-formatted       412c9677cfbc  distributed-process-0.7.8/src/Control/Distributed/Process/Node.hs
-formatted       6b86ee01b32a  distributed-process-0.7.8/src/Control/Distributed/Process/Serializable.hs
-formatted       daf3cd1d8b53  distributed-process-0.7.8/src/Control/Distributed/Process/UnsafePrimitives.hs
-broken          c7f3522faa0a  dlist-1.0/Data/DList.hs
-formatted       20c1dbe536f4  dlist-1.0/Data/DList/DNonEmpty.hs
-formatted       3d51b496abb0  dlist-1.0/Data/DList/DNonEmpty/Internal.hs
-declined        -             dlist-1.0/Data/DList/Internal.hs
-formatted       669ee89127ed  dlist-1.0/Data/DList/Unsafe.hs
-formatted       c7f9b52c6db5  dlist-1.0/tests/DListProperties.hs
-formatted       54f0c52fc06b  dlist-1.0/tests/DNonEmptyProperties.hs
-formatted       9471e1a867e9  dlist-1.0/tests/ImportUnsafe.hs
-formatted       977d78f79456  dlist-1.0/tests/Main.hs
-formatted       ff0ea90a2896  dlist-1.0/tests/OverloadedStrings.hs
-formatted       eda938831fc8  dlist-1.0/tests/QuickCheckUtil.hs
-formatted       e865ae48f11b  esqueleto-3.6.0.3/Setup.hs
-formatted       fb274a829f01  esqueleto-3.6.0.3/src/Database/Esqueleto.hs
-formatted       99a3554c79c4  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental.hs
-formatted       62ae3d4e946f  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/From.hs
-formatted       66df5876db87  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/From/CommonTableExpression.hs
-formatted       1c658ac7468e  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/From/Join.hs
-formatted       beecd102c083  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/From/SqlSetOperation.hs
-formatted       d4056ae5fdae  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/ToAlias.hs
-formatted       570cc685ebf9  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/ToAliasReference.hs
-formatted       9f36875401e2  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/ToMaybe.hs
-formatted       1182bc5f07a3  esqueleto-3.6.0.3/src/Database/Esqueleto/Internal/ExprParser.hs
-formatted       7d5926bb95a1  esqueleto-3.6.0.3/src/Database/Esqueleto/Internal/Internal.hs
-formatted       8e8a8c378f2b  esqueleto-3.6.0.3/src/Database/Esqueleto/Internal/PersistentImport.hs
-formatted       23c62f207b2d  esqueleto-3.6.0.3/src/Database/Esqueleto/Legacy.hs
-formatted       9cd66d1b3ed2  esqueleto-3.6.0.3/src/Database/Esqueleto/MySQL.hs
-formatted       c89093d794d3  esqueleto-3.6.0.3/src/Database/Esqueleto/PostgreSQL.hs
-formatted       c9c85bd4863e  esqueleto-3.6.0.3/src/Database/Esqueleto/PostgreSQL/JSON.hs
-formatted       1499072a5bb5  esqueleto-3.6.0.3/src/Database/Esqueleto/PostgreSQL/JSON/Instances.hs
-formatted       c9e808f99d5b  esqueleto-3.6.0.3/src/Database/Esqueleto/Record.hs
-formatted       167fa1cef38a  esqueleto-3.6.0.3/src/Database/Esqueleto/SQLite.hs
-formatted       87d19093371d  esqueleto-3.6.0.3/test/Common/Record.hs
-formatted       898e906dfbfd  esqueleto-3.6.0.3/test/Common/Test.hs
-formatted       c745d9be5124  esqueleto-3.6.0.3/test/Common/Test/CTE.hs
-formatted       1f83d04692e3  esqueleto-3.6.0.3/test/Common/Test/Import.hs
-formatted       2e16567983e5  esqueleto-3.6.0.3/test/Common/Test/Models.hs
-formatted       1e1af0ff65e2  esqueleto-3.6.0.3/test/Common/Test/Select.hs
-formatted       6c403a7dbfd3  esqueleto-3.6.0.3/test/MySQL/Test.hs
-formatted       649022fe6ecf  esqueleto-3.6.0.3/test/PostgreSQL/MigrateJSON.hs
-formatted       2b853749fb75  esqueleto-3.6.0.3/test/PostgreSQL/Test.hs
-formatted       0e0ef1763885  esqueleto-3.6.0.3/test/SQLite/Test.hs
-formatted       9c274d8e66c1  esqueleto-3.6.0.3/test/Spec.hs
-formatted       27965836c84d  exceptions-0.10.12/src/Control/Monad/Catch.hs
-formatted       bfa68dd05586  exceptions-0.10.12/src/Control/Monad/Catch/Pure.hs
-formatted       9e0076961bd9  exceptions-0.10.12/tests/Control/Monad/Catch/Tests.hs
-formatted       bba664ba2b8b  exceptions-0.10.12/tests/Tests.hs
-formatted       421394df9111  fay-0.24.2.0/Setup.hs
-formatted       ec9eeba0c6a1  fay-0.24.2.0/examples/CodeWorld.hs
-formatted       99245f57be0e  fay-0.24.2.0/examples/CodeWorldMain.hs
-formatted       548a2ab668be  fay-0.24.2.0/examples/Cont.hs
-formatted       51acf9e074e7  fay-0.24.2.0/examples/D3TreeSample.hs
-formatted       5ecb259af8cb  fay-0.24.2.0/examples/FayFromJs.hs
-formatted       d4be2511948d  fay-0.24.2.0/examples/Separated.hs
-formatted       73cbc6340843  fay-0.24.2.0/examples/X.hs
-formatted       89a1e9058dc3  fay-0.24.2.0/examples/Y.hs
-formatted       55d7b8cf115f  fay-0.24.2.0/examples/alert.hs
-formatted       3563971c6bdb  fay-0.24.2.0/examples/calc.hs
-formatted       2d60fb67f2de  fay-0.24.2.0/examples/canvaswater.hs
-formatted       97df12f5dfa2  fay-0.24.2.0/examples/console.hs
-formatted       219026b77ebc  fay-0.24.2.0/examples/data.hs
-formatted       57124dd1aa0e  fay-0.24.2.0/examples/dom.hs
-formatted       a017f7092550  fay-0.24.2.0/examples/jquery.hs
-formatted       aabfbe529b18  fay-0.24.2.0/examples/json.hs
-formatted       db1cb782ccc3  fay-0.24.2.0/examples/node.hs
-formatted       f3df3b020033  fay-0.24.2.0/examples/nqueens.hs
-formatted       082f30944841  fay-0.24.2.0/examples/obj.hs
-formatted       876df6e6b3f1  fay-0.24.2.0/examples/oscillator.hs
-formatted       c79a44579d85  fay-0.24.2.0/examples/pat.hs
-formatted       fa732b1a5e66  fay-0.24.2.0/examples/properties.hs
-formatted       7085b02d6471  fay-0.24.2.0/examples/ref.hs
-formatted       55fe2b9f624f  fay-0.24.2.0/examples/showExamples.hs
-formatted       884b6fbdaadc  fay-0.24.2.0/examples/tailrecursive.hs
-formatted       1463fee0cdc0  fay-0.24.2.0/src/Fay.hs
-formatted       07c67e558a55  fay-0.24.2.0/src/Fay/Compiler.hs
-formatted       08e147a7ca10  fay-0.24.2.0/src/Fay/Compiler/Decl.hs
-formatted       d4575500ee48  fay-0.24.2.0/src/Fay/Compiler/Defaults.hs
-formatted       9e167b4dd860  fay-0.24.2.0/src/Fay/Compiler/Desugar.hs
-formatted       e8e463edecee  fay-0.24.2.0/src/Fay/Compiler/Desugar/Name.hs
-formatted       fe53147a7e33  fay-0.24.2.0/src/Fay/Compiler/Desugar/Types.hs
-formatted       07d2e834d04c  fay-0.24.2.0/src/Fay/Compiler/Exp.hs
-formatted       28a5f094dde5  fay-0.24.2.0/src/Fay/Compiler/FFI.hs
-formatted       69fd6dd80a66  fay-0.24.2.0/src/Fay/Compiler/GADT.hs
-formatted       1a601ae0f75b  fay-0.24.2.0/src/Fay/Compiler/Import.hs
-formatted       a2f05f014ae5  fay-0.24.2.0/src/Fay/Compiler/InitialPass.hs
-formatted       a22d45c5c321  fay-0.24.2.0/src/Fay/Compiler/Misc.hs
-formatted       bce0992d570d  fay-0.24.2.0/src/Fay/Compiler/ModuleT.hs
-formatted       5ff84858fb95  fay-0.24.2.0/src/Fay/Compiler/Optimizer.hs
-formatted       ac32749d90ec  fay-0.24.2.0/src/Fay/Compiler/Packages.hs
-formatted       a76cfec53b82  fay-0.24.2.0/src/Fay/Compiler/Parse.hs
-formatted       4e8f1b8a0816  fay-0.24.2.0/src/Fay/Compiler/Pattern.hs
-formatted       7cca783f3fcd  fay-0.24.2.0/src/Fay/Compiler/Prelude.hs
-formatted       0fe3943a05fb  fay-0.24.2.0/src/Fay/Compiler/PrimOp.hs
-formatted       ea36afcb904b  fay-0.24.2.0/src/Fay/Compiler/Print.hs
-formatted       66a7ddb00b81  fay-0.24.2.0/src/Fay/Compiler/QName.hs
-formatted       fa9988c44218  fay-0.24.2.0/src/Fay/Compiler/State.hs
-formatted       fb1831a445cc  fay-0.24.2.0/src/Fay/Compiler/Typecheck.hs
-formatted       413034d717c7  fay-0.24.2.0/src/Fay/Config.hs
-formatted       15cd1e849d0e  fay-0.24.2.0/src/Fay/Convert.hs
-formatted       80d46083d774  fay-0.24.2.0/src/Fay/Exts.hs
-formatted       7ec6f093e0ca  fay-0.24.2.0/src/Fay/Exts/NoAnnotation.hs
-formatted       bd1f234d96c0  fay-0.24.2.0/src/Fay/Exts/Scoped.hs
-formatted       f7856f337bee  fay-0.24.2.0/src/Fay/FFI.hs
-formatted       7dd89da8a466  fay-0.24.2.0/src/Fay/Runtime.hs
-formatted       0ac5069cbf76  fay-0.24.2.0/src/Fay/Types.hs
-formatted       6654772d79a6  fay-0.24.2.0/src/Fay/Types/CompileError.hs
-formatted       4f7fdfee2a8f  fay-0.24.2.0/src/Fay/Types/CompileResult.hs
-formatted       f21a75633d68  fay-0.24.2.0/src/Fay/Types/FFI.hs
-formatted       16c62b3f8086  fay-0.24.2.0/src/Fay/Types/Js.hs
-formatted       8b5e7dc5b55c  fay-0.24.2.0/src/Fay/Types/ModulePath.hs
-formatted       70b756fa52b3  fay-0.24.2.0/src/Fay/Types/Printer.hs
-formatted       6593766b1d2e  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names.hs
-formatted       bfea4a051d5e  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Annotated.hs
-formatted       b36e999e1b42  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Exports.hs
-formatted       ba7a7290b652  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/GetBound.hs
-formatted       dcc2c3f113a9  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/GlobalSymbolTable.hs
-formatted       13662130820d  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/GlobalSymbolTable.hs-boot
-formatted       c7ae29226dad  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Imports.hs
-formatted       bda66c725ce4  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/LocalSymbolTable.hs
-formatted       b64dde2af1d1  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/ModuleSymbols.hs
-formatted       76ce45f69410  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Open/Base.hs
-formatted       b12db8ba5ce9  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Open/Derived.hs
-formatted       e5d7ccfc13f3  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Open/Instances.hs
-formatted       5830466c394d  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/RecordWildcards.hs
-formatted       80dec7fda3fb  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Recursive.hs
-formatted       0c478b11a301  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/ScopeUtils.hs
-formatted       0ad105ebc45d  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/SyntaxUtils.hs
-formatted       2b1329bafe82  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Types.hs
-formatted       a185a50b6e6a  fay-0.24.2.0/src/main/Main.hs
-formatted       b9c869a29067  fay-0.24.2.0/src/tests/Test/CommandLine.hs
-formatted       4aba97e21b8e  fay-0.24.2.0/src/tests/Test/Compile.hs
-formatted       86467d080a45  fay-0.24.2.0/src/tests/Test/Convert.hs
-formatted       89d594b07db0  fay-0.24.2.0/src/tests/Test/Desugar.hs
-formatted       a3937c4d8bef  fay-0.24.2.0/src/tests/Test/Util.hs
-formatted       63cce78f9492  fay-0.24.2.0/src/tests/Tests.hs
-formatted       8114602da4c3  fay-0.24.2.0/tests/AllBaseModules.hs
-formatted       e78d25c5a73d  fay-0.24.2.0/tests/AutomaticList.hs
-formatted       779c72fbdb74  fay-0.24.2.0/tests/Bool.hs
-formatted       85b587f06e29  fay-0.24.2.0/tests/CPP.hs
-formatted       61e542a01350  fay-0.24.2.0/tests/Char.hs
-formatted       7badee2f20a7  fay-0.24.2.0/tests/Compile/CPPMultiLineStrings.hs
-formatted       a64f08ccafac  fay-0.24.2.0/tests/Compile/CPPTypecheck.hs
-formatted       66d008a435ce  fay-0.24.2.0/tests/Compile/EnumChar.hs
-formatted       79a705007362  fay-0.24.2.0/tests/Compile/ImportRecords.hs
-formatted       a0d1bb7739c9  fay-0.24.2.0/tests/Compile/Records.hs
-formatted       654d49354de8  fay-0.24.2.0/tests/Compile/StrictWrapper.hs
-formatted       3f10c446d77e  fay-0.24.2.0/tests/Compile/pretty.hs
-formatted       3f10c446d77e  fay-0.24.2.0/tests/Compile/prettyOperators.hs
-formatted       3f10c446d77e  fay-0.24.2.0/tests/Compile/prettyThunks.hs
-formatted       7e5ba819c89a  fay-0.24.2.0/tests/Defined.hs
-formatted       933b5c75c95d  fay-0.24.2.0/tests/DesugarFFI.hs
-formatted       247bf5cdbba0  fay-0.24.2.0/tests/DoLet2.hs
-formatted       8e59e23cdef2  fay-0.24.2.0/tests/DoLet3.hs
-formatted       8506e48ae167  fay-0.24.2.0/tests/Double.hs
-formatted       555ed6125da8  fay-0.24.2.0/tests/Double2.hs
-formatted       940c2db0f038  fay-0.24.2.0/tests/Double3.hs
-formatted       ce51517b312e  fay-0.24.2.0/tests/Double4.hs
-formatted       e7d8f2571cb1  fay-0.24.2.0/tests/Either.hs
-formatted       f00c11dbed60  fay-0.24.2.0/tests/EmptyDataDeclArray.hs
-formatted       7c2bc66a86e6  fay-0.24.2.0/tests/Eq.hs
-formatted       25d8fd9d5d5a  fay-0.24.2.0/tests/ExportEThingAll.hs
-formatted       bea5851db3b4  fay-0.24.2.0/tests/ExportEThingAll_Export.hs
-formatted       b86ba0189dff  fay-0.24.2.0/tests/ExportEThingWith.hs
-formatted       19c335568239  fay-0.24.2.0/tests/ExportList.hs
-formatted       b39169d37973  fay-0.24.2.0/tests/ExportList_A.hs
-formatted       eb351b1cfd3e  fay-0.24.2.0/tests/ExportList_B.hs
-formatted       4736c70718a7  fay-0.24.2.0/tests/ExportList_C.hs
-formatted       41c7f9eb857a  fay-0.24.2.0/tests/ExportList_D.hs
-formatted       b42dad751766  fay-0.24.2.0/tests/ExportQualified_Export.hs
-formatted       e08dc6f4e84b  fay-0.24.2.0/tests/ExportQualified_Import.hs
-formatted       7778565bb389  fay-0.24.2.0/tests/ExportType.hs
-formatted       ba54245a67ef  fay-0.24.2.0/tests/Floating.hs
-formatted       02165869295d  fay-0.24.2.0/tests/FromString.hs
-formatted       fc43945a5277  fay-0.24.2.0/tests/FromString/Dep.hs
-formatted       09e516e107ad  fay-0.24.2.0/tests/FromString/DepDep.hs
-formatted       a8e31b7f9068  fay-0.24.2.0/tests/FromString/FayText.hs
-formatted       3da43a919ebc  fay-0.24.2.0/tests/GADTs_without_records.hs
-formatted       102949714efb  fay-0.24.2.0/tests/GuardWhere.hs
-formatted       4c6803c7f169  fay-0.24.2.0/tests/HidePreludeImport.hs
-formatted       a1408d450caf  fay-0.24.2.0/tests/HidePreludeImport_Import.hs
-formatted       fa5b4cc76a44  fay-0.24.2.0/tests/Hierarchical/Export.hs
-formatted       102307416bcd  fay-0.24.2.0/tests/Hierarchical/RecordDefined.hs
-formatted       920c9acca3b5  fay-0.24.2.0/tests/HierarchicalImport.hs
-formatted       def230ba708f  fay-0.24.2.0/tests/ImplicitPrelude.hs
-formatted       c71809dd7876  fay-0.24.2.0/tests/ImportHiding.hs
-formatted       75f8ddda7df8  fay-0.24.2.0/tests/ImportIThingAll.hs
-formatted       b4c50a46461c  fay-0.24.2.0/tests/ImportList.hs
-formatted       87c5a69d1b76  fay-0.24.2.0/tests/ImportList1/A.hs
-formatted       8d3ac5b6cbc9  fay-0.24.2.0/tests/ImportList1/B.hs
-formatted       baf7f8cf38cc  fay-0.24.2.0/tests/ImportList1/C.hs
-formatted       b5cb6de55974  fay-0.24.2.0/tests/ImportListType.hs
-formatted       69bb47d76aef  fay-0.24.2.0/tests/ImportType.hs
-formatted       440bc41f78be  fay-0.24.2.0/tests/ImportType2.hs
-formatted       5ff8e931a567  fay-0.24.2.0/tests/ImportType2I/A.hs
-formatted       e15dbb9a2720  fay-0.24.2.0/tests/ImportType2I/B.hs
-formatted       9d4bcec16bd7  fay-0.24.2.0/tests/Integer.hs
-formatted       ed2b3650244f  fay-0.24.2.0/tests/Integral.hs
-formatted       dadef2b7cb03  fay-0.24.2.0/tests/Issue215/B.hs
-formatted       eeedb44973d0  fay-0.24.2.0/tests/Issue215A.hs
-formatted       b0a19078b259  fay-0.24.2.0/tests/Js2FayFunc.hs
-formatted       8592007d3db3  fay-0.24.2.0/tests/JsFunctionPassing.hs
-formatted       009642e56a6b  fay-0.24.2.0/tests/LambdaCase.hs
-formatted       47266926fa39  fay-0.24.2.0/tests/LazyOperators.hs
-formatted       ee291ee7e00e  fay-0.24.2.0/tests/List.hs
-formatted       c8021ca9ec3f  fay-0.24.2.0/tests/List2.hs
-formatted       a93b0ff4bcc5  fay-0.24.2.0/tests/ListEq.hs
-formatted       c3daafcf2461  fay-0.24.2.0/tests/MainThunk.hs
-formatted       350d9831d6f8  fay-0.24.2.0/tests/ModuleReExport/ExportsIdentifier.hs
-formatted       25cef8780cae  fay-0.24.2.0/tests/ModuleReExport/ExportsModule.hs
-formatted       9dfef0f7c129  fay-0.24.2.0/tests/ModuleReExports.hs
-formatted       c082d387d888  fay-0.24.2.0/tests/ModuleRecordClash.hs
-formatted       997782df97ba  fay-0.24.2.0/tests/ModuleRecordClash/R.hs
-formatted       53ea9782c8a3  fay-0.24.2.0/tests/ModuleRecordClash2.hs
-formatted       9800c4c956c7  fay-0.24.2.0/tests/ModuleRecordClash2_Hello.hs
-formatted       1a83fbebaaf8  fay-0.24.2.0/tests/Monad.hs
-formatted       86f64805684f  fay-0.24.2.0/tests/Monad2.hs
-formatted       0c9780229637  fay-0.24.2.0/tests/MultiWayIf.hs
-formatted       0e3845c048a2  fay-0.24.2.0/tests/NestedImporting.hs
-formatted       4b3a670722e0  fay-0.24.2.0/tests/NestedImporting/A.hs
-formatted       2a092a0c1f4c  fay-0.24.2.0/tests/NestedImporting2.hs
-formatted       19cbbffb80bc  fay-0.24.2.0/tests/NestedImporting2/A.hs
-formatted       5b0905d26851  fay-0.24.2.0/tests/NewtypeImport_Export.hs
-formatted       34ed28dbd073  fay-0.24.2.0/tests/NewtypeImport_Import.hs
-formatted       ad07b3a0d755  fay-0.24.2.0/tests/Nullable.hs
-formatted       f01c35cc494d  fay-0.24.2.0/tests/Num.hs
-formatted       75ea0e91fb04  fay-0.24.2.0/tests/Ord.hs
-formatted       66e4369c7bda  fay-0.24.2.0/tests/PrefixOpPat.hs
-formatted       cc9547968f50  fay-0.24.2.0/tests/QualifiedImport.hs
-formatted       e548782c2e69  fay-0.24.2.0/tests/QualifiedImport/X.hs
-formatted       391559feaa6f  fay-0.24.2.0/tests/QualifiedImport/Y.hs
-formatted       5a73215af899  fay-0.24.2.0/tests/Ratio.hs
-formatted       577c81fcbe39  fay-0.24.2.0/tests/ReExport1.hs
-formatted       97f273a7040d  fay-0.24.2.0/tests/ReExport2.hs
-formatted       9fb50fe15789  fay-0.24.2.0/tests/ReExport3.hs
-formatted       8b077416b2a2  fay-0.24.2.0/tests/ReExportGlobally.hs
-formatted       51e4cd174ea4  fay-0.24.2.0/tests/ReExportGlobally/A.hs
-formatted       b21d1616e152  fay-0.24.2.0/tests/ReExportGloballyExplicit.hs
-formatted       9315bbd88930  fay-0.24.2.0/tests/RealFrac.hs
-formatted       1a6a33c6ac9d  fay-0.24.2.0/tests/RecCon.hs
-formatted       d0c6c8bc95e4  fay-0.24.2.0/tests/RecDecl.hs
-formatted       23fcb8f6b7c4  fay-0.24.2.0/tests/RecordImport2_Export1.hs
-formatted       1cf7d6a06d1d  fay-0.24.2.0/tests/RecordImport2_Export2.hs
-formatted       c044e70c8101  fay-0.24.2.0/tests/RecordImport2_Import.hs
-formatted       4a78cf573fbc  fay-0.24.2.0/tests/RecordImport_Export.hs
-formatted       602840c8fb4f  fay-0.24.2.0/tests/RecordImport_Import.hs
-formatted       50271d9b8bd9  fay-0.24.2.0/tests/Sink.hs
-formatted       0d52d0cd7e4b  fay-0.24.2.0/tests/SkipLetTypes.hs
-formatted       79a7eb241171  fay-0.24.2.0/tests/SkipWhereTypes.hs
-formatted       b2f90faa6d96  fay-0.24.2.0/tests/StringForcing.hs
-formatted       78f704c770c1  fay-0.24.2.0/tests/Strings.hs
-formatted       b23a6f00c551  fay-0.24.2.0/tests/T190.hs
-formatted       692f0dae5fb8  fay-0.24.2.0/tests/T190_A.hs
-formatted       8e73afc88ae8  fay-0.24.2.0/tests/T190_B.hs
-formatted       e68acdaf2dfe  fay-0.24.2.0/tests/T190_C.hs
-formatted       7bd1c4fd8478  fay-0.24.2.0/tests/TextOrd.hs
-formatted       f47544b81667  fay-0.24.2.0/tests/Trace.hs
-formatted       c578ce2acbf6  fay-0.24.2.0/tests/TupleCalls.hs
-formatted       d35a3f3c7245  fay-0.24.2.0/tests/TyVarSerialization.hs
-formatted       7d85fb13bd93  fay-0.24.2.0/tests/Var.hs
-formatted       7a2ffc1587f5  fay-0.24.2.0/tests/VarPtr.hs
-formatted       5bcb67338113  fay-0.24.2.0/tests/WhenUnlessRecursion.hs
-formatted       c767b8778a1d  fay-0.24.2.0/tests/asPatternMatch.hs
-formatted       aa05f8bd2bf0  fay-0.24.2.0/tests/automatic.hs
-formatted       83d1d385ae83  fay-0.24.2.0/tests/baseFixities.hs
-formatted       ce58f47bac04  fay-0.24.2.0/tests/basicFunctions.hs
-formatted       33b5a5453ff8  fay-0.24.2.0/tests/case.hs
-formatted       a51f036ac082  fay-0.24.2.0/tests/case2.hs
-formatted       4a4542652251  fay-0.24.2.0/tests/case3.hs
-formatted       e563419849e3  fay-0.24.2.0/tests/caseList.hs
-formatted       6f41ab7df8c9  fay-0.24.2.0/tests/caseWildcard.hs
-formatted       9437474fc565  fay-0.24.2.0/tests/circular.hs
-formatted       3ac360393116  fay-0.24.2.0/tests/curry.hs
-formatted       9bbe8cd8c749  fay-0.24.2.0/tests/cycle.hs
-formatted       d07827315b77  fay-0.24.2.0/tests/do.hs
-formatted       262e4e61e6b8  fay-0.24.2.0/tests/doAssingPatternMatch.hs
-formatted       ad5b707f664a  fay-0.24.2.0/tests/doBindAssign.hs
-formatted       e41cbdd7656a  fay-0.24.2.0/tests/doLet.hs
-formatted       9f8a8d10c1d3  fay-0.24.2.0/tests/emptyMain.hs
-formatted       380eff7dedb9  fay-0.24.2.0/tests/enumFrom.hs
-formatted       05834fe58432  fay-0.24.2.0/tests/error.hs
-formatted       f563902672cb  fay-0.24.2.0/tests/ffiExpr.hs
-formatted       73697f0c099c  fay-0.24.2.0/tests/ffimunging.hs
-formatted       dc67c504a097  fay-0.24.2.0/tests/fix.hs
-formatted       9267690ec8d2  fay-0.24.2.0/tests/fromInteger.hs
-formatted       73a7dce83bdd  fay-0.24.2.0/tests/fromIntegral.hs
-formatted       860a7aed8af3  fay-0.24.2.0/tests/guards.hs
-formatted       8ff7b7e5d80d  fay-0.24.2.0/tests/infixDataConst.hs
-formatted       99c963974ca0  fay-0.24.2.0/tests/ints.hs
-formatted       9ec2af24577b  fay-0.24.2.0/tests/linesAndWords.hs
-formatted       36a10a974013  fay-0.24.2.0/tests/listComprehensions.hs
-formatted       392b79e97d1d  fay-0.24.2.0/tests/listlen.hs
-formatted       9d98dc262b39  fay-0.24.2.0/tests/mutableReference.hs
-formatted       7fe9f65a3adf  fay-0.24.2.0/tests/nameGen.hs
-formatted       c17264ffcbde  fay-0.24.2.0/tests/namedFieldPuns.hs
-formatted       68fcd666b331  fay-0.24.2.0/tests/negation.hs
-formatted       18a910a17dd2  fay-0.24.2.0/tests/newtype.hs
-formatted       ea2625a5c5d9  fay-0.24.2.0/tests/newtypeIndirectApp.hs
-formatted       a587812e6602  fay-0.24.2.0/tests/numTheory.hs
-formatted       40bd883716b3  fay-0.24.2.0/tests/nums.hs
-formatted       c27df9670630  fay-0.24.2.0/tests/pats.hs
-formatted       b317cbb85f97  fay-0.24.2.0/tests/patternGuards.hs
-formatted       353e37b5a857  fay-0.24.2.0/tests/patternMatchFail.hs
-formatted       0e69935e45c9  fay-0.24.2.0/tests/patternMatchLet.hs
-formatted       f963663ae2cf  fay-0.24.2.0/tests/patternMatchingTuples.hs
-formatted       41871bce5735  fay-0.24.2.0/tests/recordFunctionPatternMatch.hs
-formatted       6010444abc75  fay-0.24.2.0/tests/recordPatternMatch.hs
-formatted       0dda5fc8df9d  fay-0.24.2.0/tests/recordPatternMatch2.hs
-formatted       63b9091a92a2  fay-0.24.2.0/tests/recordUseBeforeDefine.hs
-formatted       1534c0770b97  fay-0.24.2.0/tests/recordWildCards.hs
-formatted       38ba272a8da1  fay-0.24.2.0/tests/records.hs
-formatted       a371f7d8d704  fay-0.24.2.0/tests/recursive.hs
-formatted       9797f8836f3b  fay-0.24.2.0/tests/reservedWords.hs
-formatted       3bdaf5d65328  fay-0.24.2.0/tests/sections.hs
-formatted       19e9c7c69db9  fay-0.24.2.0/tests/seq-fake.hs
-formatted       2ac1dc3c2516  fay-0.24.2.0/tests/seq.hs
-formatted       3bf92844987c  fay-0.24.2.0/tests/serialization.hs
-formatted       e76961e79030  fay-0.24.2.0/tests/succPred.hs
-formatted       461d16ef4da1  fay-0.24.2.0/tests/tailRecursion.hs
-formatted       b29bc268b713  fay-0.24.2.0/tests/then.hs
-formatted       7b2a525c6d17  fay-0.24.2.0/tests/tupleCon.hs
-formatted       71a59816933e  fay-0.24.2.0/tests/tupleSec.hs
-formatted       c864de89b243  fay-0.24.2.0/tests/unit.hs
-formatted       cfb7dd15a745  fay-0.24.2.0/tests/utf8.hs
-formatted       68905bc32429  fay-0.24.2.0/tests/where.hs
-formatted       6ea0b301c8c4  fay-0.24.2.0/tests/whereBind.hs
-formatted       62b7dd25b5c9  fay-0.24.2.0/tests/whereBind2.hs
-formatted       dd52de0acf94  fay-0.24.2.0/tests/whereBind3.hs
-formatted       b3d258de0403  free-5.2/examples/PerfTH.hs
-formatted       24418bc38fac  free-5.2/examples/RetryTH.hs
-formatted       7641743d0c1f  free-5.2/examples/ValidationForm.hs
-formatted       550f8b9da7b3  free-5.2/src/Control/Alternative/Free.hs
-formatted       f8e32632bd32  free-5.2/src/Control/Alternative/Free/Final.hs
-formatted       8b307bae43e5  free-5.2/src/Control/Applicative/Free.hs
-formatted       1593e637f12f  free-5.2/src/Control/Applicative/Free/Fast.hs
-formatted       883709cfad5b  free-5.2/src/Control/Applicative/Free/Final.hs
-formatted       bf937338e8cd  free-5.2/src/Control/Applicative/Trans/Free.hs
-formatted       dd9069083e98  free-5.2/src/Control/Comonad/Cofree.hs
-formatted       9b0f6d5a4082  free-5.2/src/Control/Comonad/Cofree/Class.hs
-formatted       38f0ea646bae  free-5.2/src/Control/Comonad/Trans/Cofree.hs
-formatted       09cad19ae5db  free-5.2/src/Control/Comonad/Trans/Coiter.hs
-formatted       f6734128b306  free-5.2/src/Control/Monad/Free.hs
-formatted       92f9ffbc940f  free-5.2/src/Control/Monad/Free/Ap.hs
-formatted       aa9c76266363  free-5.2/src/Control/Monad/Free/Church.hs
-formatted       39bf4e33f6e2  free-5.2/src/Control/Monad/Free/Class.hs
-formatted       d6318fb07edb  free-5.2/src/Control/Monad/Free/TH.hs
-formatted       3088c885facf  free-5.2/src/Control/Monad/Trans/Free.hs
-formatted       294db67cce93  free-5.2/src/Control/Monad/Trans/Free/Ap.hs
-formatted       eacfb36ea2de  free-5.2/src/Control/Monad/Trans/Free/Church.hs
-formatted       aabaf90633fd  free-5.2/src/Control/Monad/Trans/Iter.hs
-formatted       e865ae48f11b  hakyll-4.17.0.0/Setup.hs
-formatted       0a3f98709f72  hakyll-4.17.0.0/data/example/site.hs
-formatted       116aaa72d476  hakyll-4.17.0.0/lib/Data/List/Extended.hs
-formatted       f638cd45236f  hakyll-4.17.0.0/lib/Data/Yaml/Extended.hs
-formatted       0fcae45b2ba9  hakyll-4.17.0.0/lib/Hakyll.hs
-formatted       7abdda6d7a7a  hakyll-4.17.0.0/lib/Hakyll/Check.hs
-formatted       d16c4d72c9d4  hakyll-4.17.0.0/lib/Hakyll/Commands.hs
-formatted       ee8ce55f1a4b  hakyll-4.17.0.0/lib/Hakyll/Core/Compiler.hs
-formatted       2f2012949948  hakyll-4.17.0.0/lib/Hakyll/Core/Compiler/Internal.hs
-formatted       c7cfc530bd2a  hakyll-4.17.0.0/lib/Hakyll/Core/Compiler/Require.hs
-formatted       10bda89cbe6d  hakyll-4.17.0.0/lib/Hakyll/Core/Configuration.hs
-formatted       8f683f53a9e9  hakyll-4.17.0.0/lib/Hakyll/Core/Dependencies.hs
-formatted       558f0d294954  hakyll-4.17.0.0/lib/Hakyll/Core/File.hs
-formatted       2a29ca50b4cf  hakyll-4.17.0.0/lib/Hakyll/Core/Identifier.hs
-formatted       02b568af6a14  hakyll-4.17.0.0/lib/Hakyll/Core/Identifier/Pattern.hs
-formatted       4da1703227de  hakyll-4.17.0.0/lib/Hakyll/Core/Identifier/Pattern/Internal.hs
-formatted       25bce39252d0  hakyll-4.17.0.0/lib/Hakyll/Core/Item.hs
-formatted       ea66b0f47f92  hakyll-4.17.0.0/lib/Hakyll/Core/Item/SomeItem.hs
-formatted       8d06795590b2  hakyll-4.17.0.0/lib/Hakyll/Core/Logger.hs
-formatted       9c84e3b20e81  hakyll-4.17.0.0/lib/Hakyll/Core/Metadata.hs
-formatted       6e39852547dc  hakyll-4.17.0.0/lib/Hakyll/Core/Provider.hs
-formatted       13032bda8285  hakyll-4.17.0.0/lib/Hakyll/Core/Provider/Internal.hs
-formatted       d080542e3185  hakyll-4.17.0.0/lib/Hakyll/Core/Provider/Metadata.hs
-formatted       0cfbeb9b73ba  hakyll-4.17.0.0/lib/Hakyll/Core/Provider/MetadataCache.hs
-formatted       b66bbdf4a200  hakyll-4.17.0.0/lib/Hakyll/Core/Routes.hs
-formatted       6fc04bfca9f2  hakyll-4.17.0.0/lib/Hakyll/Core/Rules.hs
-formatted       a3472736a528  hakyll-4.17.0.0/lib/Hakyll/Core/Rules/Internal.hs
-formatted       3ff34b463d20  hakyll-4.17.0.0/lib/Hakyll/Core/Runtime.hs
-formatted       df1c2bd7e8fb  hakyll-4.17.0.0/lib/Hakyll/Core/Store.hs
-formatted       69e4cf2a975a  hakyll-4.17.0.0/lib/Hakyll/Core/UnixFilter.hs
-formatted       acbb971a63bc  hakyll-4.17.0.0/lib/Hakyll/Core/Util/File.hs
-formatted       5cef0dfbc5f6  hakyll-4.17.0.0/lib/Hakyll/Core/Util/Parser.hs
-formatted       3f21bbf445b2  hakyll-4.17.0.0/lib/Hakyll/Core/Util/String.hs
-formatted       a3abc0522132  hakyll-4.17.0.0/lib/Hakyll/Core/Writable.hs
-formatted       4a743a6f14b2  hakyll-4.17.0.0/lib/Hakyll/Main.hs
-formatted       daae4ce0a7f7  hakyll-4.17.0.0/lib/Hakyll/Preview/Poll.hs
-formatted       d363dc04f1a7  hakyll-4.17.0.0/lib/Hakyll/Preview/Server.hs
-formatted       90f95798e3c7  hakyll-4.17.0.0/lib/Hakyll/Web/CompressCss.hs
-formatted       2fc0d8fdc6f4  hakyll-4.17.0.0/lib/Hakyll/Web/Feed.hs
-formatted       9e925648d786  hakyll-4.17.0.0/lib/Hakyll/Web/Html.hs
-formatted       2c80bbb22db0  hakyll-4.17.0.0/lib/Hakyll/Web/Html/RelativizeUrls.hs
-formatted       0923e680c5d2  hakyll-4.17.0.0/lib/Hakyll/Web/Meta/JSONLD.hs
-formatted       a3dbe80d0b45  hakyll-4.17.0.0/lib/Hakyll/Web/Meta/OpenGraph.hs
-formatted       a3b6503b2c4a  hakyll-4.17.0.0/lib/Hakyll/Web/Meta/TwitterCard.hs
-formatted       47b99b2ffc3a  hakyll-4.17.0.0/lib/Hakyll/Web/Paginate.hs
-formatted       fe263519bf71  hakyll-4.17.0.0/lib/Hakyll/Web/Pandoc.hs
-formatted       5f46737f3756  hakyll-4.17.0.0/lib/Hakyll/Web/Pandoc/Biblio.hs
-formatted       63c711e3ed6f  hakyll-4.17.0.0/lib/Hakyll/Web/Pandoc/Binary.hs
-formatted       413e30365505  hakyll-4.17.0.0/lib/Hakyll/Web/Pandoc/FileType.hs
-formatted       d77258d3d120  hakyll-4.17.0.0/lib/Hakyll/Web/Redirect.hs
-formatted       174f0977fbfb  hakyll-4.17.0.0/lib/Hakyll/Web/Tags.hs
-formatted       0e9947c1a4f2  hakyll-4.17.0.0/lib/Hakyll/Web/Template.hs
-formatted       61c4714e9090  hakyll-4.17.0.0/lib/Hakyll/Web/Template/Context.hs
-formatted       46295fe0766a  hakyll-4.17.0.0/lib/Hakyll/Web/Template/Internal.hs
-formatted       1ba12838107a  hakyll-4.17.0.0/lib/Hakyll/Web/Template/Internal/Element.hs
-formatted       7741b1b5c63c  hakyll-4.17.0.0/lib/Hakyll/Web/Template/Internal/Trim.hs
-formatted       270fe0160883  hakyll-4.17.0.0/lib/Hakyll/Web/Template/List.hs
-formatted       3bd65fed66ca  hakyll-4.17.0.0/src/Init.hs
-formatted       a98f565dc3bd  hakyll-4.17.0.0/tests/Hakyll/Core/Dependencies/Tests.hs
-formatted       178a4cbe186e  hakyll-4.17.0.0/tests/Hakyll/Core/Identifier/Tests.hs
-formatted       f8af7a73d467  hakyll-4.17.0.0/tests/Hakyll/Core/Provider/Metadata/Tests.hs
-formatted       7741f8e19a21  hakyll-4.17.0.0/tests/Hakyll/Core/Provider/Tests.hs
-formatted       0a6fac8a3fe5  hakyll-4.17.0.0/tests/Hakyll/Core/Routes/Tests.hs
-formatted       db910a6e5dc7  hakyll-4.17.0.0/tests/Hakyll/Core/Rules/Tests.hs
-formatted       82ed53ac9567  hakyll-4.17.0.0/tests/Hakyll/Core/Runtime/Tests.hs
-formatted       3a05a7e0bc33  hakyll-4.17.0.0/tests/Hakyll/Core/Store/Tests.hs
-formatted       7d940c89cef0  hakyll-4.17.0.0/tests/Hakyll/Core/UnixFilter/Tests.hs
-formatted       e736c3a104ec  hakyll-4.17.0.0/tests/Hakyll/Core/Util/String/Tests.hs
-formatted       0bb0c4e70b5a  hakyll-4.17.0.0/tests/Hakyll/Web/CompressCss/Tests.hs
-formatted       a15554f5d248  hakyll-4.17.0.0/tests/Hakyll/Web/Feed/Tests.hs
-formatted       e35e1039078b  hakyll-4.17.0.0/tests/Hakyll/Web/Html/RelativizeUrls/Tests.hs
-formatted       4744c78df9c5  hakyll-4.17.0.0/tests/Hakyll/Web/Html/Tests.hs
-formatted       024dfd4bd370  hakyll-4.17.0.0/tests/Hakyll/Web/Pandoc/Biblio/Tests.hs
-formatted       6ca61c42770e  hakyll-4.17.0.0/tests/Hakyll/Web/Pandoc/FileType/Tests.hs
-formatted       84bc8e02e810  hakyll-4.17.0.0/tests/Hakyll/Web/Tags/Tests.hs
-formatted       22cdf7a972b8  hakyll-4.17.0.0/tests/Hakyll/Web/Template/Context/Tests.hs
-formatted       713b01148048  hakyll-4.17.0.0/tests/Hakyll/Web/Template/Tests.hs
-formatted       7638b562c2be  hakyll-4.17.0.0/tests/TestSuite.hs
-formatted       d0e8ca390798  hakyll-4.17.0.0/tests/TestSuite/Util.hs
-formatted       66153c16e099  hakyll-4.17.0.0/web/site.hs
-formatted       9226007b6541  hashable-1.5.1.0/Setup.hs
-formatted       ca97ac3a2690  hashable-1.5.1.0/examples/Main.hs
-formatted       eeae7da4f236  hashable-1.5.1.0/src/Data/Hashable.hs
-declined        -             hashable-1.5.1.0/src/Data/Hashable/Class.hs
-formatted       63527ee9cd6b  hashable-1.5.1.0/src/Data/Hashable/FFI.hs
-formatted       d2be5b809f2a  hashable-1.5.1.0/src/Data/Hashable/Generic.hs
-formatted       ca3275b258b3  hashable-1.5.1.0/src/Data/Hashable/Generic/Instances.hs
-formatted       c9c87bb00bc0  hashable-1.5.1.0/src/Data/Hashable/Imports.hs
-formatted       e6b4c010a36d  hashable-1.5.1.0/src/Data/Hashable/Lifted.hs
-formatted       710bda251742  hashable-1.5.1.0/src/Data/Hashable/LowLevel.hs
-formatted       228c88ef0843  hashable-1.5.1.0/src/Data/Hashable/Mix.hs
-formatted       bd7108c77ca4  hashable-1.5.1.0/src/Data/Hashable/XXH3.hs
-formatted       f74f5b618f9a  hashable-1.5.1.0/tests/Main.hs
-formatted       5f3b7f834308  hashable-1.5.1.0/tests/Properties.hs
-broken          42af08530ac7  hashable-1.5.1.0/tests/Regress.hs
-formatted       468c72120829  hashable-1.5.1.0/tests/xxhash-tests.hs
-formatted       867a035875ee  haxl-2.5.1.1/Haxl/Core.hs
-formatted       d1219c0fe211  haxl-2.5.1.1/Haxl/Core/CallGraph.hs
-formatted       0ae77138c17c  haxl-2.5.1.1/Haxl/Core/DataCache.hs
-formatted       87d5268c5c21  haxl-2.5.1.1/Haxl/Core/DataSource.hs
-formatted       b4583121e35d  haxl-2.5.1.1/Haxl/Core/Exception.hs
-formatted       2a7c39599c8c  haxl-2.5.1.1/Haxl/Core/Fetch.hs
-formatted       b4afaa8d717d  haxl-2.5.1.1/Haxl/Core/Flags.hs
-formatted       f5053bdd605e  haxl-2.5.1.1/Haxl/Core/Memo.hs
-formatted       295e686b1256  haxl-2.5.1.1/Haxl/Core/Monad.hs
-formatted       59de6a1f9ba8  haxl-2.5.1.1/Haxl/Core/Parallel.hs
-formatted       dfa57a1a8071  haxl-2.5.1.1/Haxl/Core/Profile.hs
-formatted       72749066756e  haxl-2.5.1.1/Haxl/Core/RequestStore.hs
-formatted       c5d4556673d1  haxl-2.5.1.1/Haxl/Core/Run.hs
-formatted       a8e73c380c33  haxl-2.5.1.1/Haxl/Core/ShowP.hs
-formatted       f2cb25c4ae73  haxl-2.5.1.1/Haxl/Core/StateStore.hs
-formatted       979f6f3e416c  haxl-2.5.1.1/Haxl/Core/Stats.hs
-formatted       bd368a5862fd  haxl-2.5.1.1/Haxl/Core/Util.hs
-formatted       4d201ce15d28  haxl-2.5.1.1/Haxl/DataSource/ConcurrentIO.hs
-formatted       cf38b55569d1  haxl-2.5.1.1/Haxl/Prelude.hs
-formatted       0bf115c25c25  haxl-2.5.1.1/Setup.hs
-formatted       5897e1a72e86  haxl-2.5.1.1/tests/AdoTests.hs
-formatted       7392cb2bf8df  haxl-2.5.1.1/tests/AllTests.hs
-formatted       d2d969d17124  haxl-2.5.1.1/tests/BadDataSource.hs
-formatted       c747d2048e95  haxl-2.5.1.1/tests/BatchTests.hs
-formatted       a75656cc58b4  haxl-2.5.1.1/tests/Bench.hs
-formatted       67f526c34fd3  haxl-2.5.1.1/tests/CoreTests.hs
-formatted       616081b9f14c  haxl-2.5.1.1/tests/DataCacheTest.hs
-formatted       8120f9ee1106  haxl-2.5.1.1/tests/DataSourceDispatchTests.hs
-formatted       e20ece2dcc35  haxl-2.5.1.1/tests/ExampleDataSource.hs
-formatted       60d04dd78c5e  haxl-2.5.1.1/tests/ExceptionStackTests.hs
-formatted       329e1c7e0fd4  haxl-2.5.1.1/tests/FullyAsyncTest.hs
-formatted       5b348a1f5fab  haxl-2.5.1.1/tests/LoadCache.hs
-formatted       4c9a496637db  haxl-2.5.1.1/tests/MemoizationTests.hs
-formatted       fc04b9cb728b  haxl-2.5.1.1/tests/MockTAO.hs
-formatted       679224c9d5e5  haxl-2.5.1.1/tests/MonadAsyncTest.hs
-formatted       98176d25f2d8  haxl-2.5.1.1/tests/MonadBench.hs
-formatted       44fb28b20457  haxl-2.5.1.1/tests/OutgoneFetchesTests.hs
-formatted       f760bff6e190  haxl-2.5.1.1/tests/ParallelTests.hs
-formatted       ea594477eb7f  haxl-2.5.1.1/tests/ProfileTests.hs
-formatted       478999c2d1bd  haxl-2.5.1.1/tests/SleepDataSource.hs
-formatted       acd820448a53  haxl-2.5.1.1/tests/StatsTests.hs
-formatted       e30def33c769  haxl-2.5.1.1/tests/TestBadDataSource.hs
-formatted       26dd7ea798ca  haxl-2.5.1.1/tests/TestExampleDataSource.hs
-formatted       33f33c2b6767  haxl-2.5.1.1/tests/TestMain.hs
-formatted       c0a01d1bb863  haxl-2.5.1.1/tests/TestTypes.hs
-formatted       0cdf14515138  haxl-2.5.1.1/tests/TestUtils.hs
-formatted       19781f6f8677  haxl-2.5.1.1/tests/WorkDataSource.hs
-formatted       b8be7bcaa06e  haxl-2.5.1.1/tests/WriteTests.hs
-formatted       39ae68a1e26c  hedgehog-1.7/src/Hedgehog.hs
-formatted       1c094fda6263  hedgehog-1.7/src/Hedgehog/Gen.hs
-formatted       c03c7c6e1080  hedgehog-1.7/src/Hedgehog/Internal/Barbie.hs
-formatted       d9db2ccb4bc7  hedgehog-1.7/src/Hedgehog/Internal/Config.hs
-formatted       7855a4bfe6fc  hedgehog-1.7/src/Hedgehog/Internal/Discovery.hs
-formatted       968088a89cf8  hedgehog-1.7/src/Hedgehog/Internal/Distributive.hs
-formatted       db3d79ebed8e  hedgehog-1.7/src/Hedgehog/Internal/Exception.hs
-formatted       9815c1a50552  hedgehog-1.7/src/Hedgehog/Internal/Gen.hs
-formatted       82bd44e46c74  hedgehog-1.7/src/Hedgehog/Internal/HTraversable.hs
-formatted       0b6e930c617c  hedgehog-1.7/src/Hedgehog/Internal/Opaque.hs
-formatted       0c41d0d4f087  hedgehog-1.7/src/Hedgehog/Internal/Prelude.hs
-formatted       6810eba33ae6  hedgehog-1.7/src/Hedgehog/Internal/Property.hs
-formatted       144a39866885  hedgehog-1.7/src/Hedgehog/Internal/Queue.hs
-formatted       9d14d12ad0b0  hedgehog-1.7/src/Hedgehog/Internal/Range.hs
-formatted       e83fa4c27743  hedgehog-1.7/src/Hedgehog/Internal/Region.hs
-formatted       ab1296ed4cc9  hedgehog-1.7/src/Hedgehog/Internal/Report.hs
-formatted       f73ae514c1f8  hedgehog-1.7/src/Hedgehog/Internal/Runner.hs
-formatted       5c17cc008e95  hedgehog-1.7/src/Hedgehog/Internal/Seed.hs
-formatted       704b5c10e39d  hedgehog-1.7/src/Hedgehog/Internal/Show.hs
-formatted       c446e4f9c366  hedgehog-1.7/src/Hedgehog/Internal/Shrink.hs
-formatted       c9e8e47ba6c5  hedgehog-1.7/src/Hedgehog/Internal/Source.hs
-formatted       dc592494d5b6  hedgehog-1.7/src/Hedgehog/Internal/State.hs
-formatted       6c94f06be1cf  hedgehog-1.7/src/Hedgehog/Internal/TH.hs
-formatted       8a627c0fefb1  hedgehog-1.7/src/Hedgehog/Internal/Tree.hs
-formatted       42e8fad71904  hedgehog-1.7/src/Hedgehog/Internal/Tripping.hs
-formatted       33c9141eeffd  hedgehog-1.7/src/Hedgehog/Main.hs
-formatted       d71772dad16c  hedgehog-1.7/src/Hedgehog/Range.hs
-formatted       e23ab85e9c05  hedgehog-1.7/test/Test/Hedgehog/Applicative.hs
-formatted       37e6a1383406  hedgehog-1.7/test/Test/Hedgehog/Confidence.hs
-formatted       937e5890d2b0  hedgehog-1.7/test/Test/Hedgehog/Filter.hs
-formatted       6e253dd6a871  hedgehog-1.7/test/Test/Hedgehog/Maybe.hs
-formatted       b90e9af1e67d  hedgehog-1.7/test/Test/Hedgehog/Seed.hs
-formatted       4edd92333a33  hedgehog-1.7/test/Test/Hedgehog/Skip.hs
-formatted       d20ec251ab72  hedgehog-1.7/test/Test/Hedgehog/Text.hs
-formatted       2d3b2e9d7168  hedgehog-1.7/test/Test/Hedgehog/Zip.hs
-formatted       df799f9ffb57  hedgehog-1.7/test/test.hs
-formatted       01b498bf6573  hledger-1.52.1/Hledger/Cli.hs
-formatted       2883f330eae3  hledger-1.52.1/Hledger/Cli/Anchor.hs
-formatted       8da9d899b517  hledger-1.52.1/Hledger/Cli/Anon.hs
-formatted       43e230af0dbc  hledger-1.52.1/Hledger/Cli/CliOptions.hs
-formatted       df73224dbfc3  hledger-1.52.1/Hledger/Cli/Commands.hs
-formatted       b5468ff32d68  hledger-1.52.1/Hledger/Cli/Commands/Accounts.hs
-formatted       9f82d9b83f50  hledger-1.52.1/Hledger/Cli/Commands/Activity.hs
-formatted       390f5c20db45  hledger-1.52.1/Hledger/Cli/Commands/Add.hs
-formatted       d2b5d8ddbfe2  hledger-1.52.1/Hledger/Cli/Commands/Aregister.hs
-formatted       3d162d8b81a6  hledger-1.52.1/Hledger/Cli/Commands/Balance.hs
-formatted       f0880edebbde  hledger-1.52.1/Hledger/Cli/Commands/Balancesheet.hs
-formatted       6efd74ac6427  hledger-1.52.1/Hledger/Cli/Commands/Balancesheetequity.hs
-formatted       e7815e4484c7  hledger-1.52.1/Hledger/Cli/Commands/Cashflow.hs
-formatted       71fa0aea1fe8  hledger-1.52.1/Hledger/Cli/Commands/Check.hs
-formatted       9acd11176d66  hledger-1.52.1/Hledger/Cli/Commands/Close.hs
-formatted       1ee9d5996a53  hledger-1.52.1/Hledger/Cli/Commands/Codes.hs
-formatted       d9cafa4a7ba9  hledger-1.52.1/Hledger/Cli/Commands/Commodities.hs
-formatted       8b9bde91d49e  hledger-1.52.1/Hledger/Cli/Commands/Demo.hs
-formatted       c6b07096e5d5  hledger-1.52.1/Hledger/Cli/Commands/Descriptions.hs
-formatted       d7f05c08652b  hledger-1.52.1/Hledger/Cli/Commands/Diff.hs
-formatted       314567299894  hledger-1.52.1/Hledger/Cli/Commands/Files.hs
-formatted       15d50a6cb01a  hledger-1.52.1/Hledger/Cli/Commands/Help.hs
-formatted       ab6a528f18d5  hledger-1.52.1/Hledger/Cli/Commands/Import.hs
-formatted       f52dabbdb8da  hledger-1.52.1/Hledger/Cli/Commands/Incomestatement.hs
-formatted       f3beae981cf6  hledger-1.52.1/Hledger/Cli/Commands/Notes.hs
-formatted       c2ba7a5f589f  hledger-1.52.1/Hledger/Cli/Commands/Payees.hs
-formatted       386853c2aabb  hledger-1.52.1/Hledger/Cli/Commands/Prices.hs
-formatted       710dcb2e4f9b  hledger-1.52.1/Hledger/Cli/Commands/Print.hs
-formatted       0776c0d4e1bb  hledger-1.52.1/Hledger/Cli/Commands/Register.hs
-formatted       86dbaaa31622  hledger-1.52.1/Hledger/Cli/Commands/Rewrite.hs
-formatted       5057749fdb76  hledger-1.52.1/Hledger/Cli/Commands/Roi.hs
-formatted       fdd3ce4aced8  hledger-1.52.1/Hledger/Cli/Commands/Run.hs
-formatted       9eb1c950c825  hledger-1.52.1/Hledger/Cli/Commands/Setup.hs
-formatted       619de6c78d7a  hledger-1.52.1/Hledger/Cli/Commands/Stats.hs
-formatted       7a05bf643d07  hledger-1.52.1/Hledger/Cli/Commands/Tags.hs
-formatted       f3805bd9e067  hledger-1.52.1/Hledger/Cli/CompoundBalanceCommand.hs
-formatted       790c0d70714f  hledger-1.52.1/Hledger/Cli/Conf.hs
-formatted       d2d28f0566d1  hledger-1.52.1/Hledger/Cli/DocFiles.hs
-formatted       060eef1f372e  hledger-1.52.1/Hledger/Cli/Script.hs
-formatted       692db84f9314  hledger-1.52.1/Hledger/Cli/Utils.hs
-formatted       75e82c3d7f3a  hledger-1.52.1/Hledger/Cli/Version.hs
-formatted       e865ae48f11b  hledger-1.52.1/Setup.hs
-formatted       5f05220c744b  hledger-1.52.1/app/hledger-cli.hs
-formatted       4aa7156cea96  hledger-1.52.1/bench/bench.hs
-formatted       770ce114d693  hledger-1.52.1/test/unittest.hs
-formatted       e865ae48f11b  hlint-3.10/Setup.hs
-formatted       c359541e6f23  hlint-3.10/data/HLint_QuickCheck.hs
-declined        -             hlint-3.10/data/HLint_TypeCheck.hs
-formatted       7f62e2698706  hlint-3.10/data/Test.hs
-formatted       3d97c22b05bf  hlint-3.10/src/Apply.hs
-formatted       3fcacf39d946  hlint-3.10/src/CC.hs
-formatted       b10eb0886b76  hlint-3.10/src/CmdLine.hs
-formatted       221e9adae31a  hlint-3.10/src/Config/Compute.hs
-formatted       a7c73de17e90  hlint-3.10/src/Config/Haskell.hs
-formatted       747182f5f5c1  hlint-3.10/src/Config/Read.hs
-formatted       1c0e336b9e8f  hlint-3.10/src/Config/Type.hs
-declined        -             hlint-3.10/src/Config/Yaml.hs
-formatted       871e24292ba2  hlint-3.10/src/EmbedData.hs
-formatted       a0cce8b000d7  hlint-3.10/src/Extension.hs
-formatted       232c5ddbbb9b  hlint-3.10/src/Fixity.hs
-formatted       d904d8984e43  hlint-3.10/src/GHC/All.hs
-formatted       63d81c2c405a  hlint-3.10/src/GHC/Util.hs
-formatted       0106b9c8d879  hlint-3.10/src/GHC/Util/ApiAnnotation.hs
-formatted       f9d97257610d  hlint-3.10/src/GHC/Util/Brackets.hs
-formatted       8cff3984ef92  hlint-3.10/src/GHC/Util/DynFlags.hs
-formatted       56ec3add8792  hlint-3.10/src/GHC/Util/FreeVars.hs
-formatted       9ab2d91ee37b  hlint-3.10/src/GHC/Util/HsDecl.hs
-formatted       ba417cad3380  hlint-3.10/src/GHC/Util/HsExpr.hs
-formatted       7e3362b9d0bb  hlint-3.10/src/GHC/Util/Scope.hs
-formatted       d8a06089d209  hlint-3.10/src/GHC/Util/SrcLoc.hs
-formatted       32a1ee71787a  hlint-3.10/src/GHC/Util/Unify.hs
-formatted       ee5a3002a158  hlint-3.10/src/GHC/Util/View.hs
-formatted       dcf2b6c06331  hlint-3.10/src/HLint.hs
-formatted       6e2f629bc2ae  hlint-3.10/src/Hint/All.hs
-formatted       fea1c1a2897d  hlint-3.10/src/Hint/Bracket.hs
-formatted       e0953eb3c567  hlint-3.10/src/Hint/Comment.hs
-formatted       4a34094f4e91  hlint-3.10/src/Hint/Duplicate.hs
-formatted       a58adef76952  hlint-3.10/src/Hint/Export.hs
-formatted       ebafd0f86b73  hlint-3.10/src/Hint/Extensions.hs
-formatted       8e9b77e23dc7  hlint-3.10/src/Hint/Fixities.hs
-formatted       9e280ced172a  hlint-3.10/src/Hint/Import.hs
-formatted       e123b5497c48  hlint-3.10/src/Hint/Lambda.hs
-formatted       9306ce4be39c  hlint-3.10/src/Hint/List.hs
-formatted       367ea0ed84f0  hlint-3.10/src/Hint/ListRec.hs
-formatted       ff76042813f8  hlint-3.10/src/Hint/Match.hs
-formatted       54ff68f3bc0d  hlint-3.10/src/Hint/Monad.hs
-formatted       f5cb1a9c0152  hlint-3.10/src/Hint/Naming.hs
-formatted       53ee9e6f677c  hlint-3.10/src/Hint/Negation.hs
-formatted       199df51582af  hlint-3.10/src/Hint/NewType.hs
-formatted       66e2152899c5  hlint-3.10/src/Hint/NumLiteral.hs
-formatted       03b48e865a24  hlint-3.10/src/Hint/Pattern.hs
-formatted       0076ccb5bd1c  hlint-3.10/src/Hint/Pragma.hs
-formatted       c8af37d55e42  hlint-3.10/src/Hint/Restrict.hs
-formatted       793c20138fa4  hlint-3.10/src/Hint/Smell.hs
-formatted       3308ee100b88  hlint-3.10/src/Hint/Type.hs
-formatted       06d92bcca35f  hlint-3.10/src/Hint/Unsafe.hs
-formatted       48cd04ad2e02  hlint-3.10/src/HsColour.hs
-formatted       9f80ce05e290  hlint-3.10/src/Idea.hs
-formatted       21091880d7b8  hlint-3.10/src/Language/Haskell/HLint.hs
-formatted       7b8846cb4591  hlint-3.10/src/Main.hs
-formatted       fcdf50a5835c  hlint-3.10/src/Parallel.hs
-formatted       cddb107b52b7  hlint-3.10/src/Refact.hs
-formatted       08757ddcd20a  hlint-3.10/src/Report.hs
-formatted       63e79ae7e622  hlint-3.10/src/SARIF.hs
-formatted       d0eb61196032  hlint-3.10/src/Summary.hs
-formatted       e23d1347a2dd  hlint-3.10/src/Test/All.hs
-formatted       4a4b0f06e68b  hlint-3.10/src/Test/Annotations.hs
-formatted       80dc7efdd537  hlint-3.10/src/Test/InputOutput.hs
-formatted       f69b332bdb4f  hlint-3.10/src/Test/Util.hs
-formatted       0f5eb69b44dd  hlint-3.10/src/Timing.hs
-formatted       40bafe709540  hlint-3.10/src/Util.hs
-formatted       14f5f9f6c72a  hspec-core-2.11.17/src/GetOpt/Declarative.hs
-formatted       13b54fc56d9e  hspec-core-2.11.17/src/GetOpt/Declarative/Environment.hs
-formatted       ac874aa7540a  hspec-core-2.11.17/src/GetOpt/Declarative/Interpret.hs
-formatted       aed8c8d69571  hspec-core-2.11.17/src/GetOpt/Declarative/Types.hs
-formatted       7963314c7b2d  hspec-core-2.11.17/src/GetOpt/Declarative/Util.hs
-formatted       c59700aebda7  hspec-core-2.11.17/src/Test/Hspec/Core/Annotations.hs
-formatted       aaed3a708e2b  hspec-core-2.11.17/src/Test/Hspec/Core/Clock.hs
-broken          043159a88536  hspec-core-2.11.17/src/Test/Hspec/Core/Compat.hs
-formatted       0599f76d3382  hspec-core-2.11.17/src/Test/Hspec/Core/Config.hs
-formatted       d4499d7a9df1  hspec-core-2.11.17/src/Test/Hspec/Core/Config/Definition.hs
-formatted       2c2affbefb39  hspec-core-2.11.17/src/Test/Hspec/Core/Config/Options.hs
-formatted       d65135838a37  hspec-core-2.11.17/src/Test/Hspec/Core/Example.hs
-formatted       67abe1344a1b  hspec-core-2.11.17/src/Test/Hspec/Core/Example/Location.hs
-formatted       19c90134f072  hspec-core-2.11.17/src/Test/Hspec/Core/Extension.hs
-formatted       b5766e2580e3  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Config.hs
-formatted       d822d438fd19  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Config/Type.hs
-formatted       5eb7b97d332b  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Item.hs
-formatted       61fffea8ad44  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Option.hs
-formatted       2c1d2b4038d2  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Spec.hs
-formatted       090871045b95  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Tree.hs
-formatted       9a4c4c61d167  hspec-core-2.11.17/src/Test/Hspec/Core/FailureReport.hs
-formatted       cb0511463c94  hspec-core-2.11.17/src/Test/Hspec/Core/Format.hs
-formatted       b8b03afd38ee  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters.hs
-formatted       0f6c87760ec2  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/Diff.hs
-formatted       da7bd7f0c6a9  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/Internal.hs
-formatted       cd8a29b5bab7  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/Pretty.hs
-formatted       71e26cb11ffa  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/Pretty/Parser.hs
-formatted       07264fb33ca8  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/Pretty/Unicode.hs
-formatted       32564aeda195  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/V1.hs
-formatted       f7f280a9eab8  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/V1/Free.hs
-formatted       2ade5a4b4c64  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/V1/Internal.hs
-formatted       0879c2625e9f  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/V1/Monad.hs
-formatted       2b46e6d892ef  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/V2.hs
-formatted       de2f6f0279c1  hspec-core-2.11.17/src/Test/Hspec/Core/Hooks.hs
-formatted       35f4b48b53f0  hspec-core-2.11.17/src/Test/Hspec/Core/QuickCheck.hs
-formatted       e8c000ca0db9  hspec-core-2.11.17/src/Test/Hspec/Core/QuickCheck/Util.hs
-formatted       24c9dad2d9bd  hspec-core-2.11.17/src/Test/Hspec/Core/Runner.hs
-formatted       ce1b03ea14a3  hspec-core-2.11.17/src/Test/Hspec/Core/Runner/Eval.hs
-formatted       45d877a0b59c  hspec-core-2.11.17/src/Test/Hspec/Core/Runner/JobQueue.hs
-formatted       3324ca8fd649  hspec-core-2.11.17/src/Test/Hspec/Core/Runner/PrintSlowSpecItems.hs
-formatted       dfca3a9a186c  hspec-core-2.11.17/src/Test/Hspec/Core/Runner/Result.hs
-formatted       9a99abc1c86d  hspec-core-2.11.17/src/Test/Hspec/Core/Shuffle.hs
-formatted       54648918fc16  hspec-core-2.11.17/src/Test/Hspec/Core/Spec.hs
-formatted       2d50b76229a7  hspec-core-2.11.17/src/Test/Hspec/Core/Spec/Monad.hs
-formatted       1b327d112974  hspec-core-2.11.17/src/Test/Hspec/Core/Timer.hs
-formatted       faae992d66db  hspec-core-2.11.17/src/Test/Hspec/Core/Tree.hs
-formatted       80d2d2b8d380  hspec-core-2.11.17/src/Test/Hspec/Core/Util.hs
-formatted       e06b7cc46fd9  hspec-core-2.11.17/test/GetOpt/Declarative/EnvironmentSpec.hs
-formatted       6655e2e71bb3  hspec-core-2.11.17/test/GetOpt/Declarative/UtilSpec.hs
-formatted       c4b66f907855  hspec-core-2.11.17/test/Helper.hs
-formatted       10aa2070ffb6  hspec-core-2.11.17/test/Mock.hs
-formatted       42263bafabb2  hspec-core-2.11.17/test/Spec.hs
-formatted       409fb8a0b5e3  hspec-core-2.11.17/test/SpecHook.hs
-formatted       ae9de2079048  hspec-core-2.11.17/test/Test/Hspec/Core/AnnotationsSpec.hs
-formatted       1157d1650ac3  hspec-core-2.11.17/test/Test/Hspec/Core/ClockSpec.hs
-formatted       819d29d3431f  hspec-core-2.11.17/test/Test/Hspec/Core/CompatSpec.hs
-formatted       e5db68e3c868  hspec-core-2.11.17/test/Test/Hspec/Core/Config/DefinitionSpec.hs
-formatted       105756fabf5e  hspec-core-2.11.17/test/Test/Hspec/Core/Config/OptionsSpec.hs
-formatted       edfe82f15e2d  hspec-core-2.11.17/test/Test/Hspec/Core/ConfigSpec.hs
-formatted       035e99ae64f4  hspec-core-2.11.17/test/Test/Hspec/Core/Example/LocationSpec.hs
-formatted       d51ddf803043  hspec-core-2.11.17/test/Test/Hspec/Core/ExampleSpec.hs
-formatted       4c0452141fce  hspec-core-2.11.17/test/Test/Hspec/Core/FailureReportSpec.hs
-formatted       8992979a0121  hspec-core-2.11.17/test/Test/Hspec/Core/FormatSpec.hs
-formatted       c2d7791f1000  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/DiffSpec.hs
-formatted       cb3d38eb1461  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/InternalSpec.hs
-formatted       2ffb49f5a742  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/Pretty/ParserSpec.hs
-formatted       afa9ffaa3bf1  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/Pretty/UnicodeSpec.hs
-formatted       ac2da1dd4d6b  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/PrettySpec.hs
-formatted       614ca58f541d  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/V1Spec.hs
-formatted       e113498e6ff6  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/V2Spec.hs
-formatted       b43a06946394  hspec-core-2.11.17/test/Test/Hspec/Core/HooksSpec.hs
-formatted       a32929c3e3b9  hspec-core-2.11.17/test/Test/Hspec/Core/QuickCheck/UtilSpec.hs
-formatted       775321ce08bf  hspec-core-2.11.17/test/Test/Hspec/Core/Runner/EvalSpec.hs
-formatted       1a7b81d688ce  hspec-core-2.11.17/test/Test/Hspec/Core/Runner/JobQueueSpec.hs
-formatted       453f7a305fc2  hspec-core-2.11.17/test/Test/Hspec/Core/Runner/PrintSlowSpecItemsSpec.hs
-formatted       6222147e36c5  hspec-core-2.11.17/test/Test/Hspec/Core/Runner/ResultSpec.hs
-formatted       fa3a7e8ed2cf  hspec-core-2.11.17/test/Test/Hspec/Core/RunnerSpec.hs
-formatted       be08f1178641  hspec-core-2.11.17/test/Test/Hspec/Core/ShuffleSpec.hs
-formatted       6c250c13b42b  hspec-core-2.11.17/test/Test/Hspec/Core/SpecSpec.hs
-formatted       ccd964421c9d  hspec-core-2.11.17/test/Test/Hspec/Core/TimerSpec.hs
-formatted       ad44f3bb30b2  hspec-core-2.11.17/test/Test/Hspec/Core/TreeSpec.hs
-formatted       a46fa24d2bd0  hspec-core-2.11.17/test/Test/Hspec/Core/UtilSpec.hs
-formatted       47b3f474a58b  hspec-core-2.11.17/vendor/Data/Algorithm/Diff.hs
-partly-checked  0fb98ceed356  hspec-core-2.11.17/vendor/async-2.2.5/Control/Concurrent/Async.hs
-formatted       bea44982097a  hspec-core-2.11.17/vendor/stm-2.5.0.1/Control/Concurrent/STM/TMVar.hs
-formatted       4b70560a046e  http-client-0.7.19/Data/KeyedPool.hs
-formatted       ee21d51c58b7  http-client-0.7.19/Network/HTTP/Client.hs
-formatted       78f4e79070b8  http-client-0.7.19/Network/HTTP/Client/Body.hs
-formatted       e9db5b7dff2e  http-client-0.7.19/Network/HTTP/Client/Connection.hs
-formatted       e02d2d7818fe  http-client-0.7.19/Network/HTTP/Client/Cookies.hs
-formatted       f2e7c7f3925a  http-client-0.7.19/Network/HTTP/Client/Core.hs
-formatted       7a5aad8e01a5  http-client-0.7.19/Network/HTTP/Client/Headers.hs
-formatted       44b1ad27a89e  http-client-0.7.19/Network/HTTP/Client/Internal.hs
-formatted       4ea11457dd48  http-client-0.7.19/Network/HTTP/Client/Manager.hs
-formatted       7bbd1549c1c5  http-client-0.7.19/Network/HTTP/Client/MultipartFormData.hs
-formatted       3803b865de9c  http-client-0.7.19/Network/HTTP/Client/Request.hs
-formatted       b31b91e4e8d8  http-client-0.7.19/Network/HTTP/Client/Response.hs
-formatted       3a988ae6956e  http-client-0.7.19/Network/HTTP/Client/Types.hs
-formatted       ca6a48d5e983  http-client-0.7.19/Network/HTTP/Client/Util.hs
-formatted       0cd574de49ba  http-client-0.7.19/Network/HTTP/Proxy.hs
-formatted       e865ae48f11b  http-client-0.7.19/Setup.hs
-formatted       b1d3bc1d8679  http-client-0.7.19/publicsuffixlist/Network/PublicSuffixList/DataStructure.hs
-formatted       245d124b8415  http-client-0.7.19/publicsuffixlist/Network/PublicSuffixList/Lookup.hs
-formatted       765e07adf78d  http-client-0.7.19/publicsuffixlist/Network/PublicSuffixList/Serialize.hs
-formatted       5696ba4166cb  http-client-0.7.19/publicsuffixlist/Network/PublicSuffixList/Types.hs
-formatted       5a31984d56fd  http-client-0.7.19/test-nonet/Network/HTTP/Client/BodySpec.hs
-formatted       329d7775ecfb  http-client-0.7.19/test-nonet/Network/HTTP/Client/ConnectionSpec.hs
-formatted       baf77babfc94  http-client-0.7.19/test-nonet/Network/HTTP/Client/CookieSpec.hs
-formatted       11f71ff1af3c  http-client-0.7.19/test-nonet/Network/HTTP/Client/HeadersSpec.hs
-formatted       5a9957b3a2b8  http-client-0.7.19/test-nonet/Network/HTTP/Client/RequestBodySpec.hs
-formatted       a8c38aff0a1a  http-client-0.7.19/test-nonet/Network/HTTP/Client/RequestSpec.hs
-formatted       50108fcc3e79  http-client-0.7.19/test-nonet/Network/HTTP/Client/ResponseSpec.hs
-formatted       ca2b9c8a628f  http-client-0.7.19/test-nonet/Network/HTTP/ClientSpec.hs
-formatted       2fbd14b119a4  http-client-0.7.19/test-nonet/Spec.hs
-formatted       ef38979ac638  http-client-0.7.19/test/Network/HTTP/ClientSpec.hs
-formatted       2fbd14b119a4  http-client-0.7.19/test/Spec.hs
-formatted       13d151556922  http-types-0.12.6/Network/HTTP/Types.hs
-formatted       e7eff6d3c526  http-types-0.12.6/Network/HTTP/Types/Header.hs
-formatted       26f2850b0a92  http-types-0.12.6/Network/HTTP/Types/Method.hs
-formatted       937169187cf1  http-types-0.12.6/Network/HTTP/Types/QueryLike.hs
-formatted       d965b24d0a62  http-types-0.12.6/Network/HTTP/Types/Status.hs
-formatted       8393cb3031e8  http-types-0.12.6/Network/HTTP/Types/URI.hs
-formatted       f437cc36b9fa  http-types-0.12.6/Network/HTTP/Types/Version.hs
-formatted       e865ae48f11b  http-types-0.12.6/Setup.hs
-formatted       7d11c2eb808e  http-types-0.12.6/test/Network/HTTP/Types/HeaderSpec.hs
-formatted       1816a6090b5e  http-types-0.12.6/test/Network/HTTP/Types/MethodSpec.hs
-formatted       848ef1c45ded  http-types-0.12.6/test/Network/HTTP/Types/StatusSpec.hs
-formatted       9a3fe7ad6e47  http-types-0.12.6/test/Network/HTTP/Types/URISpec.hs
-formatted       5ac67585c5a1  http-types-0.12.6/test/Network/HTTP/Types/VersionSpec.hs
-formatted       2fbd14b119a4  http-types-0.12.6/test/Spec.hs
-formatted       6d7c004ed36a  http-types-0.12.6/test/doctests.hs
-declined        -             idris-1.3.4/Setup.hs
-formatted       eaad300a8c66  idris-1.3.4/codegen/idris-codegen-c/Main.hs
-formatted       98c659d52656  idris-1.3.4/codegen/idris-codegen-javascript/Main.hs
-formatted       1c34071e721a  idris-1.3.4/codegen/idris-codegen-node/Main.hs
-formatted       eaa6467947db  idris-1.3.4/main/Main.hs
-formatted       3fd541795c69  idris-1.3.4/src/IRTS/Bytecode.hs
-formatted       9c31d32e255a  idris-1.3.4/src/IRTS/CodegenC.hs
-formatted       9e5812762ec8  idris-1.3.4/src/IRTS/CodegenCommon.hs
-formatted       563f242aebaf  idris-1.3.4/src/IRTS/CodegenJavaScript.hs
-formatted       2940f3b8e91c  idris-1.3.4/src/IRTS/Compiler.hs
-formatted       649c4334c449  idris-1.3.4/src/IRTS/Defunctionalise.hs
-formatted       521a60c0c99b  idris-1.3.4/src/IRTS/DumpBC.hs
-formatted       67e26a69bf18  idris-1.3.4/src/IRTS/Exports.hs
-formatted       9e44d172890b  idris-1.3.4/src/IRTS/Inliner.hs
-formatted       ca2a16bd8e2f  idris-1.3.4/src/IRTS/JavaScript/AST.hs
-formatted       f768c79df832  idris-1.3.4/src/IRTS/JavaScript/Codegen.hs
-formatted       b171baf09627  idris-1.3.4/src/IRTS/JavaScript/LangTransforms.hs
-formatted       837e1fafadd6  idris-1.3.4/src/IRTS/JavaScript/Name.hs
-formatted       cd5cebdbb649  idris-1.3.4/src/IRTS/JavaScript/PrimOp.hs
-formatted       5eff81bf418b  idris-1.3.4/src/IRTS/JavaScript/Specialize.hs
-formatted       be460f171d5f  idris-1.3.4/src/IRTS/Lang.hs
-formatted       877532317321  idris-1.3.4/src/IRTS/LangOpts.hs
-formatted       54ee13488588  idris-1.3.4/src/IRTS/Portable.hs
-formatted       c092168371c9  idris-1.3.4/src/IRTS/Simplified.hs
-formatted       8a93ea593409  idris-1.3.4/src/IRTS/System.hs
-formatted       85927651d0ed  idris-1.3.4/src/Idris/ASTUtils.hs
-broken          d6a87f54c89d  idris-1.3.4/src/Idris/AbsSyntax.hs
-formatted       fb61ce03a769  idris-1.3.4/src/Idris/AbsSyntaxTree.hs
-formatted       9f032fa98b74  idris-1.3.4/src/Idris/Apropos.hs
-formatted       71a19541ed28  idris-1.3.4/src/Idris/CaseSplit.hs
-formatted       887228791bf4  idris-1.3.4/src/Idris/Chaser.hs
-formatted       a47646c618f2  idris-1.3.4/src/Idris/CmdOptions.hs
-formatted       4da7f931a59f  idris-1.3.4/src/Idris/Colours.hs
-formatted       f4a75f24bcf9  idris-1.3.4/src/Idris/Completion.hs
-formatted       499686be90c6  idris-1.3.4/src/Idris/Core/Binary.hs
-formatted       306094253161  idris-1.3.4/src/Idris/Core/CaseTree.hs
-formatted       51f525230ab3  idris-1.3.4/src/Idris/Core/Constraints.hs
-formatted       32e1f1dc7a41  idris-1.3.4/src/Idris/Core/DeepSeq.hs
-formatted       0b062ce794a9  idris-1.3.4/src/Idris/Core/Elaborate.hs
-formatted       91f9a262eab1  idris-1.3.4/src/Idris/Core/Evaluate.hs
-formatted       248e1a132506  idris-1.3.4/src/Idris/Core/Execute.hs
-formatted       6b1accf65b3b  idris-1.3.4/src/Idris/Core/ProofState.hs
-formatted       3c7bae0176ad  idris-1.3.4/src/Idris/Core/ProofTerm.hs
-formatted       230ce006aa2f  idris-1.3.4/src/Idris/Core/TT.hs
-formatted       418dc775272d  idris-1.3.4/src/Idris/Core/Typecheck.hs
-formatted       1125cc1a59f1  idris-1.3.4/src/Idris/Core/Unify.hs
-formatted       71eb35dcc836  idris-1.3.4/src/Idris/Core/WHNF.hs
-formatted       e884d58256bb  idris-1.3.4/src/Idris/Coverage.hs
-formatted       9c0fa0df0c99  idris-1.3.4/src/Idris/DSL.hs
-formatted       4ff1e76d5e39  idris-1.3.4/src/Idris/DataOpts.hs
-formatted       591136fc0c25  idris-1.3.4/src/Idris/DeepSeq.hs
-formatted       a47430a4c0e3  idris-1.3.4/src/Idris/Delaborate.hs
-formatted       d26382c2ddf7  idris-1.3.4/src/Idris/Directives.hs
-formatted       2b830d08f106  idris-1.3.4/src/Idris/Docs.hs
-formatted       a485f5642886  idris-1.3.4/src/Idris/Docstrings.hs
-formatted       b2d1eec4cfbd  idris-1.3.4/src/Idris/Elab/AsPat.hs
-formatted       6388538eb9c9  idris-1.3.4/src/Idris/Elab/Clause.hs
-formatted       9e5c2909e062  idris-1.3.4/src/Idris/Elab/Data.hs
-formatted       82554cd8b109  idris-1.3.4/src/Idris/Elab/Implementation.hs
-formatted       3983268f06e4  idris-1.3.4/src/Idris/Elab/Interface.hs
-formatted       7c5f6b45e740  idris-1.3.4/src/Idris/Elab/Provider.hs
-formatted       432315b423c7  idris-1.3.4/src/Idris/Elab/Quasiquote.hs
-formatted       229f49cf1c9d  idris-1.3.4/src/Idris/Elab/Record.hs
-formatted       967c221efde2  idris-1.3.4/src/Idris/Elab/Rewrite.hs
-formatted       c43e0233a370  idris-1.3.4/src/Idris/Elab/RunElab.hs
-formatted       89d365a14a2b  idris-1.3.4/src/Idris/Elab/Term.hs
-formatted       0883dc0ae293  idris-1.3.4/src/Idris/Elab/Transform.hs
-formatted       26f6a53369bb  idris-1.3.4/src/Idris/Elab/Type.hs
-formatted       0e0ed355579b  idris-1.3.4/src/Idris/Elab/Utils.hs
-formatted       9f4ab880839f  idris-1.3.4/src/Idris/Elab/Value.hs
-formatted       1216ba79966f  idris-1.3.4/src/Idris/ElabDecls.hs
-formatted       68025bd6dc21  idris-1.3.4/src/Idris/Erasure.hs
-formatted       7c4b0ef95bf4  idris-1.3.4/src/Idris/ErrReverse.hs
-formatted       28314a1db8cc  idris-1.3.4/src/Idris/Error.hs
-formatted       21bcb871fca8  idris-1.3.4/src/Idris/Help.hs
-formatted       ad762fec9411  idris-1.3.4/src/Idris/IBC.hs
-formatted       cce75249d4d5  idris-1.3.4/src/Idris/IdeMode.hs
-formatted       0c615974bec1  idris-1.3.4/src/Idris/IdrisDoc.hs
-formatted       8b7f62814233  idris-1.3.4/src/Idris/Imports.hs
-formatted       3e21520569d8  idris-1.3.4/src/Idris/Info.hs
-formatted       90f54928d9ca  idris-1.3.4/src/Idris/Info/Show.hs
-formatted       eb72f451c8f1  idris-1.3.4/src/Idris/Inliner.hs
-formatted       98284ea4cd70  idris-1.3.4/src/Idris/Interactive.hs
-formatted       e0647767ec17  idris-1.3.4/src/Idris/Main.hs
-formatted       c79bede9bfeb  idris-1.3.4/src/Idris/ModeCommon.hs
-formatted       28bd80263c16  idris-1.3.4/src/Idris/Options.hs
-formatted       3a608b013c4d  idris-1.3.4/src/Idris/Output.hs
-formatted       7b5bdcbe0f57  idris-1.3.4/src/Idris/Package.hs
-formatted       2a5fae85b8c9  idris-1.3.4/src/Idris/Package/Common.hs
-formatted       2bcb2e55e8aa  idris-1.3.4/src/Idris/Package/Parser.hs
-formatted       b45be2cdbede  idris-1.3.4/src/Idris/Parser.hs
-formatted       d28684b909dc  idris-1.3.4/src/Idris/Parser/Data.hs
-formatted       da61e7dddf50  idris-1.3.4/src/Idris/Parser/Expr.hs
-formatted       656292b222ab  idris-1.3.4/src/Idris/Parser/Helpers.hs
-formatted       00297a830b2d  idris-1.3.4/src/Idris/Parser/Ops.hs
-formatted       5182dd3b924f  idris-1.3.4/src/Idris/Parser/Stack.hs
-formatted       4873bf37b5fc  idris-1.3.4/src/Idris/PartialEval.hs
-formatted       58ad84ded5d8  idris-1.3.4/src/Idris/Primitives.hs
-formatted       55a7e58fbd43  idris-1.3.4/src/Idris/ProofSearch.hs
-formatted       d74d60292062  idris-1.3.4/src/Idris/Prover.hs
-formatted       b2ed059dd3da  idris-1.3.4/src/Idris/Providers.hs
-formatted       b8a3a757c0ca  idris-1.3.4/src/Idris/REPL.hs
-formatted       d43671c3f627  idris-1.3.4/src/Idris/REPL/Browse.hs
-formatted       adeb73659e58  idris-1.3.4/src/Idris/REPL/Commands.hs
-formatted       73f3c0c7bf6c  idris-1.3.4/src/Idris/REPL/Parser.hs
-formatted       9d0eae88a108  idris-1.3.4/src/Idris/Reflection.hs
-formatted       a069b8d050ff  idris-1.3.4/src/Idris/Termination.hs
-formatted       6837e439e7d6  idris-1.3.4/src/Idris/Transforms.hs
-formatted       a10eb7eb6eb8  idris-1.3.4/src/Idris/TypeSearch.hs
-formatted       efed23bf7411  idris-1.3.4/src/Idris/Unlit.hs
-formatted       b613b7be20de  idris-1.3.4/src/Idris/WhoCalls.hs
-declined        -             idris-1.3.4/src/Util/DynamicLinker.hs
-formatted       038d72b760c3  idris-1.3.4/src/Util/Net.hs
-formatted       f47f361e150a  idris-1.3.4/src/Util/Pretty.hs
-formatted       13363649406c  idris-1.3.4/src/Util/ScreenSize.hs
-formatted       7d39399c082d  idris-1.3.4/src/Util/System.hs
-formatted       1dbb680d7054  idris-1.3.4/test/TestData.hs
-formatted       a31adc2b319f  idris-1.3.4/test/TestRun.hs
-formatted       e865ae48f11b  intero-0.1.40/Setup.hs
-formatted       4bbbd2876ae9  intero-0.1.40/src/Completion.hs
-formatted       7440e90ebfc6  intero-0.1.40/src/GhciFind.hs
-partly-checked  20ef14d3e5df  intero-0.1.40/src/GhciInfo.hs
-formatted       7e9ae2f7b242  intero-0.1.40/src/GhciMonad.hs
-formatted       e7b607350a86  intero-0.1.40/src/GhciTags.hs
-formatted       72999d5c814e  intero-0.1.40/src/GhciTypes.hs
-declined        -             intero-0.1.40/src/InteractiveUI.hs
-formatted       d3b894941b5e  intero-0.1.40/src/Intero/Compat.hs
-declined        -             intero-0.1.40/src/Main.hs
-formatted       13b22f1a2f96  intero-0.1.40/src/test/Main.hs
-formatted       4fe73bbfe233  leksah-0.16.2.2/data/leksah-welcome/src/Main.hs
-formatted       1cefb44a49bc  leksah-0.16.2.2/data/leksah-welcome/test/Main.hs
-formatted       9b1bc79c9ca2  leksah-0.16.2.2/main/Main.hs
-formatted       d6d376192ba6  leksah-0.16.2.2/src/IDE/BufferMode.hs
-formatted       f92d6d5ed01c  leksah-0.16.2.2/src/IDE/Build.hs
-formatted       8362830b28ae  leksah-0.16.2.2/src/IDE/Command.hs
-formatted       311f46674981  leksah-0.16.2.2/src/IDE/Command/Print.hs
-formatted       3587f60b8002  leksah-0.16.2.2/src/IDE/Command/VCS.hs
-formatted       c5a7ac7f5eb1  leksah-0.16.2.2/src/IDE/Command/VCS/Common.hs
-formatted       800101f9a2a4  leksah-0.16.2.2/src/IDE/Command/VCS/Common/GUI.hs
-formatted       84a0ff8c4900  leksah-0.16.2.2/src/IDE/Command/VCS/Common/Helper.hs
-formatted       8615cfe9c636  leksah-0.16.2.2/src/IDE/Command/VCS/Common/Workspaces.hs
-formatted       703e291d1e3f  leksah-0.16.2.2/src/IDE/Command/VCS/GIT.hs
-formatted       5bebaffe9dd2  leksah-0.16.2.2/src/IDE/Command/VCS/Mercurial.hs
-formatted       bd58623b7bee  leksah-0.16.2.2/src/IDE/Command/VCS/SVN.hs
-formatted       092138f05183  leksah-0.16.2.2/src/IDE/Command/VCS/Types.hs
-formatted       a448596691a1  leksah-0.16.2.2/src/IDE/Completion.hs
-formatted       3c38d16ac03e  leksah-0.16.2.2/src/IDE/Core/State.hs
-formatted       4192db73165d  leksah-0.16.2.2/src/IDE/Core/Types.hs
-formatted       c997e6f71ffb  leksah-0.16.2.2/src/IDE/Debug.hs
-does-not-parse  -             leksah-0.16.2.2/src/IDE/Find.hs
-formatted       ce97dab05a0d  leksah-0.16.2.2/src/IDE/GUIHistory.hs
-formatted       8f069cee943e  leksah-0.16.2.2/src/IDE/HLint.hs
-formatted       d257bd397599  leksah-0.16.2.2/src/IDE/ImportTool.hs
-formatted       9d846a900a68  leksah-0.16.2.2/src/IDE/Keymap.hs
-formatted       3f0638c605cd  leksah-0.16.2.2/src/IDE/LPaste.hs
-formatted       7903248aba99  leksah-0.16.2.2/src/IDE/Leksah.hs
-formatted       23fd13492eb9  leksah-0.16.2.2/src/IDE/LogRef.hs
-formatted       ca5d19c20d5c  leksah-0.16.2.2/src/IDE/Metainfo/Provider.hs
-formatted       68ab2c0137cc  leksah-0.16.2.2/src/IDE/NotebookFlipper.hs
-formatted       d441d0417158  leksah-0.16.2.2/src/IDE/OSX.hs
-formatted       a720dde570ba  leksah-0.16.2.2/src/IDE/Package.hs
-formatted       59c82086f3fb  leksah-0.16.2.2/src/IDE/Pane/Breakpoints.hs
-formatted       3b9a25799eee  leksah-0.16.2.2/src/IDE/Pane/Errors.hs
-formatted       c3bd99376237  leksah-0.16.2.2/src/IDE/Pane/Files.hs
-formatted       eaeecabefb74  leksah-0.16.2.2/src/IDE/Pane/Grep.hs
-formatted       776709b4edac  leksah-0.16.2.2/src/IDE/Pane/HLint.hs
-formatted       fc1b596b6aca  leksah-0.16.2.2/src/IDE/Pane/Info.hs
-formatted       f3eae8aa0577  leksah-0.16.2.2/src/IDE/Pane/Log.hs
-formatted       46903fd63785  leksah-0.16.2.2/src/IDE/Pane/Modules.hs
-broken          49647b5943cd  leksah-0.16.2.2/src/IDE/Pane/PackageEditor.hs
-formatted       0d756eaf206d  leksah-0.16.2.2/src/IDE/Pane/PackageFlags.hs
-formatted       47d0e3537432  leksah-0.16.2.2/src/IDE/Pane/Search.hs
-formatted       2b12c871920e  leksah-0.16.2.2/src/IDE/Pane/SourceBuffer.hs
-formatted       f60ebab7323c  leksah-0.16.2.2/src/IDE/Pane/Trace.hs
-formatted       d1243f6e2cb2  leksah-0.16.2.2/src/IDE/Pane/Variables.hs
-formatted       10d80ccd68e9  leksah-0.16.2.2/src/IDE/Pane/WebKit/Documentation.hs
-formatted       f066058beef4  leksah-0.16.2.2/src/IDE/Pane/WebKit/Inspect.hs
-formatted       c747b2fb58a0  leksah-0.16.2.2/src/IDE/Pane/WebKit/Output.hs
-formatted       b4a06836dbcf  leksah-0.16.2.2/src/IDE/Pane/Workspace.hs
-formatted       33a766cc1c7d  leksah-0.16.2.2/src/IDE/PaneGroups.hs
-formatted       21c053af24d4  leksah-0.16.2.2/src/IDE/Preferences.hs
-formatted       2f0f2284081d  leksah-0.16.2.2/src/IDE/Session.hs
-formatted       277f211ae71b  leksah-0.16.2.2/src/IDE/SourceCandy.hs
-formatted       95169d9d3f63  leksah-0.16.2.2/src/IDE/Statusbar.hs
-formatted       70eb7c99746e  leksah-0.16.2.2/src/IDE/SymbolNavigation.hs
-formatted       265b135c829e  leksah-0.16.2.2/src/IDE/TextEditor.hs
-formatted       b345661c1e07  leksah-0.16.2.2/src/IDE/TextEditor/Class.hs
-formatted       341ec1727c7d  leksah-0.16.2.2/src/IDE/TextEditor/CodeMirror.hs
-formatted       8d9cbb5030a9  leksah-0.16.2.2/src/IDE/TextEditor/GtkSourceView.hs
-formatted       668535f1f6ff  leksah-0.16.2.2/src/IDE/TextEditor/Yi.hs
-formatted       c73baf7194c2  leksah-0.16.2.2/src/IDE/TextEditor/Yi/Config.hs
-formatted       007fe37642f2  leksah-0.16.2.2/src/IDE/Utils/CabalUtils.hs
-formatted       a1e35678dab5  leksah-0.16.2.2/src/IDE/Utils/DirectoryUtils.hs
-formatted       fbdb61765ca2  leksah-0.16.2.2/src/IDE/Utils/ExternalTool.hs
-formatted       f82cd3575fb1  leksah-0.16.2.2/src/IDE/Utils/GUIUtils.hs
-formatted       dba5fad6d1d6  leksah-0.16.2.2/src/IDE/Utils/ServerConnection.hs
-formatted       889365128863  leksah-0.16.2.2/src/IDE/Workspaces.hs
-formatted       1a17606cf12b  leksah-0.16.2.2/src/IDE/Workspaces/Writer.hs
-formatted       0c3ca0ef251f  lens-5.3.6/benchmarks/alongside.hs
-formatted       5a0e24f56d19  lens-5.3.6/benchmarks/folds.hs
-formatted       a5e826be2e18  lens-5.3.6/benchmarks/plated.hs
-formatted       91de2eafe033  lens-5.3.6/benchmarks/traversals.hs
-formatted       cf0afb8efdca  lens-5.3.6/benchmarks/unsafe.hs
-formatted       6b5d9407288a  lens-5.3.6/examples/Aeson.hs
-formatted       fcea15eace15  lens-5.3.6/examples/Plates.hs
-formatted       42c84063ca40  lens-5.3.6/examples/Pong.hs
-formatted       1e7ca6c2bac4  lens-5.3.6/examples/Turtle.hs
-formatted       e865ae48f11b  lens-5.3.6/lens-properties/Setup.hs
-formatted       03d5b652be06  lens-5.3.6/lens-properties/src/Control/Lens/Properties.hs
-broken          6f66b6321d8b  lens-5.3.6/src/Control/Exception/Lens.hs
-formatted       4fb8b462c692  lens-5.3.6/src/Control/Lens.hs
-formatted       dab5fde53fc2  lens-5.3.6/src/Control/Lens/At.hs
-formatted       1a555e9740b2  lens-5.3.6/src/Control/Lens/Combinators.hs
-formatted       45285718981c  lens-5.3.6/src/Control/Lens/Cons.hs
-formatted       087aa6536345  lens-5.3.6/src/Control/Lens/Each.hs
-formatted       db06507f8eb3  lens-5.3.6/src/Control/Lens/Empty.hs
-formatted       afba13ca40b2  lens-5.3.6/src/Control/Lens/Equality.hs
-formatted       e63ce52c62a6  lens-5.3.6/src/Control/Lens/Extras.hs
-formatted       bc07f01d16f1  lens-5.3.6/src/Control/Lens/Fold.hs
-formatted       1d6b4529afae  lens-5.3.6/src/Control/Lens/Getter.hs
-formatted       be96a32da04a  lens-5.3.6/src/Control/Lens/Indexed.hs
-formatted       f2b77c23d24e  lens-5.3.6/src/Control/Lens/Internal.hs
-formatted       ef704ee92ff4  lens-5.3.6/src/Control/Lens/Internal/Bazaar.hs
-formatted       77d72de128e9  lens-5.3.6/src/Control/Lens/Internal/ByteString.hs
-formatted       d8ca8cef6fef  lens-5.3.6/src/Control/Lens/Internal/CTypes.hs
-formatted       baf096fc8d0a  lens-5.3.6/src/Control/Lens/Internal/Context.hs
-formatted       a6d8f75d39fc  lens-5.3.6/src/Control/Lens/Internal/Deque.hs
-formatted       4c63a54a8aeb  lens-5.3.6/src/Control/Lens/Internal/Doctest.hs
-formatted       36dfae32602b  lens-5.3.6/src/Control/Lens/Internal/Exception.hs
-formatted       a7d4a6263d7d  lens-5.3.6/src/Control/Lens/Internal/FieldTH.hs
-formatted       0bf84e037423  lens-5.3.6/src/Control/Lens/Internal/Fold.hs
-formatted       9d8c7d9a024a  lens-5.3.6/src/Control/Lens/Internal/Getter.hs
-formatted       76d7f11378f9  lens-5.3.6/src/Control/Lens/Internal/Indexed.hs
-formatted       74a115066cae  lens-5.3.6/src/Control/Lens/Internal/Instances.hs
-formatted       a9257a233659  lens-5.3.6/src/Control/Lens/Internal/Iso.hs
-formatted       6790556bd514  lens-5.3.6/src/Control/Lens/Internal/Level.hs
-formatted       929b3db19b16  lens-5.3.6/src/Control/Lens/Internal/List.hs
-formatted       eae79aadfa29  lens-5.3.6/src/Control/Lens/Internal/Magma.hs
-formatted       e8fad9977f5a  lens-5.3.6/src/Control/Lens/Internal/Prelude.hs
-formatted       d033545bb0fa  lens-5.3.6/src/Control/Lens/Internal/Prism.hs
-formatted       4dffbb5256da  lens-5.3.6/src/Control/Lens/Internal/PrismTH.hs
-formatted       a529e2b12e5a  lens-5.3.6/src/Control/Lens/Internal/Profunctor.hs
-formatted       a0cfb7f64915  lens-5.3.6/src/Control/Lens/Internal/Review.hs
-formatted       bd611b570342  lens-5.3.6/src/Control/Lens/Internal/Setter.hs
-formatted       cb94f36001d0  lens-5.3.6/src/Control/Lens/Internal/TH.hs
-formatted       962f8a77a69c  lens-5.3.6/src/Control/Lens/Internal/Zoom.hs
-formatted       4d4a8b86f259  lens-5.3.6/src/Control/Lens/Iso.hs
-formatted       90c89d25de5a  lens-5.3.6/src/Control/Lens/Lens.hs
-formatted       bde563e05b67  lens-5.3.6/src/Control/Lens/Level.hs
-formatted       b84cf710176f  lens-5.3.6/src/Control/Lens/Operators.hs
-formatted       61aef519b850  lens-5.3.6/src/Control/Lens/Plated.hs
-formatted       cd556da34caa  lens-5.3.6/src/Control/Lens/Prism.hs
-formatted       b465099e5056  lens-5.3.6/src/Control/Lens/Profunctor.hs
-formatted       f12a4f9ff0a9  lens-5.3.6/src/Control/Lens/Reified.hs
-formatted       6e871d8e4385  lens-5.3.6/src/Control/Lens/Review.hs
-formatted       5f1a95d65c20  lens-5.3.6/src/Control/Lens/Setter.hs
-formatted       dcdba8e5777c  lens-5.3.6/src/Control/Lens/TH.hs
-formatted       e1d252b2bb3a  lens-5.3.6/src/Control/Lens/Traversal.hs
-formatted       3a5cbb2c959c  lens-5.3.6/src/Control/Lens/Tuple.hs
-formatted       181a647a9c7b  lens-5.3.6/src/Control/Lens/Type.hs
-formatted       ff8881502434  lens-5.3.6/src/Control/Lens/Unsound.hs
-declined        -             lens-5.3.6/src/Control/Lens/Wrapped.hs
-formatted       2c3a223dec39  lens-5.3.6/src/Control/Lens/Zoom.hs
-formatted       d04fd074c74d  lens-5.3.6/src/Control/Monad/Error/Lens.hs
-formatted       b9bfa6cc2ae6  lens-5.3.6/src/Control/Parallel/Strategies/Lens.hs
-formatted       3580c9fdbe74  lens-5.3.6/src/Control/Seq/Lens.hs
-formatted       ae1408607f92  lens-5.3.6/src/Data/Array/Lens.hs
-formatted       4f2a2066b52a  lens-5.3.6/src/Data/Bits/Lens.hs
-formatted       e1c3ede72b89  lens-5.3.6/src/Data/ByteString/Lazy/Lens.hs
-formatted       fd83b8412797  lens-5.3.6/src/Data/ByteString/Lens.hs
-formatted       a0beda949826  lens-5.3.6/src/Data/ByteString/Strict/Lens.hs
-formatted       e7fc0d3b8334  lens-5.3.6/src/Data/Complex/Lens.hs
-formatted       dab824fea092  lens-5.3.6/src/Data/Data/Lens.hs
-formatted       ae776c45408a  lens-5.3.6/src/Data/Dynamic/Lens.hs
-formatted       9817c7fd06d9  lens-5.3.6/src/Data/HashSet/Lens.hs
-formatted       9b6a7ea1de9a  lens-5.3.6/src/Data/IntSet/Lens.hs
-formatted       afd0c52fb1bb  lens-5.3.6/src/Data/List/Lens.hs
-formatted       c78898aaa504  lens-5.3.6/src/Data/Map/Lens.hs
-formatted       bf33871e79d3  lens-5.3.6/src/Data/Sequence/Lens.hs
-formatted       3b630e1120f0  lens-5.3.6/src/Data/Set/Lens.hs
-formatted       6abbc5ff2a97  lens-5.3.6/src/Data/Text/Lazy/Lens.hs
-formatted       c144e0a2b4d7  lens-5.3.6/src/Data/Text/Lens.hs
-formatted       5ce20871a8d2  lens-5.3.6/src/Data/Text/Strict/Lens.hs
-formatted       a4a006800f1d  lens-5.3.6/src/Data/Tree/Lens.hs
-formatted       bfb9f14912e5  lens-5.3.6/src/Data/Typeable/Lens.hs
-formatted       fa5b2f903156  lens-5.3.6/src/Data/Vector/Generic/Lens.hs
-formatted       4348b84e4ed7  lens-5.3.6/src/Data/Vector/Lens.hs
-formatted       7e80fcd30b07  lens-5.3.6/src/GHC/Generics/Lens.hs
-declined        -             lens-5.3.6/src/Language/Haskell/TH/Lens.hs
-formatted       6142187a095c  lens-5.3.6/src/Numeric/Lens.hs
-formatted       11d5331927be  lens-5.3.6/src/Numeric/Natural/Lens.hs
-formatted       353cf4551a49  lens-5.3.6/src/System/Exit/Lens.hs
-formatted       5a4f7cf6359b  lens-5.3.6/src/System/FilePath/Lens.hs
-formatted       e8fab2c360dd  lens-5.3.6/src/System/IO/Error/Lens.hs
-formatted       aa93fbb09ce5  lens-5.3.6/tests/BigRecord.hs
-formatted       4bb6e1258874  lens-5.3.6/tests/T1024.hs
-formatted       b4be82b75781  lens-5.3.6/tests/T799.hs
-formatted       f9a61b457a6c  lens-5.3.6/tests/T917.hs
-formatted       c8d456a949a1  lens-5.3.6/tests/T972.hs
-formatted       1e9429a79aca  lens-5.3.6/tests/doctests.hs
-formatted       cc78a4a446ba  lens-5.3.6/tests/hunit.hs
-declined        -             lens-5.3.6/tests/properties.hs
-formatted       411e9ff9fd4b  lens-5.3.6/tests/templates.hs
-formatted       8e582508019b  megaparsec-9.8.1/Text/Megaparsec.hs
-formatted       aaf0968c72cf  megaparsec-9.8.1/Text/Megaparsec/Byte.hs
-formatted       af93162c0732  megaparsec-9.8.1/Text/Megaparsec/Byte/Binary.hs
-formatted       6daebd54878b  megaparsec-9.8.1/Text/Megaparsec/Byte/Lexer.hs
-formatted       a8f12808d592  megaparsec-9.8.1/Text/Megaparsec/Char.hs
-formatted       fb0aa0491a35  megaparsec-9.8.1/Text/Megaparsec/Char/Lexer.hs
-formatted       9ada7619d986  megaparsec-9.8.1/Text/Megaparsec/Class.hs
-formatted       04c41e5e9d68  megaparsec-9.8.1/Text/Megaparsec/Common.hs
-formatted       56cf25afe110  megaparsec-9.8.1/Text/Megaparsec/Debug.hs
-formatted       2a0ab69a0154  megaparsec-9.8.1/Text/Megaparsec/Error.hs
-formatted       6dc9b6ce5897  megaparsec-9.8.1/Text/Megaparsec/Error.hs-boot
-formatted       92e848d5b88d  megaparsec-9.8.1/Text/Megaparsec/Error/Builder.hs
-formatted       ef8c030d6d02  megaparsec-9.8.1/Text/Megaparsec/Internal.hs
-formatted       2d845f6be8a2  megaparsec-9.8.1/Text/Megaparsec/Internal.hs-boot
-formatted       fb54b4f4cab3  megaparsec-9.8.1/Text/Megaparsec/Lexer.hs
-formatted       0db88dbc985e  megaparsec-9.8.1/Text/Megaparsec/Pos.hs
-formatted       4f1b6ce7ca12  megaparsec-9.8.1/Text/Megaparsec/State.hs
-formatted       1391285f39da  megaparsec-9.8.1/Text/Megaparsec/Stream.hs
-formatted       5e21ab523a4c  megaparsec-9.8.1/Text/Megaparsec/Unicode.hs
-formatted       882124e5ceb6  megaparsec-9.8.1/bench/memory/Main.hs
-formatted       d8a32e7340de  megaparsec-9.8.1/bench/speed/Main.hs
-formatted       e865ae48f11b  microlens-0.5.0.0/Setup.hs
-declined        -             microlens-0.5.0.0/src/Lens/Micro.hs
-formatted       a33fe5ffd3d9  microlens-0.5.0.0/src/Lens/Micro/Extras.hs
-formatted       3608b82ef46d  microlens-0.5.0.0/src/Lens/Micro/FieldN.hs
-declined        -             microlens-0.5.0.0/src/Lens/Micro/Internal.hs
-formatted       de09492cc927  microlens-0.5.0.0/src/Lens/Micro/Type.hs
-formatted       9fd4d8759261  mtl-2.3.2/Control/Monad/Accum.hs
-formatted       1c966453ae10  mtl-2.3.2/Control/Monad/Cont.hs
-formatted       6543a3adf1ee  mtl-2.3.2/Control/Monad/Cont/Class.hs
-formatted       a1002896353b  mtl-2.3.2/Control/Monad/Error/Class.hs
-formatted       241b9ab5b29e  mtl-2.3.2/Control/Monad/Except.hs
-formatted       fae093b03648  mtl-2.3.2/Control/Monad/Identity.hs
-formatted       8bb64ac32001  mtl-2.3.2/Control/Monad/RWS.hs
-formatted       f59a78122b11  mtl-2.3.2/Control/Monad/RWS/CPS.hs
-formatted       853a42d0a7d0  mtl-2.3.2/Control/Monad/RWS/Class.hs
-formatted       6fedd348f84f  mtl-2.3.2/Control/Monad/RWS/Lazy.hs
-formatted       ddc740ed2ba9  mtl-2.3.2/Control/Monad/RWS/Strict.hs
-formatted       70448da6c08e  mtl-2.3.2/Control/Monad/Reader.hs
-formatted       048f1d41ceeb  mtl-2.3.2/Control/Monad/Reader/Class.hs
-formatted       fda85a3d8a5b  mtl-2.3.2/Control/Monad/Select.hs
-formatted       dbf53d8970a0  mtl-2.3.2/Control/Monad/State.hs
-formatted       a11cb9d9968b  mtl-2.3.2/Control/Monad/State/Class.hs
-formatted       297011983d2c  mtl-2.3.2/Control/Monad/State/Lazy.hs
-formatted       77f07f071154  mtl-2.3.2/Control/Monad/State/Strict.hs
-formatted       4442f9cb2755  mtl-2.3.2/Control/Monad/Trans.hs
-formatted       c315c681e4a7  mtl-2.3.2/Control/Monad/Writer.hs
-formatted       bd34c32bca35  mtl-2.3.2/Control/Monad/Writer/CPS.hs
-formatted       220119ac3010  mtl-2.3.2/Control/Monad/Writer/Class.hs
-formatted       26c1b816de3a  mtl-2.3.2/Control/Monad/Writer/Lazy.hs
-formatted       e5a4e79a643b  mtl-2.3.2/Control/Monad/Writer/Strict.hs
-formatted       e865ae48f11b  mtl-2.3.2/Setup.hs
-formatted       9007a7528d49  optics-0.4.2.1/benchmarks/folds.hs
-formatted       6819e713d7fd  optics-0.4.2.1/benchmarks/traversals.hs
-formatted       39c6a1f9e980  optics-0.4.2.1/src/Optics.hs
-formatted       fbb3a44aca1a  optics-0.4.2.1/tests/Optics/Tests.hs
-formatted       c6d811f3b338  optics-0.4.2.1/tests/Optics/Tests/Computation.hs
-formatted       26a0cf8a6c0d  optics-0.4.2.1/tests/Optics/Tests/Core.hs
-formatted       714f321c1085  optics-0.4.2.1/tests/Optics/Tests/Eta.hs
-formatted       1fbb1734b1b2  optics-0.4.2.1/tests/Optics/Tests/Labels/Generic.hs
-formatted       0d08d0986a64  optics-0.4.2.1/tests/Optics/Tests/Labels/TH.hs
-formatted       1ec08bb9f22e  optics-0.4.2.1/tests/Optics/Tests/Misc.hs
-formatted       9a4b74c6e2a0  optics-0.4.2.1/tests/Optics/Tests/Properties.hs
-declined        -             optics-0.4.2.1/tests/Optics/Tests/Utils.hs
-formatted       e865ae48f11b  optparse-applicative-0.19.0.0/Setup.hs
-formatted       64905439cdc6  optparse-applicative-0.19.0.0/src/Options/Applicative.hs
-formatted       c906682e4329  optparse-applicative-0.19.0.0/src/Options/Applicative/Arrows.hs
-formatted       fa5bdd86f120  optparse-applicative-0.19.0.0/src/Options/Applicative/BashCompletion.hs
-formatted       fdefdf302889  optparse-applicative-0.19.0.0/src/Options/Applicative/Builder.hs
-formatted       b35877965cca  optparse-applicative-0.19.0.0/src/Options/Applicative/Builder/Completer.hs
-formatted       86de039c8195  optparse-applicative-0.19.0.0/src/Options/Applicative/Builder/Internal.hs
-formatted       2677a4207b59  optparse-applicative-0.19.0.0/src/Options/Applicative/Common.hs
-formatted       e2a26a2c39e5  optparse-applicative-0.19.0.0/src/Options/Applicative/Extra.hs
-formatted       02404b06b751  optparse-applicative-0.19.0.0/src/Options/Applicative/Help.hs
-formatted       309f18523f28  optparse-applicative-0.19.0.0/src/Options/Applicative/Help/Chunk.hs
-formatted       71aeb73c7d0a  optparse-applicative-0.19.0.0/src/Options/Applicative/Help/Core.hs
-formatted       c6289fc77a0b  optparse-applicative-0.19.0.0/src/Options/Applicative/Help/Levenshtein.hs
-formatted       dbad440603b5  optparse-applicative-0.19.0.0/src/Options/Applicative/Help/Pretty.hs
-formatted       ea64d277c8d8  optparse-applicative-0.19.0.0/src/Options/Applicative/Help/Types.hs
-formatted       5f19dd3bfbfc  optparse-applicative-0.19.0.0/src/Options/Applicative/Internal.hs
-formatted       cfaae94bf094  optparse-applicative-0.19.0.0/src/Options/Applicative/NonEmpty.hs
-formatted       0375c798d3bc  optparse-applicative-0.19.0.0/src/Options/Applicative/Types.hs
-formatted       88e47dac52ad  optparse-applicative-0.19.0.0/tests/Examples/Alternatives.hs
-formatted       9cdd4cffe98a  optparse-applicative-0.19.0.0/tests/Examples/Cabal.hs
-formatted       6eb87c31763d  optparse-applicative-0.19.0.0/tests/Examples/Commands.hs
-formatted       3e7e8c6885db  optparse-applicative-0.19.0.0/tests/Examples/Formatting.hs
-formatted       63619af33822  optparse-applicative-0.19.0.0/tests/Examples/Hello.hs
-formatted       515fef001627  optparse-applicative-0.19.0.0/tests/Examples/LongSub.hs
-formatted       c2e700c8f642  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/AllGrouped.hs
-formatted       f5ab674c163c  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/Basic.hs
-formatted       dbff3ca47a7d  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/CommandGroups.hs
-formatted       87c22c856d69  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/DuplicateCommandGroups.hs
-formatted       ded6a73332cc  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/Duplicates.hs
-formatted       8ea0fc79c8f6  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/Nested.hs
-formatted       25bcbf4b701f  optparse-applicative-0.19.0.0/tests/test.hs
-formatted       037d20016ff3  pandoc-3.10.2/benchmark/benchmark-pandoc.hs
-formatted       e9cc6bbe8397  pandoc-3.10.2/src/Text/Pandoc.hs
-formatted       45884709d219  pandoc-3.10.2/src/Text/Pandoc/App.hs
-formatted       2a51cd540ed5  pandoc-3.10.2/src/Text/Pandoc/App/CommandLineOptions.hs
-formatted       5c6f2514f305  pandoc-3.10.2/src/Text/Pandoc/App/Input.hs
-formatted       87ef6eb61ae6  pandoc-3.10.2/src/Text/Pandoc/App/Opt.hs
-formatted       3a8ec3e92f62  pandoc-3.10.2/src/Text/Pandoc/App/OutputSettings.hs
-formatted       30536e2da049  pandoc-3.10.2/src/Text/Pandoc/Asciify.hs
-formatted       0798d787f37f  pandoc-3.10.2/src/Text/Pandoc/CSS.hs
-formatted       eb9916b55f28  pandoc-3.10.2/src/Text/Pandoc/CSV.hs
-formatted       425285a86e63  pandoc-3.10.2/src/Text/Pandoc/Char.hs
-formatted       16a677692492  pandoc-3.10.2/src/Text/Pandoc/Chunks.hs
-formatted       dd27f0bb68e4  pandoc-3.10.2/src/Text/Pandoc/Citeproc.hs
-formatted       73b49670ac75  pandoc-3.10.2/src/Text/Pandoc/Citeproc/BibTeX.hs
-formatted       f4a7c604316e  pandoc-3.10.2/src/Text/Pandoc/Citeproc/CslJson.hs
-formatted       a47804651b9d  pandoc-3.10.2/src/Text/Pandoc/Citeproc/Data.hs
-formatted       53e47a128316  pandoc-3.10.2/src/Text/Pandoc/Citeproc/Locator.hs
-formatted       f41105d87bc7  pandoc-3.10.2/src/Text/Pandoc/Citeproc/MetaValue.hs
-formatted       a318c7f44fea  pandoc-3.10.2/src/Text/Pandoc/Citeproc/Name.hs
-formatted       76559347a97c  pandoc-3.10.2/src/Text/Pandoc/Citeproc/Util.hs
-formatted       1b13d0dc5e1b  pandoc-3.10.2/src/Text/Pandoc/Class.hs
-formatted       121629e38e36  pandoc-3.10.2/src/Text/Pandoc/Class/CommonState.hs
-formatted       27b0d8ea4952  pandoc-3.10.2/src/Text/Pandoc/Class/IO.hs
-formatted       554e3fd3f722  pandoc-3.10.2/src/Text/Pandoc/Class/PandocIO.hs
-formatted       f986b2d26417  pandoc-3.10.2/src/Text/Pandoc/Class/PandocMonad.hs
-formatted       7ef781658145  pandoc-3.10.2/src/Text/Pandoc/Class/PandocPure.hs
-formatted       6704a4c38841  pandoc-3.10.2/src/Text/Pandoc/Class/Sandbox.hs
-formatted       407b6ea8dcf3  pandoc-3.10.2/src/Text/Pandoc/Data.hs
-formatted       a40ce7ee511d  pandoc-3.10.2/src/Text/Pandoc/Data/BakedIn.hs
-formatted       58434b0c4602  pandoc-3.10.2/src/Text/Pandoc/Emoji.hs
-formatted       b6a210497f11  pandoc-3.10.2/src/Text/Pandoc/Error.hs
-formatted       72ff19ca80f5  pandoc-3.10.2/src/Text/Pandoc/Extensions.hs
-formatted       3bdc8aed022b  pandoc-3.10.2/src/Text/Pandoc/Filter.hs
-formatted       1be979d2afbf  pandoc-3.10.2/src/Text/Pandoc/Filter/Environment.hs
-formatted       3921a2426b07  pandoc-3.10.2/src/Text/Pandoc/Filter/JSON.hs
-formatted       47f670c3a0ba  pandoc-3.10.2/src/Text/Pandoc/Format.hs
-formatted       3df0ace70613  pandoc-3.10.2/src/Text/Pandoc/Highlighting.hs
-formatted       834edab63758  pandoc-3.10.2/src/Text/Pandoc/Image.hs
-formatted       fd7cafba4cb8  pandoc-3.10.2/src/Text/Pandoc/ImageSize.hs
-formatted       2aebfb9a4784  pandoc-3.10.2/src/Text/Pandoc/Logging.hs
-formatted       198eaaad0ea2  pandoc-3.10.2/src/Text/Pandoc/MIME.hs
-formatted       fc58bac11b5e  pandoc-3.10.2/src/Text/Pandoc/MediaBag.hs
-formatted       cd7ca82c574c  pandoc-3.10.2/src/Text/Pandoc/Options.hs
-formatted       d4caa78b9b84  pandoc-3.10.2/src/Text/Pandoc/PDF.hs
-formatted       1378d4b80344  pandoc-3.10.2/src/Text/Pandoc/Parsing.hs
-formatted       d0bfe0ebb5ca  pandoc-3.10.2/src/Text/Pandoc/Parsing/Capabilities.hs
-formatted       78249fa68c58  pandoc-3.10.2/src/Text/Pandoc/Parsing/Citations.hs
-formatted       9be74d6c3ee8  pandoc-3.10.2/src/Text/Pandoc/Parsing/Future.hs
-formatted       854dc9763274  pandoc-3.10.2/src/Text/Pandoc/Parsing/General.hs
-formatted       ebf243a003b2  pandoc-3.10.2/src/Text/Pandoc/Parsing/GridTable.hs
-formatted       6ae9fc28f92d  pandoc-3.10.2/src/Text/Pandoc/Parsing/Lists.hs
-formatted       957cafdf0f36  pandoc-3.10.2/src/Text/Pandoc/Parsing/Math.hs
-formatted       fad3834b08e5  pandoc-3.10.2/src/Text/Pandoc/Parsing/Smart.hs
-formatted       3a6f9d5669d3  pandoc-3.10.2/src/Text/Pandoc/Parsing/State.hs
-formatted       a83effd57b53  pandoc-3.10.2/src/Text/Pandoc/Process.hs
-formatted       5798ce9f1d3b  pandoc-3.10.2/src/Text/Pandoc/Readers.hs
-formatted       b0383bb6bbf3  pandoc-3.10.2/src/Text/Pandoc/Readers/AsciiDoc.hs
-formatted       fb9989e02f4c  pandoc-3.10.2/src/Text/Pandoc/Readers/BibTeX.hs
-formatted       6df32968e0c9  pandoc-3.10.2/src/Text/Pandoc/Readers/CSV.hs
-formatted       9daab54008b1  pandoc-3.10.2/src/Text/Pandoc/Readers/CommonMark.hs
-formatted       a342a5d39536  pandoc-3.10.2/src/Text/Pandoc/Readers/Creole.hs
-formatted       9a91a657b202  pandoc-3.10.2/src/Text/Pandoc/Readers/CslJson.hs
-formatted       8f06acca3961  pandoc-3.10.2/src/Text/Pandoc/Readers/Djot.hs
-formatted       1d2ab70b7b4f  pandoc-3.10.2/src/Text/Pandoc/Readers/DocBook.hs
-formatted       cf58716fb7b3  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx.hs
-formatted       fc9009e1ca7b  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Combine.hs
-formatted       2d1f14f169d4  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Fields.hs
-formatted       93c7c8635e18  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Lists.hs
-formatted       bc3c2892099c  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Parse.hs
-formatted       cdafbece822b  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Parse/Styles.hs
-formatted       59a529967b45  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Symbols.hs
-formatted       bc3f39ebba02  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Util.hs
-formatted       40fc6fdc95bf  pandoc-3.10.2/src/Text/Pandoc/Readers/DokuWiki.hs
-formatted       e7e64c311852  pandoc-3.10.2/src/Text/Pandoc/Readers/EPUB.hs
-formatted       f3a6089222df  pandoc-3.10.2/src/Text/Pandoc/Readers/EndNote.hs
-formatted       7db3a804d654  pandoc-3.10.2/src/Text/Pandoc/Readers/FB2.hs
-formatted       4383de7c2335  pandoc-3.10.2/src/Text/Pandoc/Readers/HTML.hs
-formatted       dffd88697abd  pandoc-3.10.2/src/Text/Pandoc/Readers/HTML/Parsing.hs
-formatted       7906dc4b5ee7  pandoc-3.10.2/src/Text/Pandoc/Readers/HTML/Table.hs
-formatted       d02eee6a5e0a  pandoc-3.10.2/src/Text/Pandoc/Readers/HTML/TagCategories.hs
-formatted       70831845aec7  pandoc-3.10.2/src/Text/Pandoc/Readers/HTML/Types.hs
-formatted       eff46e987f16  pandoc-3.10.2/src/Text/Pandoc/Readers/Haddock.hs
-formatted       e0709d478a16  pandoc-3.10.2/src/Text/Pandoc/Readers/Ipynb.hs
-formatted       3f4f03f7cb25  pandoc-3.10.2/src/Text/Pandoc/Readers/JATS.hs
-formatted       c7b531b762cd  pandoc-3.10.2/src/Text/Pandoc/Readers/Jira.hs
-formatted       6ef7e7e8a336  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX.hs
-formatted       43d3ff6389de  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Citation.hs
-formatted       42ef4f6efe29  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Inline.hs
-formatted       c4741ac43b79  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Lang.hs
-formatted       7da4b015aff1  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Macro.hs
-formatted       99583e0adb7e  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Math.hs
-formatted       a4f0a47266af  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Parsing.hs
-formatted       c5052708c057  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/SIunitx.hs
-formatted       6cfc2c0c5f07  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Table.hs
-formatted       6b532f75206a  pandoc-3.10.2/src/Text/Pandoc/Readers/Man.hs
-formatted       a4a565478d90  pandoc-3.10.2/src/Text/Pandoc/Readers/Markdown.hs
-formatted       a22f7f9ddf30  pandoc-3.10.2/src/Text/Pandoc/Readers/Mdoc.hs
-formatted       d33fca4fc582  pandoc-3.10.2/src/Text/Pandoc/Readers/Mdoc/Lex.hs
-formatted       728f79b431ec  pandoc-3.10.2/src/Text/Pandoc/Readers/Mdoc/Macros.hs
-formatted       1a3b54c227b9  pandoc-3.10.2/src/Text/Pandoc/Readers/Mdoc/Standards.hs
-formatted       930a7a29e8cd  pandoc-3.10.2/src/Text/Pandoc/Readers/MediaWiki.hs
-formatted       3a3c4b5afb54  pandoc-3.10.2/src/Text/Pandoc/Readers/Metadata.hs
-formatted       fa0c9ab8ddff  pandoc-3.10.2/src/Text/Pandoc/Readers/Muse.hs
-formatted       b5fdcc7976c0  pandoc-3.10.2/src/Text/Pandoc/Readers/Native.hs
-formatted       00dc84441dee  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT.hs
-formatted       4b763e5899cb  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Arrows/State.hs
-formatted       978b213b2283  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Arrows/Utils.hs
-formatted       bf610e3c1650  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Base.hs
-formatted       824410efced3  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/ContentReader.hs
-formatted       c708199aa2c5  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Generic/Fallible.hs
-formatted       3cb13f8a11b2  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Generic/Namespaces.hs
-formatted       6d9540eaec43  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Generic/SetMap.hs
-formatted       e530287347dc  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Generic/Utils.hs
-formatted       b9912baa7f2d  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Generic/XMLConverter.hs
-formatted       32a05a5e6b5d  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Namespaces.hs
-formatted       0e276b72ff84  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/StyleReader.hs
-formatted       fc024f0c1f5f  pandoc-3.10.2/src/Text/Pandoc/Readers/OOXML/Shared.hs
-formatted       567609e53504  pandoc-3.10.2/src/Text/Pandoc/Readers/OPML.hs
-formatted       f0c2a727f84e  pandoc-3.10.2/src/Text/Pandoc/Readers/Org.hs
-formatted       b11790cf298d  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/BlockStarts.hs
-formatted       5af99478081e  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/Blocks.hs
-formatted       43bd91b13dca  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/DocumentTree.hs
-formatted       845ce0261537  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/ExportSettings.hs
-formatted       f91afc951ab9  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/Inlines.hs
-formatted       161b1ccc8ff6  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/Meta.hs
-formatted       721a0cf8a327  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/ParserState.hs
-formatted       c16136fb606c  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/Parsing.hs
-formatted       56b3882f7c5f  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/Shared.hs
-formatted       dc3e8e78c3f0  pandoc-3.10.2/src/Text/Pandoc/Readers/Pod.hs
-formatted       53643fbdc8d6  pandoc-3.10.2/src/Text/Pandoc/Readers/Pptx.hs
-formatted       9f0a1be15c9c  pandoc-3.10.2/src/Text/Pandoc/Readers/Pptx/Parse.hs
-formatted       06b32e0a02bb  pandoc-3.10.2/src/Text/Pandoc/Readers/Pptx/Shapes.hs
-formatted       68136f2cd896  pandoc-3.10.2/src/Text/Pandoc/Readers/Pptx/Slides.hs
-formatted       2a1143e52057  pandoc-3.10.2/src/Text/Pandoc/Readers/Pptx/SmartArt.hs
-formatted       546eac2a8514  pandoc-3.10.2/src/Text/Pandoc/Readers/RIS.hs
-formatted       04715a4be3c2  pandoc-3.10.2/src/Text/Pandoc/Readers/RST.hs
-formatted       0ee83c7814cd  pandoc-3.10.2/src/Text/Pandoc/Readers/RTF.hs
-formatted       955d2e3df5d4  pandoc-3.10.2/src/Text/Pandoc/Readers/Roff.hs
-formatted       a8d91c97594d  pandoc-3.10.2/src/Text/Pandoc/Readers/Roff/Escape.hs
-formatted       38145b00e92b  pandoc-3.10.2/src/Text/Pandoc/Readers/TWiki.hs
-formatted       a6cf06abeac2  pandoc-3.10.2/src/Text/Pandoc/Readers/Textile.hs
-formatted       64ebaf0c8d6d  pandoc-3.10.2/src/Text/Pandoc/Readers/TikiWiki.hs
-formatted       00edc33e277f  pandoc-3.10.2/src/Text/Pandoc/Readers/Txt2Tags.hs
-formatted       9dbc78144769  pandoc-3.10.2/src/Text/Pandoc/Readers/Typst.hs
-formatted       2f111f50b7d1  pandoc-3.10.2/src/Text/Pandoc/Readers/Typst/Math.hs
-formatted       45263032cedf  pandoc-3.10.2/src/Text/Pandoc/Readers/Typst/Parsing.hs
-formatted       b3509cf614af  pandoc-3.10.2/src/Text/Pandoc/Readers/Vimwiki.hs
-formatted       5b0aec20be18  pandoc-3.10.2/src/Text/Pandoc/Readers/XML.hs
-formatted       6da1519e9667  pandoc-3.10.2/src/Text/Pandoc/Readers/Xlsx.hs
-formatted       835a84d727ab  pandoc-3.10.2/src/Text/Pandoc/Readers/Xlsx/Cells.hs
-formatted       da7c96257b3c  pandoc-3.10.2/src/Text/Pandoc/Readers/Xlsx/Parse.hs
-formatted       cec0a64a8f3d  pandoc-3.10.2/src/Text/Pandoc/Readers/Xlsx/Sheets.hs
-formatted       a3abe5c4303a  pandoc-3.10.2/src/Text/Pandoc/RoffChar.hs
-formatted       3b2c2c8b4a58  pandoc-3.10.2/src/Text/Pandoc/Scripting.hs
-formatted       9a1066febe5c  pandoc-3.10.2/src/Text/Pandoc/SelfContained.hs
-formatted       31da664c4c88  pandoc-3.10.2/src/Text/Pandoc/Shared.hs
-formatted       172e62890a2c  pandoc-3.10.2/src/Text/Pandoc/Slides.hs
-formatted       fac36a909e04  pandoc-3.10.2/src/Text/Pandoc/Sources.hs
-formatted       4723b914e051  pandoc-3.10.2/src/Text/Pandoc/TeX.hs
-formatted       b778b3bd0b9d  pandoc-3.10.2/src/Text/Pandoc/Templates.hs
-formatted       e7f689faf2da  pandoc-3.10.2/src/Text/Pandoc/Transforms.hs
-formatted       fbd643d9a8d0  pandoc-3.10.2/src/Text/Pandoc/Translations.hs
-formatted       de44be6d90ad  pandoc-3.10.2/src/Text/Pandoc/Translations/Types.hs
-formatted       e8b9d88b67b0  pandoc-3.10.2/src/Text/Pandoc/URI.hs
-formatted       4aa82cbc83c8  pandoc-3.10.2/src/Text/Pandoc/UTF8.hs
-formatted       e958a4d78635  pandoc-3.10.2/src/Text/Pandoc/UUID.hs
-formatted       c4b212f4e18f  pandoc-3.10.2/src/Text/Pandoc/Version.hs
-formatted       64127df72dfc  pandoc-3.10.2/src/Text/Pandoc/Writers.hs
-formatted       eb7cc09ed150  pandoc-3.10.2/src/Text/Pandoc/Writers/ANSI.hs
-formatted       a5a598c6ebd6  pandoc-3.10.2/src/Text/Pandoc/Writers/AnnotatedTable.hs
-formatted       a752406eebfa  pandoc-3.10.2/src/Text/Pandoc/Writers/AsciiDoc.hs
-formatted       9f7f40cd3260  pandoc-3.10.2/src/Text/Pandoc/Writers/BBCode.hs
-formatted       74bebaa57c03  pandoc-3.10.2/src/Text/Pandoc/Writers/BibTeX.hs
-formatted       c3a3e99a6a7b  pandoc-3.10.2/src/Text/Pandoc/Writers/Blaze.hs
-formatted       2afa2a035da6  pandoc-3.10.2/src/Text/Pandoc/Writers/ChunkedHTML.hs
-formatted       936b3d7e333a  pandoc-3.10.2/src/Text/Pandoc/Writers/CommonMark.hs
-formatted       5380c20c8b47  pandoc-3.10.2/src/Text/Pandoc/Writers/ConTeXt.hs
-formatted       d9b0707d098c  pandoc-3.10.2/src/Text/Pandoc/Writers/CslJson.hs
-formatted       22ad2f699b3c  pandoc-3.10.2/src/Text/Pandoc/Writers/Djot.hs
-formatted       45e80a32da2f  pandoc-3.10.2/src/Text/Pandoc/Writers/DocBook.hs
-formatted       f9b453669273  pandoc-3.10.2/src/Text/Pandoc/Writers/Docx.hs
-formatted       178a9f4e8f5b  pandoc-3.10.2/src/Text/Pandoc/Writers/Docx/OpenXML.hs
-formatted       3c521e018180  pandoc-3.10.2/src/Text/Pandoc/Writers/Docx/StyleMap.hs
-formatted       e75d942f93e2  pandoc-3.10.2/src/Text/Pandoc/Writers/Docx/Table.hs
-formatted       c18d8fc12f6b  pandoc-3.10.2/src/Text/Pandoc/Writers/Docx/Types.hs
-formatted       1a9e5464ba71  pandoc-3.10.2/src/Text/Pandoc/Writers/DokuWiki.hs
-formatted       e2c1380dcce6  pandoc-3.10.2/src/Text/Pandoc/Writers/EPUB.hs
-formatted       77cb32a02d14  pandoc-3.10.2/src/Text/Pandoc/Writers/FB2.hs
-formatted       c4b4f9d5a6e4  pandoc-3.10.2/src/Text/Pandoc/Writers/GridTable.hs
-formatted       8049d235acfb  pandoc-3.10.2/src/Text/Pandoc/Writers/HTML.hs
-formatted       41b62b0da79a  pandoc-3.10.2/src/Text/Pandoc/Writers/Haddock.hs
-formatted       b546180b4522  pandoc-3.10.2/src/Text/Pandoc/Writers/ICML.hs
-formatted       66a1ea7e86c8  pandoc-3.10.2/src/Text/Pandoc/Writers/Ipynb.hs
-formatted       94c2c79c2e7d  pandoc-3.10.2/src/Text/Pandoc/Writers/JATS.hs
-formatted       4a683f5d9700  pandoc-3.10.2/src/Text/Pandoc/Writers/JATS/References.hs
-formatted       1141a590a5a6  pandoc-3.10.2/src/Text/Pandoc/Writers/JATS/Table.hs
-formatted       3aae3967440a  pandoc-3.10.2/src/Text/Pandoc/Writers/JATS/Types.hs
-formatted       d4bd43fd7b4e  pandoc-3.10.2/src/Text/Pandoc/Writers/Jira.hs
-formatted       a1b3438d0207  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX.hs
-formatted       f67e173fe943  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Caption.hs
-formatted       fc260b26dbb5  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Citation.hs
-formatted       e89e979a29e1  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Lang.hs
-formatted       8c164dd5cc9c  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Notes.hs
-formatted       0043c2edb649  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Table.hs
-formatted       a4eb629d0029  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Types.hs
-formatted       a77d0a8b6cab  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Util.hs
-formatted       dd8b72ea1d45  pandoc-3.10.2/src/Text/Pandoc/Writers/Man.hs
-formatted       0d826f85d47d  pandoc-3.10.2/src/Text/Pandoc/Writers/Markdown.hs
-formatted       9d6fe41d9669  pandoc-3.10.2/src/Text/Pandoc/Writers/Markdown/Inline.hs
-formatted       c57101b9ec66  pandoc-3.10.2/src/Text/Pandoc/Writers/Markdown/Table.hs
-formatted       02c7eb593d88  pandoc-3.10.2/src/Text/Pandoc/Writers/Markdown/Types.hs
-formatted       3d9d722a4e7e  pandoc-3.10.2/src/Text/Pandoc/Writers/Math.hs
-formatted       e3e2e03bc6f6  pandoc-3.10.2/src/Text/Pandoc/Writers/MediaWiki.hs
-formatted       f08666425ec1  pandoc-3.10.2/src/Text/Pandoc/Writers/Ms.hs
-formatted       0b3a871730b6  pandoc-3.10.2/src/Text/Pandoc/Writers/Muse.hs
-formatted       4acde5355993  pandoc-3.10.2/src/Text/Pandoc/Writers/Native.hs
-formatted       705d62226dba  pandoc-3.10.2/src/Text/Pandoc/Writers/ODT.hs
-formatted       0bd4c0281dd2  pandoc-3.10.2/src/Text/Pandoc/Writers/OOXML.hs
-formatted       0a04485cd0b6  pandoc-3.10.2/src/Text/Pandoc/Writers/OPML.hs
-formatted       38c7390489d7  pandoc-3.10.2/src/Text/Pandoc/Writers/OpenDocument.hs
-formatted       461f088c8308  pandoc-3.10.2/src/Text/Pandoc/Writers/Org.hs
-formatted       74e7486aeef1  pandoc-3.10.2/src/Text/Pandoc/Writers/Powerpoint.hs
-formatted       0ee7de5d58d9  pandoc-3.10.2/src/Text/Pandoc/Writers/Powerpoint/Output.hs
-formatted       a991cb709520  pandoc-3.10.2/src/Text/Pandoc/Writers/Powerpoint/Presentation.hs
-formatted       9da06ad78575  pandoc-3.10.2/src/Text/Pandoc/Writers/RST.hs
-formatted       76c4e973a30e  pandoc-3.10.2/src/Text/Pandoc/Writers/RTF.hs
-formatted       d94d420d102a  pandoc-3.10.2/src/Text/Pandoc/Writers/Roff.hs
-formatted       170dad242971  pandoc-3.10.2/src/Text/Pandoc/Writers/Shared.hs
-formatted       966f9f568486  pandoc-3.10.2/src/Text/Pandoc/Writers/TEI.hs
-formatted       da5f7182e705  pandoc-3.10.2/src/Text/Pandoc/Writers/Texinfo.hs
-formatted       df1a1a706a3d  pandoc-3.10.2/src/Text/Pandoc/Writers/Textile.hs
-formatted       9ea50cc6925a  pandoc-3.10.2/src/Text/Pandoc/Writers/Txt2Tags.hs
-formatted       745407966672  pandoc-3.10.2/src/Text/Pandoc/Writers/Typst.hs
-formatted       9df037d0e0af  pandoc-3.10.2/src/Text/Pandoc/Writers/Vimdoc.hs
-formatted       e34d3122403b  pandoc-3.10.2/src/Text/Pandoc/Writers/XML.hs
-formatted       a11946cf7174  pandoc-3.10.2/src/Text/Pandoc/Writers/XWiki.hs
-formatted       1ee6529c659c  pandoc-3.10.2/src/Text/Pandoc/Writers/ZimWiki.hs
-formatted       c0bf42044a17  pandoc-3.10.2/src/Text/Pandoc/XML.hs
-formatted       29da3381e068  pandoc-3.10.2/src/Text/Pandoc/XMLFormat.hs
-formatted       9533e4f4b6c4  pandoc-3.10.2/test/Tests/Command.hs
-formatted       44e0d3fa8621  pandoc-3.10.2/test/Tests/Helpers.hs
-formatted       08a6d3f3d84f  pandoc-3.10.2/test/Tests/MediaBag.hs
-formatted       58f15e3f067a  pandoc-3.10.2/test/Tests/Old.hs
-formatted       7b96b4d20921  pandoc-3.10.2/test/Tests/Readers/Creole.hs
-formatted       0e634958fc8c  pandoc-3.10.2/test/Tests/Readers/Docx.hs
-formatted       dc0961425873  pandoc-3.10.2/test/Tests/Readers/DokuWiki.hs
-formatted       150d1390d716  pandoc-3.10.2/test/Tests/Readers/EPUB.hs
-formatted       b786e572a74c  pandoc-3.10.2/test/Tests/Readers/FB2.hs
-formatted       fa79877906a8  pandoc-3.10.2/test/Tests/Readers/HTML.hs
-formatted       a047fe6e2033  pandoc-3.10.2/test/Tests/Readers/JATS.hs
-formatted       3ee2ef6dea11  pandoc-3.10.2/test/Tests/Readers/Jira.hs
-formatted       e617bc68c809  pandoc-3.10.2/test/Tests/Readers/LaTeX.hs
-formatted       54c9a9360dac  pandoc-3.10.2/test/Tests/Readers/Man.hs
-formatted       67e0bd9ae4b8  pandoc-3.10.2/test/Tests/Readers/Markdown.hs
-formatted       7aec4f85c064  pandoc-3.10.2/test/Tests/Readers/Mdoc.hs
-formatted       96cc9670fdfb  pandoc-3.10.2/test/Tests/Readers/Muse.hs
-formatted       6d5ec7415c5d  pandoc-3.10.2/test/Tests/Readers/ODT.hs
-formatted       4cec297f4fab  pandoc-3.10.2/test/Tests/Readers/Org.hs
-formatted       e5c1db2d073f  pandoc-3.10.2/test/Tests/Readers/Org/Block.hs
-formatted       b4b9cddd5711  pandoc-3.10.2/test/Tests/Readers/Org/Block/CodeBlock.hs
-formatted       8bfbfbb823bf  pandoc-3.10.2/test/Tests/Readers/Org/Block/Figure.hs
-formatted       1db2ce6020c8  pandoc-3.10.2/test/Tests/Readers/Org/Block/Header.hs
-formatted       ac82b8a4a7bf  pandoc-3.10.2/test/Tests/Readers/Org/Block/List.hs
-formatted       3e9d7a83d060  pandoc-3.10.2/test/Tests/Readers/Org/Block/Table.hs
-formatted       5f3808eb1a55  pandoc-3.10.2/test/Tests/Readers/Org/Directive.hs
-formatted       bfd915a68797  pandoc-3.10.2/test/Tests/Readers/Org/Inline.hs
-formatted       c762e1d74166  pandoc-3.10.2/test/Tests/Readers/Org/Inline/Citation.hs
-formatted       b2fb48f770ee  pandoc-3.10.2/test/Tests/Readers/Org/Inline/Note.hs
-formatted       1ab451370fda  pandoc-3.10.2/test/Tests/Readers/Org/Inline/Smart.hs
-formatted       06c0169c3199  pandoc-3.10.2/test/Tests/Readers/Org/Meta.hs
-formatted       b1b4397e99d3  pandoc-3.10.2/test/Tests/Readers/Org/Shared.hs
-formatted       1eb1a05f4635  pandoc-3.10.2/test/Tests/Readers/Pod.hs
-formatted       7f0ab3cbdf98  pandoc-3.10.2/test/Tests/Readers/Pptx.hs
-formatted       3b5a69d54626  pandoc-3.10.2/test/Tests/Readers/RST.hs
-formatted       525c19538ad3  pandoc-3.10.2/test/Tests/Readers/RTF.hs
-formatted       aca713b17e29  pandoc-3.10.2/test/Tests/Readers/Txt2Tags.hs
-formatted       15bd1659725f  pandoc-3.10.2/test/Tests/Readers/Xlsx.hs
-formatted       2692dc26ee41  pandoc-3.10.2/test/Tests/Shared.hs
-formatted       ad523df96992  pandoc-3.10.2/test/Tests/Writers/AnnotatedTable.hs
-formatted       b21e7e06def4  pandoc-3.10.2/test/Tests/Writers/AsciiDoc.hs
-formatted       70088c61a9f3  pandoc-3.10.2/test/Tests/Writers/BBCode.hs
-formatted       98cca991f01d  pandoc-3.10.2/test/Tests/Writers/ConTeXt.hs
-formatted       59de8eac5d46  pandoc-3.10.2/test/Tests/Writers/DocBook.hs
-formatted       648f15c3487d  pandoc-3.10.2/test/Tests/Writers/Docx.hs
-formatted       c93a204195d1  pandoc-3.10.2/test/Tests/Writers/FB2.hs
-formatted       8485eb418c1f  pandoc-3.10.2/test/Tests/Writers/HTML.hs
-formatted       864ccac4606e  pandoc-3.10.2/test/Tests/Writers/JATS.hs
-formatted       f691886863f7  pandoc-3.10.2/test/Tests/Writers/Jira.hs
-formatted       2c7232780cd3  pandoc-3.10.2/test/Tests/Writers/LaTeX.hs
-formatted       0d9dc37df4e1  pandoc-3.10.2/test/Tests/Writers/Markdown.hs
-formatted       c8345b0f787e  pandoc-3.10.2/test/Tests/Writers/Markua.hs
-formatted       fb4d32e30070  pandoc-3.10.2/test/Tests/Writers/Ms.hs
-formatted       53258d5a9e50  pandoc-3.10.2/test/Tests/Writers/Muse.hs
-formatted       f2f1ca1b8764  pandoc-3.10.2/test/Tests/Writers/Native.hs
-formatted       16780a5a789f  pandoc-3.10.2/test/Tests/Writers/OOXML.hs
-formatted       3033600cbe42  pandoc-3.10.2/test/Tests/Writers/Org.hs
-formatted       0e4b414e2dea  pandoc-3.10.2/test/Tests/Writers/Plain.hs
-formatted       e496fc51153d  pandoc-3.10.2/test/Tests/Writers/Powerpoint.hs
-formatted       9d6e4a5505a1  pandoc-3.10.2/test/Tests/Writers/RST.hs
-formatted       7f7f9e6de407  pandoc-3.10.2/test/Tests/Writers/TEI.hs
-formatted       9286c785c97e  pandoc-3.10.2/test/Tests/Writers/Txt2Tags.hs
-formatted       ad01bdc72c8e  pandoc-3.10.2/test/Tests/XML.hs
-formatted       16057c777a9d  pandoc-3.10.2/test/command/3510-src.hs
-formatted       3f023b0abbe3  pandoc-3.10.2/test/command/6466-beg.hs
-formatted       06289f98fcac  pandoc-3.10.2/test/command/6466-end.hs
-formatted       546301610b9b  pandoc-3.10.2/test/command/6466-mid.hs
-formatted       b6f515e00962  pandoc-3.10.2/test/command/6466-whole.hs
-formatted       53aaf2e2c6e0  pandoc-3.10.2/test/test-pandoc.hs
-formatted       2556d5cb9f72  pandoc-3.10.2/xml-light/Text/Pandoc/XML/Light.hs
-formatted       d13fc87f4907  pandoc-3.10.2/xml-light/Text/Pandoc/XML/Light/Output.hs
-formatted       3f7a60f285f2  pandoc-3.10.2/xml-light/Text/Pandoc/XML/Light/Proc.hs
-formatted       11f398c0d479  pandoc-3.10.2/xml-light/Text/Pandoc/XML/Light/Types.hs
-formatted       e865ae48f11b  pandoc-types-1.23.1.2/Setup.hs
-formatted       8376040e03f4  pandoc-types-1.23.1.2/benchmark/bench.hs
-formatted       8e6368ed5c21  pandoc-types-1.23.1.2/src/Text/Pandoc/Arbitrary.hs
-formatted       23cfca937427  pandoc-types-1.23.1.2/src/Text/Pandoc/Builder.hs
-formatted       041d27bf9170  pandoc-types-1.23.1.2/src/Text/Pandoc/Definition.hs
-formatted       42a13347f367  pandoc-types-1.23.1.2/src/Text/Pandoc/Generic.hs
-formatted       8fad29f2adc4  pandoc-types-1.23.1.2/src/Text/Pandoc/JSON.hs
-formatted       3e061e7b176e  pandoc-types-1.23.1.2/src/Text/Pandoc/Walk.hs
-formatted       dcf10d45e788  pandoc-types-1.23.1.2/test/Data/String/QQ.hs
-formatted       25a6ff086c83  pandoc-types-1.23.1.2/test/test-pandoc-types.hs
-formatted       7474b7e1d4f5  parsec3-1.0.1.8/Setup.hs
-formatted       48d72ad7fc59  parsec3-1.0.1.8/Text/Parsec.hs
-formatted       afc3d5a902fe  parsec3-1.0.1.8/Text/Parsec/ByteString.hs
-formatted       a9c7a6dd5b30  parsec3-1.0.1.8/Text/Parsec/ByteString/Lazy.hs
-formatted       5e6bdea20cf6  parsec3-1.0.1.8/Text/Parsec/Char.hs
-formatted       4abab8f9ceb8  parsec3-1.0.1.8/Text/Parsec/Combinator.hs
-formatted       94a0c2798c5a  parsec3-1.0.1.8/Text/Parsec/Error.hs
-formatted       048c32e5a768  parsec3-1.0.1.8/Text/Parsec/Expr.hs
-formatted       156014d6ed26  parsec3-1.0.1.8/Text/Parsec/Language.hs
-formatted       40bf4d018d51  parsec3-1.0.1.8/Text/Parsec/Perm.hs
-formatted       c50efff79fe5  parsec3-1.0.1.8/Text/Parsec/Pos.hs
-formatted       1d4feb99b3e8  parsec3-1.0.1.8/Text/Parsec/Prim.hs
-formatted       c911dc63e8d5  parsec3-1.0.1.8/Text/Parsec/String.hs
-formatted       72422924874a  parsec3-1.0.1.8/Text/Parsec/Text.hs
-formatted       6fd69590f1d3  parsec3-1.0.1.8/Text/Parsec/Text/Lazy.hs
-formatted       b6e8b0e16d14  parsec3-1.0.1.8/Text/Parsec/Token.hs
-formatted       22b02f116512  parser-combinators-1.3.1/Control/Applicative/Combinators.hs
-formatted       2b483a550d21  parser-combinators-1.3.1/Control/Applicative/Combinators/NonEmpty.hs
-formatted       7d01c0dddfcd  parser-combinators-1.3.1/Control/Applicative/Permutations.hs
-formatted       80eb76464ce8  parser-combinators-1.3.1/Control/Monad/Combinators.hs
-formatted       203c01d41bb8  parser-combinators-1.3.1/Control/Monad/Combinators/Expr.hs
-formatted       f63c3b21684d  parser-combinators-1.3.1/Control/Monad/Combinators/NonEmpty.hs
-formatted       2ce12720b575  parser-combinators-1.3.1/Control/Monad/Permutations.hs
-formatted       4c7a2ed66fb7  persistent-2.18.1.0/Database/Persist.hs
-formatted       af7417196697  persistent-2.18.1.0/Database/Persist/Class.hs
-formatted       a62cb576f4b1  persistent-2.18.1.0/Database/Persist/Class/PersistConfig.hs
-formatted       56f625ad1ea2  persistent-2.18.1.0/Database/Persist/Class/PersistEntity.hs
-formatted       63c55d24c1a6  persistent-2.18.1.0/Database/Persist/Class/PersistField.hs
-formatted       4229d83e727f  persistent-2.18.1.0/Database/Persist/Class/PersistQuery.hs
-formatted       194836df1fd0  persistent-2.18.1.0/Database/Persist/Class/PersistStore.hs
-formatted       c7df1c76c273  persistent-2.18.1.0/Database/Persist/Class/PersistUnique.hs
-formatted       8411f5f4d556  persistent-2.18.1.0/Database/Persist/Compatible.hs
-formatted       40afca283a80  persistent-2.18.1.0/Database/Persist/Compatible/TH.hs
-formatted       f77b6e49e3d3  persistent-2.18.1.0/Database/Persist/Compatible/Types.hs
-formatted       4da910742f5d  persistent-2.18.1.0/Database/Persist/EntityDef.hs
-formatted       849d0a429195  persistent-2.18.1.0/Database/Persist/EntityDef/Internal.hs
-formatted       8b9538a7e637  persistent-2.18.1.0/Database/Persist/FieldDef.hs
-formatted       ab8743cef9ef  persistent-2.18.1.0/Database/Persist/FieldDef/Internal.hs
-formatted       62ee350971e4  persistent-2.18.1.0/Database/Persist/ImplicitIdDef.hs
-formatted       9051746eba78  persistent-2.18.1.0/Database/Persist/ImplicitIdDef/Internal.hs
-formatted       4002aeb84669  persistent-2.18.1.0/Database/Persist/Names.hs
-formatted       67c816fd5b28  persistent-2.18.1.0/Database/Persist/PersistValue.hs
-formatted       3b8981721873  persistent-2.18.1.0/Database/Persist/Quasi.hs
-formatted       bf1548cc69c8  persistent-2.18.1.0/Database/Persist/Quasi/Internal.hs
-formatted       cabfd6b48df2  persistent-2.18.1.0/Database/Persist/Quasi/Internal/ModelParser.hs
-formatted       7c334061474c  persistent-2.18.1.0/Database/Persist/Quasi/Internal/TypeParser.hs
-formatted       21110acf54fd  persistent-2.18.1.0/Database/Persist/Quasi/PersistSettings.hs
-formatted       a65ab8f1929f  persistent-2.18.1.0/Database/Persist/Quasi/PersistSettings/Internal.hs
-formatted       a2208d509db2  persistent-2.18.1.0/Database/Persist/Sql.hs
-formatted       5eb8c1f034c5  persistent-2.18.1.0/Database/Persist/Sql/Class.hs
-formatted       ccfe7e6d9996  persistent-2.18.1.0/Database/Persist/Sql/Internal.hs
-formatted       8961bf4b32ff  persistent-2.18.1.0/Database/Persist/Sql/Migration.hs
-formatted       7e371de867be  persistent-2.18.1.0/Database/Persist/Sql/Orphan/PersistQuery.hs
-formatted       e01289d09a16  persistent-2.18.1.0/Database/Persist/Sql/Orphan/PersistStore.hs
-formatted       423a6f1ddcbf  persistent-2.18.1.0/Database/Persist/Sql/Orphan/PersistUnique.hs
-formatted       4da2e4b129cc  persistent-2.18.1.0/Database/Persist/Sql/Raw.hs
-formatted       9376d473879f  persistent-2.18.1.0/Database/Persist/Sql/Run.hs
-formatted       e899729d586e  persistent-2.18.1.0/Database/Persist/Sql/Types.hs
-formatted       39dcf72b8d4a  persistent-2.18.1.0/Database/Persist/Sql/Types/Internal.hs
-formatted       b8d70cb7744c  persistent-2.18.1.0/Database/Persist/Sql/Util.hs
-formatted       9535b7d9a001  persistent-2.18.1.0/Database/Persist/SqlBackend.hs
-formatted       e5f2ff2dc144  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal.hs
-formatted       47acc3733907  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/InsertSqlResult.hs
-formatted       4bd5d30fe421  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/IsolationLevel.hs
-formatted       c8a378801422  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/MkSqlBackend.hs
-formatted       945521fad6a2  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/SqlPoolHooks.hs
-formatted       4e0a2509487b  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/Statement.hs
-formatted       1710f992776b  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/StatementCache.hs
-formatted       4304cc0b95bf  persistent-2.18.1.0/Database/Persist/SqlBackend/SqlPoolHooks.hs
-formatted       081bf168d849  persistent-2.18.1.0/Database/Persist/SqlBackend/StatementCache.hs
-formatted       c43972a3241b  persistent-2.18.1.0/Database/Persist/TH.hs
-formatted       a484cb2adef0  persistent-2.18.1.0/Database/Persist/TH/Internal.hs
-formatted       3eb1ab75fbdf  persistent-2.18.1.0/Database/Persist/Types.hs
-formatted       602702e0f86e  persistent-2.18.1.0/Database/Persist/Types/Base.hs
-formatted       b8189bc0e07d  persistent-2.18.1.0/Database/Persist/Types/SourceSpan.hs
-formatted       1aec50d3544f  persistent-2.18.1.0/bench/Main.hs
-formatted       d4e78e3f895b  persistent-2.18.1.0/bench/Models.hs
-formatted       1e8c8c93c976  persistent-2.18.1.0/test/Database/Persist/ClassSpec.hs
-formatted       6082a8164f41  persistent-2.18.1.0/test/Database/Persist/PersistValueSpec.hs
-formatted       906326245f86  persistent-2.18.1.0/test/Database/Persist/QuasiSpec.hs
-formatted       8882f34c07fe  persistent-2.18.1.0/test/Database/Persist/TH/CommentSpec.hs
-formatted       d773a41935ea  persistent-2.18.1.0/test/Database/Persist/TH/CompositeKeyStyleSpec.hs
-formatted       f9f4014951e3  persistent-2.18.1.0/test/Database/Persist/TH/DiscoverEntitiesSpec.hs
-formatted       c444c6731179  persistent-2.18.1.0/test/Database/Persist/TH/EmbedSpec.hs
-formatted       bf23d25d4982  persistent-2.18.1.0/test/Database/Persist/TH/EntityHaddockSpec.hs
-formatted       4f00a9a51fee  persistent-2.18.1.0/test/Database/Persist/TH/ForeignRefSpec.hs
-formatted       0c3421ff2893  persistent-2.18.1.0/test/Database/Persist/TH/ImplicitIdColSpec.hs
-formatted       6d733cdba565  persistent-2.18.1.0/test/Database/Persist/TH/JsonEncodingSpec.hs
-formatted       8adfe4a4228d  persistent-2.18.1.0/test/Database/Persist/TH/KindEntitiesSpec.hs
-formatted       5aacd109f219  persistent-2.18.1.0/test/Database/Persist/TH/KindEntitiesSpecImports.hs
-formatted       95ba90d362da  persistent-2.18.1.0/test/Database/Persist/TH/MaybeFieldDefsSpec.hs
-formatted       c4b2085e7249  persistent-2.18.1.0/test/Database/Persist/TH/MigrationOnlySpec.hs
-formatted       dbad9d8d922f  persistent-2.18.1.0/test/Database/Persist/TH/MultiBlockSpec.hs
-formatted       b776165f7ac3  persistent-2.18.1.0/test/Database/Persist/TH/MultiBlockSpec/Model.hs
-formatted       baa7f67273ec  persistent-2.18.1.0/test/Database/Persist/TH/NestedSymbolsInTypeSpec.hs
-formatted       f0e370f995e7  persistent-2.18.1.0/test/Database/Persist/TH/NestedSymbolsInTypeSpecImports.hs
-formatted       16ab595a1cc4  persistent-2.18.1.0/test/Database/Persist/TH/NoFieldSelectorsSpec.hs
-formatted       e227905a242e  persistent-2.18.1.0/test/Database/Persist/TH/OverloadedLabelSpec.hs
-formatted       ad712bcac46e  persistent-2.18.1.0/test/Database/Persist/TH/PersistWith/Model.hs
-formatted       8d58beb8b33c  persistent-2.18.1.0/test/Database/Persist/TH/PersistWith/Model2.hs
-formatted       a7b8dff135f1  persistent-2.18.1.0/test/Database/Persist/TH/PersistWithSpec.hs
-formatted       7b6cf72d5ecc  persistent-2.18.1.0/test/Database/Persist/TH/RequireOnlyPersistImportSpec.hs
-formatted       9a0756832b2d  persistent-2.18.1.0/test/Database/Persist/TH/SharedPrimaryKeyImportedSpec.hs
-formatted       885e1164f19c  persistent-2.18.1.0/test/Database/Persist/TH/SharedPrimaryKeySpec.hs
-formatted       145463b36f4d  persistent-2.18.1.0/test/Database/Persist/TH/SumSpec.hs
-formatted       e6bfe40fd881  persistent-2.18.1.0/test/Database/Persist/TH/ToFromPersistValuesSpec.hs
-formatted       a18bfc6474db  persistent-2.18.1.0/test/Database/Persist/TH/TypeLitFieldDefsSpec.hs
-formatted       634967bdd99d  persistent-2.18.1.0/test/Database/Persist/THSpec.hs
-formatted       f9304e426550  persistent-2.18.1.0/test/TemplateTestImports.hs
-formatted       7f05465b25d5  persistent-2.18.1.0/test/main.hs
-formatted       e865ae48f11b  pipes-4.3.16/Setup.hs
-formatted       bc3b140ba83c  pipes-4.3.16/benchmarks/Common.hs
-formatted       e459e4d124d4  pipes-4.3.16/benchmarks/LiftBench.hs
-formatted       d100cca123ea  pipes-4.3.16/benchmarks/PreludeBench.hs
-formatted       c30da8c52f2b  pipes-4.3.16/src/Pipes.hs
-formatted       332e8aaad352  pipes-4.3.16/src/Pipes/Core.hs
-formatted       e021398dbff3  pipes-4.3.16/src/Pipes/Internal.hs
-formatted       e3b36f0685b2  pipes-4.3.16/src/Pipes/Lift.hs
-formatted       82bba5f85292  pipes-4.3.16/src/Pipes/Prelude.hs
-formatted       436224de8a77  pipes-4.3.16/src/Pipes/Tutorial.hs
-formatted       6ca40cc862a8  pipes-4.3.16/tests/Main.hs
-formatted       56dca68e0a87  postgrest-9.0.1/Setup.hs
-formatted       772d4f353686  postgrest-9.0.1/main/Main.hs
-formatted       bd3eb89beb11  postgrest-9.0.1/src/PostgREST/App.hs
-formatted       aeefa441d9ea  postgrest-9.0.1/src/PostgREST/AppState.hs
-formatted       fa5f086364f2  postgrest-9.0.1/src/PostgREST/Auth.hs
-formatted       f42af00966e2  postgrest-9.0.1/src/PostgREST/CLI.hs
-formatted       41c49c80f153  postgrest-9.0.1/src/PostgREST/Config.hs
-formatted       26e0ccfa04f8  postgrest-9.0.1/src/PostgREST/Config/Database.hs
-formatted       9632241317fd  postgrest-9.0.1/src/PostgREST/Config/JSPath.hs
-formatted       b719e278251b  postgrest-9.0.1/src/PostgREST/Config/PgVersion.hs
-formatted       4f3444c0a949  postgrest-9.0.1/src/PostgREST/Config/Proxy.hs
-formatted       65c66f863629  postgrest-9.0.1/src/PostgREST/ContentType.hs
-formatted       9200d4931d04  postgrest-9.0.1/src/PostgREST/Cors.hs
-formatted       4eef76b76acf  postgrest-9.0.1/src/PostgREST/DbStructure.hs
-formatted       a0f5c884d319  postgrest-9.0.1/src/PostgREST/DbStructure/Identifiers.hs
-formatted       28e71accad76  postgrest-9.0.1/src/PostgREST/DbStructure/Proc.hs
-formatted       8670bffe5d4a  postgrest-9.0.1/src/PostgREST/DbStructure/Relationship.hs
-formatted       0951365600a0  postgrest-9.0.1/src/PostgREST/DbStructure/Table.hs
-formatted       50ae92f8d312  postgrest-9.0.1/src/PostgREST/Error.hs
-formatted       f1b82d17eed8  postgrest-9.0.1/src/PostgREST/GucHeader.hs
-formatted       2c6a7ae61af9  postgrest-9.0.1/src/PostgREST/Logger.hs
-formatted       42324fca62e1  postgrest-9.0.1/src/PostgREST/Middleware.hs
-formatted       9b991a36398d  postgrest-9.0.1/src/PostgREST/OpenAPI.hs
-formatted       ccef8516712f  postgrest-9.0.1/src/PostgREST/Query/QueryBuilder.hs
-formatted       491a8b321ce9  postgrest-9.0.1/src/PostgREST/Query/SqlFragment.hs
-formatted       5f4cbf20b7f3  postgrest-9.0.1/src/PostgREST/Query/Statements.hs
-formatted       7d83276a4311  postgrest-9.0.1/src/PostgREST/RangeQuery.hs
-formatted       468dcbe76687  postgrest-9.0.1/src/PostgREST/Request/ApiRequest.hs
-formatted       307adfedde88  postgrest-9.0.1/src/PostgREST/Request/DbRequestBuilder.hs
-formatted       fc3632173741  postgrest-9.0.1/src/PostgREST/Request/Parsers.hs
-formatted       8e710c5836da  postgrest-9.0.1/src/PostgREST/Request/Preferences.hs
-formatted       c051dbc66c29  postgrest-9.0.1/src/PostgREST/Request/Types.hs
-formatted       0c839dec485e  postgrest-9.0.1/src/PostgREST/Unix.hs
-formatted       793800bb054f  postgrest-9.0.1/src/PostgREST/Version.hs
-formatted       2b137fd794c3  postgrest-9.0.1/src/PostgREST/Workers.hs
-formatted       c719f882d27c  postgrest-9.0.1/test/doc/Main.hs
-formatted       5bf94bd709a7  postgrest-9.0.1/test/spec/Feature/AndOrParamsSpec.hs
-formatted       000191b3349e  postgrest-9.0.1/test/spec/Feature/AsymmetricJwtSpec.hs
-formatted       5a86c6233052  postgrest-9.0.1/test/spec/Feature/AudienceJwtSecretSpec.hs
-formatted       acbe9362314e  postgrest-9.0.1/test/spec/Feature/AuthSpec.hs
-formatted       7cb71699f728  postgrest-9.0.1/test/spec/Feature/BinaryJwtSecretSpec.hs
-formatted       2fb433681c01  postgrest-9.0.1/test/spec/Feature/ConcurrentSpec.hs
-formatted       db553e991f45  postgrest-9.0.1/test/spec/Feature/CorsSpec.hs
-formatted       343d3e3a465e  postgrest-9.0.1/test/spec/Feature/DeleteSpec.hs
-formatted       112082d3da25  postgrest-9.0.1/test/spec/Feature/DisabledOpenApiSpec.hs
-formatted       ad7384965a9e  postgrest-9.0.1/test/spec/Feature/EmbedDisambiguationSpec.hs
-formatted       f7a7ea3d2a87  postgrest-9.0.1/test/spec/Feature/EmbedInnerJoinSpec.hs
-formatted       a3dddabdb704  postgrest-9.0.1/test/spec/Feature/ExtraSearchPathSpec.hs
-formatted       ff20687cb475  postgrest-9.0.1/test/spec/Feature/HtmlRawOutputSpec.hs
-formatted       c2e75b5529a0  postgrest-9.0.1/test/spec/Feature/IgnorePrivOpenApiSpec.hs
-formatted       ea599ebfe99c  postgrest-9.0.1/test/spec/Feature/InsertSpec.hs
-formatted       9264b830952f  postgrest-9.0.1/test/spec/Feature/JsonOperatorSpec.hs
-formatted       12271bc52ad6  postgrest-9.0.1/test/spec/Feature/LegacyGucsSpec.hs
-formatted       5228aaf9349c  postgrest-9.0.1/test/spec/Feature/MultipleSchemaSpec.hs
-formatted       3e8b6471e229  postgrest-9.0.1/test/spec/Feature/NoJwtSpec.hs
-formatted       a7144a84ab24  postgrest-9.0.1/test/spec/Feature/NonexistentSchemaSpec.hs
-formatted       f7d94a10d9ad  postgrest-9.0.1/test/spec/Feature/OpenApiSpec.hs
-formatted       1b9c2f6f5c75  postgrest-9.0.1/test/spec/Feature/OptionsSpec.hs
-formatted       89a1589ff0fe  postgrest-9.0.1/test/spec/Feature/ProxySpec.hs
-formatted       4e889783f9ba  postgrest-9.0.1/test/spec/Feature/QueryLimitedSpec.hs
-formatted       f305fa66460e  postgrest-9.0.1/test/spec/Feature/QuerySpec.hs
-formatted       146347d5ddec  postgrest-9.0.1/test/spec/Feature/RangeSpec.hs
-formatted       7cb746560127  postgrest-9.0.1/test/spec/Feature/RawOutputTypesSpec.hs
-formatted       b4a3ab5a81a9  postgrest-9.0.1/test/spec/Feature/RollbackSpec.hs
-formatted       dc5321d79fb3  postgrest-9.0.1/test/spec/Feature/RootSpec.hs
-formatted       77a649eeb2e6  postgrest-9.0.1/test/spec/Feature/RpcPreRequestGucsSpec.hs
-formatted       3a4705fe539d  postgrest-9.0.1/test/spec/Feature/RpcSpec.hs
-formatted       73c0ab518a3d  postgrest-9.0.1/test/spec/Feature/SingularSpec.hs
-formatted       be03de84804f  postgrest-9.0.1/test/spec/Feature/UnicodeSpec.hs
-formatted       162dade8a566  postgrest-9.0.1/test/spec/Feature/UpdateSpec.hs
-formatted       55bb47ad8764  postgrest-9.0.1/test/spec/Feature/UpsertSpec.hs
-formatted       7a9dd3383794  postgrest-9.0.1/test/spec/Main.hs
-formatted       f32b163f57d7  postgrest-9.0.1/test/spec/QueryCost.hs
-formatted       ab30ff617540  postgrest-9.0.1/test/spec/SpecHelper.hs
-formatted       c136e6235ce2  postgrest-9.0.1/test/spec/TestTypes.hs
-formatted       13abd8b59335  profunctors-5.6.3/src/Data/Profunctor.hs
-formatted       cd53a440a7f3  profunctors-5.6.3/src/Data/Profunctor/Adjunction.hs
-formatted       604108a2b13e  profunctors-5.6.3/src/Data/Profunctor/Cayley.hs
-formatted       8b5e0d5c4b28  profunctors-5.6.3/src/Data/Profunctor/Choice.hs
-formatted       4a0c88f45f54  profunctors-5.6.3/src/Data/Profunctor/Closed.hs
-formatted       de00ff751f38  profunctors-5.6.3/src/Data/Profunctor/Composition.hs
-formatted       a6085622ae89  profunctors-5.6.3/src/Data/Profunctor/Mapping.hs
-formatted       59b30aaa8b06  profunctors-5.6.3/src/Data/Profunctor/Monad.hs
-formatted       5b7a528834d1  profunctors-5.6.3/src/Data/Profunctor/Ran.hs
-formatted       dc01020464c2  profunctors-5.6.3/src/Data/Profunctor/Rep.hs
-formatted       a405de2f08b4  profunctors-5.6.3/src/Data/Profunctor/Sieve.hs
-formatted       072c0f89a17b  profunctors-5.6.3/src/Data/Profunctor/Strong.hs
-formatted       1c7f87812e16  profunctors-5.6.3/src/Data/Profunctor/Traversing.hs
-formatted       74b9958fedc6  profunctors-5.6.3/src/Data/Profunctor/Types.hs
-formatted       6d4d49816f3c  profunctors-5.6.3/src/Data/Profunctor/Unsafe.hs
-formatted       074b9f00e701  profunctors-5.6.3/src/Data/Profunctor/Yoneda.hs
-formatted       f97b976f5a71  purescript-0.15.15/Setup.hs
-formatted       fc25cc9ab507  purescript-0.15.15/app/Command/Bundle.hs
-formatted       a46f2214fbc8  purescript-0.15.15/app/Command/Compile.hs
-formatted       7219813f0a5c  purescript-0.15.15/app/Command/Docs.hs
-formatted       55df8737ff2c  purescript-0.15.15/app/Command/Docs/Html.hs
-formatted       037036ef66e1  purescript-0.15.15/app/Command/Docs/Markdown.hs
-formatted       eb687ab7bdfe  purescript-0.15.15/app/Command/Graph.hs
-formatted       60131f690f8b  purescript-0.15.15/app/Command/Hierarchy.hs
-formatted       d627a10507ea  purescript-0.15.15/app/Command/Ide.hs
-formatted       2c3998824b51  purescript-0.15.15/app/Command/Publish.hs
-formatted       5ed2f192bfb3  purescript-0.15.15/app/Command/REPL.hs
-formatted       aa128423c4fb  purescript-0.15.15/app/Main.hs
-formatted       8c8cfed900b8  purescript-0.15.15/app/SharedCLI.hs
-formatted       18a85337fa6b  purescript-0.15.15/app/Version.hs
-formatted       ee21446da604  purescript-0.15.15/src/Control/Monad/Logger.hs
-formatted       a06d72dd0adb  purescript-0.15.15/src/Control/Monad/Supply.hs
-formatted       4199e8087c69  purescript-0.15.15/src/Control/Monad/Supply/Class.hs
-formatted       7a4d7979e1c9  purescript-0.15.15/src/Data/Text/PureScript.hs
-formatted       eef5dd037abf  purescript-0.15.15/src/Language/PureScript.hs
-formatted       64c0d4442190  purescript-0.15.15/src/Language/PureScript/AST.hs
-formatted       147dc6ad6c67  purescript-0.15.15/src/Language/PureScript/AST/Binders.hs
-formatted       ebd8d9a20974  purescript-0.15.15/src/Language/PureScript/AST/Declarations.hs
-formatted       0368132e2a7c  purescript-0.15.15/src/Language/PureScript/AST/Declarations/ChainId.hs
-formatted       b8b152a00a9e  purescript-0.15.15/src/Language/PureScript/AST/Exported.hs
-formatted       16c598490b8b  purescript-0.15.15/src/Language/PureScript/AST/Literals.hs
-formatted       6dde4019084f  purescript-0.15.15/src/Language/PureScript/AST/Operators.hs
-formatted       c7ebd057b2a2  purescript-0.15.15/src/Language/PureScript/AST/SourcePos.hs
-formatted       1c8f80e1b700  purescript-0.15.15/src/Language/PureScript/AST/Traversals.hs
-formatted       cb23b5c86a87  purescript-0.15.15/src/Language/PureScript/AST/Utils.hs
-formatted       64329f97de0d  purescript-0.15.15/src/Language/PureScript/Bundle.hs
-formatted       665ede6abf17  purescript-0.15.15/src/Language/PureScript/CST.hs
-formatted       1c47033ea161  purescript-0.15.15/src/Language/PureScript/CST/Convert.hs
-formatted       4c71bba856aa  purescript-0.15.15/src/Language/PureScript/CST/Errors.hs
-formatted       c81c2ecf7ebe  purescript-0.15.15/src/Language/PureScript/CST/Flatten.hs
-formatted       36fe1c70493a  purescript-0.15.15/src/Language/PureScript/CST/Layout.hs
-formatted       cce231cd663a  purescript-0.15.15/src/Language/PureScript/CST/Lexer.hs
-formatted       aa182229b809  purescript-0.15.15/src/Language/PureScript/CST/Monad.hs
-formatted       fa367dbaa6aa  purescript-0.15.15/src/Language/PureScript/CST/Positions.hs
-formatted       2df3a82dec66  purescript-0.15.15/src/Language/PureScript/CST/Print.hs
-formatted       c741805ffed3  purescript-0.15.15/src/Language/PureScript/CST/Traversals.hs
-formatted       81c5d151f932  purescript-0.15.15/src/Language/PureScript/CST/Traversals/Type.hs
-formatted       46dd73253c21  purescript-0.15.15/src/Language/PureScript/CST/Types.hs
-formatted       2bdb1cb651fc  purescript-0.15.15/src/Language/PureScript/CST/Utils.hs
-formatted       ebd74707d2df  purescript-0.15.15/src/Language/PureScript/CodeGen.hs
-formatted       f9bd11aadd08  purescript-0.15.15/src/Language/PureScript/CodeGen/JS.hs
-formatted       f10bc54be3c8  purescript-0.15.15/src/Language/PureScript/CodeGen/JS/Common.hs
-formatted       9f17f1c77074  purescript-0.15.15/src/Language/PureScript/CodeGen/JS/Printer.hs
-formatted       acabda342dbe  purescript-0.15.15/src/Language/PureScript/Comments.hs
-formatted       7e1454fed47d  purescript-0.15.15/src/Language/PureScript/Constants/Libs.hs
-formatted       4e84deb1970c  purescript-0.15.15/src/Language/PureScript/Constants/Prim.hs
-formatted       08cf8657b87b  purescript-0.15.15/src/Language/PureScript/Constants/TH.hs
-formatted       0e372eb9e534  purescript-0.15.15/src/Language/PureScript/CoreFn.hs
-formatted       c133879c858f  purescript-0.15.15/src/Language/PureScript/CoreFn/Ann.hs
-formatted       2556afbb3bea  purescript-0.15.15/src/Language/PureScript/CoreFn/Binders.hs
-formatted       1141b43d30ff  purescript-0.15.15/src/Language/PureScript/CoreFn/CSE.hs
-formatted       6cbe0845ef8c  purescript-0.15.15/src/Language/PureScript/CoreFn/Desugar.hs
-formatted       2f90c3840d55  purescript-0.15.15/src/Language/PureScript/CoreFn/Expr.hs
-formatted       8464185844d4  purescript-0.15.15/src/Language/PureScript/CoreFn/FromJSON.hs
-formatted       1ee1c24577da  purescript-0.15.15/src/Language/PureScript/CoreFn/Laziness.hs
-formatted       083a81cbf5bf  purescript-0.15.15/src/Language/PureScript/CoreFn/Meta.hs
-formatted       2b2d42f479f2  purescript-0.15.15/src/Language/PureScript/CoreFn/Module.hs
-formatted       8a65378bdb7b  purescript-0.15.15/src/Language/PureScript/CoreFn/Optimizer.hs
-formatted       a01b08124299  purescript-0.15.15/src/Language/PureScript/CoreFn/ToJSON.hs
-formatted       74e775f771b9  purescript-0.15.15/src/Language/PureScript/CoreFn/Traversals.hs
-formatted       63122a31d5b9  purescript-0.15.15/src/Language/PureScript/CoreImp.hs
-formatted       b1fad463eff6  purescript-0.15.15/src/Language/PureScript/CoreImp/AST.hs
-formatted       07f8248f1a4c  purescript-0.15.15/src/Language/PureScript/CoreImp/Module.hs
-formatted       76a5683510a3  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer.hs
-formatted       900e45f47ef2  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/Blocks.hs
-formatted       635c6dcfbee9  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/Common.hs
-formatted       458709d8b573  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/Inliner.hs
-formatted       d416fbf811c6  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/MagicDo.hs
-formatted       3a758985a163  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/TCO.hs
-formatted       c3bcb1230471  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/Unused.hs
-formatted       54228acabdeb  purescript-0.15.15/src/Language/PureScript/Crash.hs
-formatted       d38f4a6a3f33  purescript-0.15.15/src/Language/PureScript/Docs.hs
-formatted       057fb7fec258  purescript-0.15.15/src/Language/PureScript/Docs/AsHtml.hs
-formatted       4113354e65ae  purescript-0.15.15/src/Language/PureScript/Docs/AsMarkdown.hs
-formatted       1253c947865b  purescript-0.15.15/src/Language/PureScript/Docs/Collect.hs
-formatted       0d989be52a8a  purescript-0.15.15/src/Language/PureScript/Docs/Convert.hs
-formatted       70ed8016e77f  purescript-0.15.15/src/Language/PureScript/Docs/Convert/ReExports.hs
-formatted       01c0ebe958e5  purescript-0.15.15/src/Language/PureScript/Docs/Convert/Single.hs
-formatted       d97124c1ab6a  purescript-0.15.15/src/Language/PureScript/Docs/Css.hs
-formatted       f90d0d26dd2b  purescript-0.15.15/src/Language/PureScript/Docs/Prim.hs
-formatted       e7ab3625ae1e  purescript-0.15.15/src/Language/PureScript/Docs/Render.hs
-formatted       4c98064ffe67  purescript-0.15.15/src/Language/PureScript/Docs/RenderedCode.hs
-formatted       2f9857670eb2  purescript-0.15.15/src/Language/PureScript/Docs/RenderedCode/RenderType.hs
-formatted       a592688b187e  purescript-0.15.15/src/Language/PureScript/Docs/RenderedCode/Types.hs
-formatted       876b5438b748  purescript-0.15.15/src/Language/PureScript/Docs/Tags.hs
-formatted       2145c65037f8  purescript-0.15.15/src/Language/PureScript/Docs/Types.hs
-formatted       bc381d509404  purescript-0.15.15/src/Language/PureScript/Docs/Utils/MonoidExtras.hs
-formatted       f3b1444d35a5  purescript-0.15.15/src/Language/PureScript/Environment.hs
-formatted       27ca88d0bd04  purescript-0.15.15/src/Language/PureScript/Errors.hs
-formatted       805b37c2988c  purescript-0.15.15/src/Language/PureScript/Errors/JSON.hs
-formatted       7a36f37df732  purescript-0.15.15/src/Language/PureScript/Externs.hs
-formatted       347eb6f7f34d  purescript-0.15.15/src/Language/PureScript/Glob.hs
-formatted       a91b6028a053  purescript-0.15.15/src/Language/PureScript/Graph.hs
-formatted       0af324e42f5f  purescript-0.15.15/src/Language/PureScript/Hierarchy.hs
-formatted       615dd3e96d83  purescript-0.15.15/src/Language/PureScript/Ide.hs
-formatted       e69502626a1b  purescript-0.15.15/src/Language/PureScript/Ide/CaseSplit.hs
-formatted       b9d2fcb8535a  purescript-0.15.15/src/Language/PureScript/Ide/Command.hs
-formatted       e26de1f28e1b  purescript-0.15.15/src/Language/PureScript/Ide/Completion.hs
-formatted       7c4c157c15a2  purescript-0.15.15/src/Language/PureScript/Ide/Error.hs
-formatted       f831eeaf68b3  purescript-0.15.15/src/Language/PureScript/Ide/Externs.hs
-formatted       925e97a78180  purescript-0.15.15/src/Language/PureScript/Ide/Filter.hs
-formatted       3576f2d7de05  purescript-0.15.15/src/Language/PureScript/Ide/Filter/Declaration.hs
-formatted       d48adbab9be5  purescript-0.15.15/src/Language/PureScript/Ide/Filter/Imports.hs
-formatted       93d2180b21af  purescript-0.15.15/src/Language/PureScript/Ide/Imports.hs
-formatted       395f2cbf5c2c  purescript-0.15.15/src/Language/PureScript/Ide/Imports/Actions.hs
-formatted       dae869e09d51  purescript-0.15.15/src/Language/PureScript/Ide/Logging.hs
-formatted       6495efed1636  purescript-0.15.15/src/Language/PureScript/Ide/Matcher.hs
-formatted       fe69a6b2ed2c  purescript-0.15.15/src/Language/PureScript/Ide/Prim.hs
-formatted       f203b7c7db4d  purescript-0.15.15/src/Language/PureScript/Ide/Rebuild.hs
-formatted       a65fbc555581  purescript-0.15.15/src/Language/PureScript/Ide/Reexports.hs
-formatted       8dad96598473  purescript-0.15.15/src/Language/PureScript/Ide/SourceFile.hs
-formatted       7c86ee11f6ae  purescript-0.15.15/src/Language/PureScript/Ide/State.hs
-formatted       f41fbbfd0237  purescript-0.15.15/src/Language/PureScript/Ide/Types.hs
-formatted       a2547b22a5bd  purescript-0.15.15/src/Language/PureScript/Ide/Usage.hs
-formatted       c5c7f0134f7c  purescript-0.15.15/src/Language/PureScript/Ide/Util.hs
-formatted       0c379aba42be  purescript-0.15.15/src/Language/PureScript/Interactive.hs
-formatted       ea47006e2013  purescript-0.15.15/src/Language/PureScript/Interactive/Completion.hs
-formatted       17488dfda517  purescript-0.15.15/src/Language/PureScript/Interactive/Directive.hs
-formatted       2ab1349ff2ec  purescript-0.15.15/src/Language/PureScript/Interactive/IO.hs
-formatted       f41f6e5826db  purescript-0.15.15/src/Language/PureScript/Interactive/Message.hs
-formatted       595ebf5e2141  purescript-0.15.15/src/Language/PureScript/Interactive/Module.hs
-formatted       4b81e9100134  purescript-0.15.15/src/Language/PureScript/Interactive/Parser.hs
-formatted       aa71f85f0c45  purescript-0.15.15/src/Language/PureScript/Interactive/Printer.hs
-formatted       2a5d0038271f  purescript-0.15.15/src/Language/PureScript/Interactive/Types.hs
-formatted       d71ef7f9fb6c  purescript-0.15.15/src/Language/PureScript/Label.hs
-formatted       a6c99546ca7b  purescript-0.15.15/src/Language/PureScript/Linter.hs
-formatted       a4813ff2c614  purescript-0.15.15/src/Language/PureScript/Linter/Exhaustive.hs
-formatted       a875b0da533f  purescript-0.15.15/src/Language/PureScript/Linter/Imports.hs
-formatted       eefa6de7d2e3  purescript-0.15.15/src/Language/PureScript/Linter/Wildcards.hs
-formatted       a91628e7f7d5  purescript-0.15.15/src/Language/PureScript/Make.hs
-formatted       8ef53feca8d8  purescript-0.15.15/src/Language/PureScript/Make/Actions.hs
-formatted       a5c1fea38376  purescript-0.15.15/src/Language/PureScript/Make/BuildPlan.hs
-formatted       2ff6ea3e0439  purescript-0.15.15/src/Language/PureScript/Make/Cache.hs
-formatted       5a62260bbc36  purescript-0.15.15/src/Language/PureScript/Make/Monad.hs
-formatted       d32972a1d126  purescript-0.15.15/src/Language/PureScript/ModuleDependencies.hs
-formatted       0415064ad3ac  purescript-0.15.15/src/Language/PureScript/Names.hs
-formatted       0f9b1ea22f14  purescript-0.15.15/src/Language/PureScript/Options.hs
-formatted       57e5473deb15  purescript-0.15.15/src/Language/PureScript/PSString.hs
-formatted       2b26a96d8bcc  purescript-0.15.15/src/Language/PureScript/Pretty.hs
-formatted       c6838281b4ea  purescript-0.15.15/src/Language/PureScript/Pretty/Common.hs
-formatted       61f00923794e  purescript-0.15.15/src/Language/PureScript/Pretty/Types.hs
-formatted       719bfaeded1b  purescript-0.15.15/src/Language/PureScript/Pretty/Values.hs
-formatted       53f985a5fefa  purescript-0.15.15/src/Language/PureScript/Publish.hs
-formatted       79e26f16154a  purescript-0.15.15/src/Language/PureScript/Publish/BoxesHelpers.hs
-formatted       6bbf592abed7  purescript-0.15.15/src/Language/PureScript/Publish/ErrorsWarnings.hs
-formatted       717e37e4a15e  purescript-0.15.15/src/Language/PureScript/Publish/Registry/Compat.hs
-formatted       fba7a9e201e6  purescript-0.15.15/src/Language/PureScript/Publish/Utils.hs
-formatted       7537fedb9664  purescript-0.15.15/src/Language/PureScript/Renamer.hs
-formatted       9e88be14067d  purescript-0.15.15/src/Language/PureScript/Roles.hs
-formatted       2530d5774295  purescript-0.15.15/src/Language/PureScript/Sugar.hs
-formatted       834b0e83e969  purescript-0.15.15/src/Language/PureScript/Sugar/AdoNotation.hs
-formatted       cea4abccd1cf  purescript-0.15.15/src/Language/PureScript/Sugar/BindingGroups.hs
-formatted       502cd635c402  purescript-0.15.15/src/Language/PureScript/Sugar/CaseDeclarations.hs
-formatted       7efb24168510  purescript-0.15.15/src/Language/PureScript/Sugar/DoNotation.hs
-formatted       b4240a4449c4  purescript-0.15.15/src/Language/PureScript/Sugar/LetPattern.hs
-formatted       224e99106e55  purescript-0.15.15/src/Language/PureScript/Sugar/Names.hs
-formatted       b2eab3efd8fe  purescript-0.15.15/src/Language/PureScript/Sugar/Names/Common.hs
-formatted       346caf48f81c  purescript-0.15.15/src/Language/PureScript/Sugar/Names/Env.hs
-formatted       48e3da823478  purescript-0.15.15/src/Language/PureScript/Sugar/Names/Exports.hs
-formatted       a4d64c36bc25  purescript-0.15.15/src/Language/PureScript/Sugar/Names/Imports.hs
-formatted       54d278b2a1af  purescript-0.15.15/src/Language/PureScript/Sugar/ObjectWildcards.hs
-formatted       5fd120196aba  purescript-0.15.15/src/Language/PureScript/Sugar/Operators.hs
-formatted       2a167c659922  purescript-0.15.15/src/Language/PureScript/Sugar/Operators/Binders.hs
-formatted       13722182a0e7  purescript-0.15.15/src/Language/PureScript/Sugar/Operators/Common.hs
-formatted       af45497618ed  purescript-0.15.15/src/Language/PureScript/Sugar/Operators/Expr.hs
-formatted       93053d3544f1  purescript-0.15.15/src/Language/PureScript/Sugar/Operators/Types.hs
-formatted       bf9cdccf9cd8  purescript-0.15.15/src/Language/PureScript/Sugar/TypeClasses.hs
-formatted       b5057db581ea  purescript-0.15.15/src/Language/PureScript/Sugar/TypeClasses/Deriving.hs
-formatted       84ce0264acbb  purescript-0.15.15/src/Language/PureScript/Sugar/TypeDeclarations.hs
-formatted       24e5df024499  purescript-0.15.15/src/Language/PureScript/Traversals.hs
-formatted       9fc0861959b2  purescript-0.15.15/src/Language/PureScript/TypeChecker.hs
-formatted       2c26865167b9  purescript-0.15.15/src/Language/PureScript/TypeChecker/Deriving.hs
-formatted       77af37aaf14d  purescript-0.15.15/src/Language/PureScript/TypeChecker/Entailment.hs
-formatted       fa60a8caf03a  purescript-0.15.15/src/Language/PureScript/TypeChecker/Entailment/Coercible.hs
-formatted       b504bbdc02b8  purescript-0.15.15/src/Language/PureScript/TypeChecker/Entailment/IntCompare.hs
-formatted       2f14273075e4  purescript-0.15.15/src/Language/PureScript/TypeChecker/Kinds.hs
-formatted       d65280bbc8f4  purescript-0.15.15/src/Language/PureScript/TypeChecker/Monad.hs
-formatted       71ace1d575fe  purescript-0.15.15/src/Language/PureScript/TypeChecker/Roles.hs
-formatted       5f769d073cac  purescript-0.15.15/src/Language/PureScript/TypeChecker/Skolems.hs
-formatted       c8964442e6c6  purescript-0.15.15/src/Language/PureScript/TypeChecker/Subsumption.hs
-formatted       c5b309590b3d  purescript-0.15.15/src/Language/PureScript/TypeChecker/Synonyms.hs
-formatted       6dcac272ef52  purescript-0.15.15/src/Language/PureScript/TypeChecker/TypeSearch.hs
-formatted       d5153c7b177b  purescript-0.15.15/src/Language/PureScript/TypeChecker/Types.hs
-formatted       0189781f7243  purescript-0.15.15/src/Language/PureScript/TypeChecker/Unify.hs
-formatted       2d148264f334  purescript-0.15.15/src/Language/PureScript/TypeClassDictionaries.hs
-formatted       9cac73392e4f  purescript-0.15.15/src/Language/PureScript/Types.hs
-formatted       50a45fbad08d  purescript-0.15.15/src/System/IO/UTF8.hs
-formatted       4533a74fbdb2  purescript-0.15.15/tests/Language/PureScript/Ide/CompletionSpec.hs
-formatted       099ba0badfd6  purescript-0.15.15/tests/Language/PureScript/Ide/FilterSpec.hs
-formatted       1033245eef97  purescript-0.15.15/tests/Language/PureScript/Ide/ImportsSpec.hs
-formatted       028f5c10dae7  purescript-0.15.15/tests/Language/PureScript/Ide/MatcherSpec.hs
-formatted       e7c92690fcf3  purescript-0.15.15/tests/Language/PureScript/Ide/RebuildSpec.hs
-formatted       7890facc486a  purescript-0.15.15/tests/Language/PureScript/Ide/ReexportsSpec.hs
-formatted       59d2a1d292e1  purescript-0.15.15/tests/Language/PureScript/Ide/SourceFileSpec.hs
-formatted       904535829fba  purescript-0.15.15/tests/Language/PureScript/Ide/StateSpec.hs
-formatted       1698cf9a91b8  purescript-0.15.15/tests/Language/PureScript/Ide/Test.hs
-formatted       67fe4d589cdb  purescript-0.15.15/tests/Language/PureScript/Ide/UsageSpec.hs
-formatted       0406ed28e812  purescript-0.15.15/tests/Main.hs
-formatted       ed333c67c3b1  purescript-0.15.15/tests/PscIdeSpec.hs
-formatted       a2b0f5e823b9  purescript-0.15.15/tests/TestAst.hs
-formatted       856645ead459  purescript-0.15.15/tests/TestCompiler.hs
-formatted       4184ded3056f  purescript-0.15.15/tests/TestCoreFn.hs
-formatted       3d3b4f7c14d7  purescript-0.15.15/tests/TestCst.hs
-formatted       98e4356992c1  purescript-0.15.15/tests/TestDocs.hs
-formatted       e29c16f400a0  purescript-0.15.15/tests/TestGraph.hs
-formatted       7314022489fa  purescript-0.15.15/tests/TestHierarchy.hs
-formatted       0874e238b9c0  purescript-0.15.15/tests/TestIde.hs
-formatted       df1c4148215e  purescript-0.15.15/tests/TestMake.hs
-formatted       e782a733be50  purescript-0.15.15/tests/TestPrimDocs.hs
-formatted       d2998d562480  purescript-0.15.15/tests/TestPscPublish.hs
-formatted       e47fc0f000ee  purescript-0.15.15/tests/TestPsci.hs
-formatted       557206f834dc  purescript-0.15.15/tests/TestPsci/CommandTest.hs
-formatted       a139fd3aa0c9  purescript-0.15.15/tests/TestPsci/CompletionTest.hs
-formatted       5fa6ca09e4c4  purescript-0.15.15/tests/TestPsci/EvalTest.hs
-formatted       1396270146b9  purescript-0.15.15/tests/TestPsci/TestEnv.hs
-formatted       82c9984e8670  purescript-0.15.15/tests/TestSourceMaps.hs
-formatted       e6fa08547d76  purescript-0.15.15/tests/TestUtils.hs
-formatted       002d52c424b7  raaz-0.3.11/api/aead/Auth/Implementation.hsig
-formatted       4a86cd34c9e7  raaz-0.3.11/api/aead/Cipher/Implementation.hsig
-formatted       16fa84cb7ae5  raaz-0.3.11/api/aead/Interface.hs
-formatted       a346882029b3  raaz-0.3.11/api/auth/Implementation.hsig
-formatted       77a977c85c0d  raaz-0.3.11/api/auth/Interface.hs
-formatted       29b7f7e93ae5  raaz-0.3.11/api/digest/Implementation.hsig
-formatted       7b45644314ef  raaz-0.3.11/api/digest/Interface.hs
-formatted       711ebf2e3620  raaz-0.3.11/api/encrypt/Implementation.hsig
-formatted       abdae110e56a  raaz-0.3.11/api/encrypt/Interface.hs
-formatted       10d5d9d622cd  raaz-0.3.11/api/random/Entropy.hsig
-formatted       83b376fec166  raaz-0.3.11/api/random/Implementation.hsig
-formatted       ffc859b186af  raaz-0.3.11/api/random/Internal.hs
-formatted       71c16f895f6c  raaz-0.3.11/api/random/PRGenerator.hs
-formatted       a9538ed599c8  raaz-0.3.11/benchmarks/Main.hs
-formatted       876b405577a3  raaz-0.3.11/benchmarks/internal/Benchmark/CSPRG.hs
-formatted       20cee45b7828  raaz-0.3.11/benchmarks/internal/Benchmark/Primitive.hs
-formatted       0d27567b2a16  raaz-0.3.11/benchmarks/internal/Benchmark/Types.hs
-formatted       9ec4c716a238  raaz-0.3.11/core/Raaz/Core.hs
-formatted       52634a64c590  raaz-0.3.11/core/Raaz/Core/ByteSource.hs
-formatted       a05146df1142  raaz-0.3.11/core/Raaz/Core/Constants.hs
-formatted       97564cea364d  raaz-0.3.11/core/Raaz/Core/CpuSupports.hs
-formatted       b89a1297556b  raaz-0.3.11/core/Raaz/Core/Encode.hs
-formatted       f463b4886df2  raaz-0.3.11/core/Raaz/Core/Encode/Base16.hs
-formatted       e95c13b6113a  raaz-0.3.11/core/Raaz/Core/Encode/Base64.hs
-formatted       f8721f54231f  raaz-0.3.11/core/Raaz/Core/Encode/Internal.hs
-formatted       45c46e35a34f  raaz-0.3.11/core/Raaz/Core/Memory.hs
-formatted       be5bdc9fc1ae  raaz-0.3.11/core/Raaz/Core/MonoidalAction.hs
-formatted       a44dbacd364d  raaz-0.3.11/core/Raaz/Core/Parse.hs
-formatted       514d08e6f301  raaz-0.3.11/core/Raaz/Core/Parse/Unsafe.hs
-formatted       3d4dcaf4509d  raaz-0.3.11/core/Raaz/Core/Prelude.hs
-formatted       48ceb85b87f3  raaz-0.3.11/core/Raaz/Core/Primitive.hs
-formatted       f026c14b5cef  raaz-0.3.11/core/Raaz/Core/Transfer.hs
-formatted       5113d120fe4d  raaz-0.3.11/core/Raaz/Core/Transfer/Unsafe.hs
-formatted       03cf11da4658  raaz-0.3.11/core/Raaz/Core/Types.hs
-formatted       2efdce977481  raaz-0.3.11/core/Raaz/Core/Types/Copying.hs
-formatted       da6a05924170  raaz-0.3.11/core/Raaz/Core/Types/Endian.hs
-formatted       49cc9654b3b0  raaz-0.3.11/core/Raaz/Core/Types/Equality.hs
-formatted       72aa730843b9  raaz-0.3.11/core/Raaz/Core/Types/Internal.hs
-formatted       87409be71259  raaz-0.3.11/core/Raaz/Core/Types/Pointer.hs
-formatted       e89e04794868  raaz-0.3.11/core/Raaz/Core/Types/Tuple.hs
-formatted       d98d94a62e17  raaz-0.3.11/core/Raaz/Core/Util/ByteString.hs
-formatted       aadc37085673  raaz-0.3.11/core/Raaz/Primitive/AEAD/Internal.hs
-formatted       bdf59fdf9536  raaz-0.3.11/core/Raaz/Primitive/Blake2/Internal.hs
-formatted       26f42c9a3385  raaz-0.3.11/core/Raaz/Primitive/ChaCha20/Internal.hs
-formatted       933091143258  raaz-0.3.11/core/Raaz/Primitive/HashMemory.hs
-formatted       2e41cccfd947  raaz-0.3.11/core/Raaz/Primitive/Keyed/Internal.hs
-formatted       11f319d28f77  raaz-0.3.11/core/Raaz/Primitive/Poly1305/Internal.hs
-formatted       662036acbd84  raaz-0.3.11/core/Raaz/Primitive/Sha2/Internal.hs
-formatted       d321e6f120cc  raaz-0.3.11/implementation/Blake2b/CHandWritten.hs
-formatted       c7f7e16ff427  raaz-0.3.11/implementation/Blake2b/CPortable.hs
-formatted       380071ee384a  raaz-0.3.11/implementation/Blake2s/CHandWritten.hs
-formatted       d4911e2aba2f  raaz-0.3.11/implementation/ChaCha20/CHandWritten.hs
-formatted       fd7ed676bf40  raaz-0.3.11/implementation/ChaCha20/CPortable.hs
-formatted       2f7657c239d7  raaz-0.3.11/implementation/ChaCha20/Random/CPortable.hs
-formatted       e3deac8e5358  raaz-0.3.11/implementation/Poly1305/CPortable.hs
-formatted       340ec557db99  raaz-0.3.11/implementation/Poly1305/Memory.hs
-formatted       720f42375ee4  raaz-0.3.11/implementation/Sha256/CHandWritten.hs
-formatted       c064cc7a8421  raaz-0.3.11/implementation/Sha256/CPortable.hs
-formatted       a59c773526b4  raaz-0.3.11/implementation/Sha512/CHandWritten.hs
-formatted       53529d47a59f  raaz-0.3.11/implementation/Sha512/CPortable.hs
-formatted       e5d101450ea0  raaz-0.3.11/implementation/entropy/arc4random/Entropy.hs
-formatted       fe1af598e9b2  raaz-0.3.11/implementation/entropy/urandom/Entropy.hs
-formatted       0a7a863b87f6  raaz-0.3.11/indef/Implementation.hsig
-formatted       5b5f82999259  raaz-0.3.11/indef/Utils.hs
-formatted       666dcbf885e6  raaz-0.3.11/indef/buffer/Buffer.hs
-formatted       4d0bd2b93b60  raaz-0.3.11/indef/buffer/Context.hs
-formatted       d34b17eeb2fb  raaz-0.3.11/indef/buffer/Implementation.hsig
-formatted       a79a9dc1ec44  raaz-0.3.11/indef/chacha20/Implementation.hsig
-formatted       496eb8d3a6e9  raaz-0.3.11/indef/chacha20/XChaCha20/Implementation.hs
-formatted       a2c11b61575b  raaz-0.3.11/indef/keyed/hash/Implementation.hsig
-formatted       875f23f8f911  raaz-0.3.11/indef/keyed/hash/Mac/Implementation.hs
-formatted       fd3b4278ccc5  raaz-0.3.11/libverse/Raaz/Verse/Blake2b/C/Portable.hs
-formatted       44b600e76f74  raaz-0.3.11/libverse/Raaz/Verse/ChaCha20/C/Portable.hs
-formatted       221da1a1ba37  raaz-0.3.11/libverse/Raaz/Verse/Poly1305/C/Portable.hs
-formatted       7ccb752d8b1d  raaz-0.3.11/libverse/Raaz/Verse/Sha256/C/Portable.hs
-formatted       695112ac1280  raaz-0.3.11/libverse/Raaz/Verse/Sha512/C/Portable.hs
-formatted       2fbd14b119a4  raaz-0.3.11/monocypher/tests/Monocypher.hs
-formatted       1d0ec4de7195  raaz-0.3.11/monocypher/tests/Monocypher/Blake2bSpec.hs
-formatted       0c1244f02a18  raaz-0.3.11/monocypher/tests/Monocypher/ChaCha20Spec.hs
-formatted       e81070c8d0f4  raaz-0.3.11/monocypher/tests/Monocypher/Sha512Spec.hs
-formatted       309f4011c1b9  raaz-0.3.11/raaz/Raaz.hs
-formatted       d7e15e03f1d7  raaz-0.3.11/raaz/Raaz/Auth.hs
-formatted       44194680e191  raaz-0.3.11/raaz/Raaz/AuthEncrypt.hs
-formatted       6c7dee472711  raaz-0.3.11/raaz/Raaz/AuthEncrypt/Unsafe.hs
-formatted       1f2758b948a2  raaz-0.3.11/raaz/Raaz/Digest.hs
-formatted       fb3ff8903f10  raaz-0.3.11/raaz/Raaz/Random.hs
-formatted       14ec81125123  raaz-0.3.11/raaz/Raaz/V1/Auth.hs
-formatted       54d933b4519f  raaz-0.3.11/raaz/Raaz/V1/AuthEncrypt.hs
-formatted       9c227de3e844  raaz-0.3.11/raaz/Raaz/V1/AuthEncrypt/Unsafe.hs
-formatted       b221e97b02a1  raaz-0.3.11/raaz/Raaz/V1/Digest.hs
-formatted       a903f78514a8  raaz-0.3.11/raaz/bin/Command/Checksum.hs
-formatted       6af965bca577  raaz-0.3.11/raaz/bin/Command/Info.hs
-formatted       8b84f490d89a  raaz-0.3.11/raaz/bin/Command/Rand.hs
-formatted       2bbae784706a  raaz-0.3.11/raaz/bin/Main.hs
-formatted       bb0aca2148f4  raaz-0.3.11/raaz/bin/Usage.hs
-formatted       8955f3f595d6  raaz-0.3.11/tests/Raaz/Cipher/ChaCha20Spec.hs
-formatted       66c20297d941  raaz-0.3.11/tests/Raaz/Cipher/XChaCha20Spec.hs
-formatted       f70ba0951ea5  raaz-0.3.11/tests/Raaz/Core/ByteSourceSpec.hs
-formatted       f50f5814ce13  raaz-0.3.11/tests/Raaz/Core/EncodeSpec.hs
-formatted       a5cc6d99aed2  raaz-0.3.11/tests/Raaz/Core/MemorySpec.hs
-formatted       11c7d4db7839  raaz-0.3.11/tests/Raaz/Core/Types/WordSpec.hs
-formatted       e27cf91514a1  raaz-0.3.11/tests/Raaz/Core/Util/ByteStringSpec.hs
-formatted       9d02caada1d9  raaz-0.3.11/tests/Raaz/Digest/Blake2Spec.hs
-formatted       4f62e035aa97  raaz-0.3.11/tests/Raaz/Digest/Sha256Spec.hs
-formatted       ab3342a1c1c3  raaz-0.3.11/tests/Raaz/Digest/Sha512Spec.hs
-formatted       57a10ec0221b  raaz-0.3.11/tests/Raaz/Mac/Poly1305Spec.hs
-formatted       6cdc5c00b3a8  raaz-0.3.11/tests/Raaz/RandomSpec.hs
-formatted       2fbd14b119a4  raaz-0.3.11/tests/Spec.hs
-formatted       b1a4cba13110  raaz-0.3.11/tests/auth/Implementation.hsig
-formatted       ae7499e9f1a2  raaz-0.3.11/tests/auth/Tests/Auth.hs
-formatted       146a3742af4d  raaz-0.3.11/tests/auth/implementation/Auth/Mac/Blake2b.hs
-formatted       1400f8497a4b  raaz-0.3.11/tests/auth/implementation/Auth/Mac/Blake2s.hs
-formatted       f25bf91a517e  raaz-0.3.11/tests/auth/implementation/Auth/Poly1305.hs
-formatted       7123559f7c81  raaz-0.3.11/tests/cipher/Tests/Cipher.hs
-formatted       0c05cee23c2f  raaz-0.3.11/tests/comparative/AuthEncrypt.hs
-formatted       97ef04d16217  raaz-0.3.11/tests/comparative/AuthEncrypt/ChaCha20Poly1305Spec.hs
-formatted       741dc859a7b4  raaz-0.3.11/tests/comparative/Compare.hs
-formatted       5a902c132987  raaz-0.3.11/tests/comparative/Digest.hs
-formatted       9b0b9e470964  raaz-0.3.11/tests/comparative/Digest/Blake2bSpec.hs
-formatted       5e40537778de  raaz-0.3.11/tests/comparative/Digest/Sha256Spec.hs
-formatted       1d23a17f155b  raaz-0.3.11/tests/comparative/Digest/Sha512Spec.hs
-formatted       a5fa5869f401  raaz-0.3.11/tests/comparative/Encrypt.hs
-formatted       43a4a9f511ea  raaz-0.3.11/tests/comparative/Encrypt/ChaCha20Spec.hs
-formatted       2fbd14b119a4  raaz-0.3.11/tests/comparative/Main.hs
-formatted       9a4da070ca55  raaz-0.3.11/tests/core/Tests/Core.hs
-formatted       2249765a4b51  raaz-0.3.11/tests/core/Tests/Core/Imports.hs
-formatted       c746b6855fd8  raaz-0.3.11/tests/core/Tests/Core/Instances.hs
-formatted       62f66214a824  raaz-0.3.11/tests/core/Tests/Core/Utils.hs
-formatted       bcc780e22f03  raaz-0.3.11/tests/message-digest/Implementation.hsig
-formatted       2bb252395b85  raaz-0.3.11/tests/message-digest/Tests/Digest.hs
-formatted       4a8ac51676df  random-1.3.1/Setup.hs
-formatted       f81df0c89774  random-1.3.1/bench-legacy/BinSearch.hs
-formatted       ec53458f4d57  random-1.3.1/bench-legacy/SimpleRNGBench.hs
-formatted       0584292cc54f  random-1.3.1/bench/Main.hs
-formatted       3d4520480456  random-1.3.1/src/System/Random.hs
-formatted       0719577a75c1  random-1.3.1/src/System/Random/Array.hs
-formatted       0648347f5df7  random-1.3.1/src/System/Random/GFinite.hs
-formatted       2d02e33ff4f9  random-1.3.1/src/System/Random/Internal.hs
-formatted       43cf9948fc9c  random-1.3.1/src/System/Random/Seed.hs
-formatted       0d9957bbf13d  random-1.3.1/src/System/Random/Stateful.hs
-formatted       0d72e1db2b6d  random-1.3.1/test-inspection/Spec.hs
-formatted       c6f769b56ab6  random-1.3.1/test-inspection/Spec/Inspection.hs
-formatted       ed91342d3f30  random-1.3.1/test-legacy/Legacy.hs
-formatted       0160098f7cc5  random-1.3.1/test-legacy/Random1283.hs
-formatted       ad6c39289552  random-1.3.1/test-legacy/RangeTest.hs
-formatted       4c1669996d8d  random-1.3.1/test-legacy/T7936.hs
-formatted       398febcc8a6f  random-1.3.1/test-legacy/TestRandomIOs.hs
-formatted       3ef25c06bdfc  random-1.3.1/test-legacy/TestRandomRs.hs
-formatted       170817d6d661  random-1.3.1/test/Spec.hs
-formatted       a65d68fad80b  random-1.3.1/test/Spec/Range.hs
-formatted       e0e7306312ea  random-1.3.1/test/Spec/Run.hs
-formatted       b3fd15d83ccf  random-1.3.1/test/Spec/Seed.hs
-formatted       53b268e9c80a  random-1.3.1/test/Spec/Stateful.hs
-formatted       8bcbf019c7ab  recursion-schemes-5.2.3/examples/Expr.hs
-formatted       0ec37f362849  recursion-schemes-5.2.3/src/Data/Functor/Base.hs
-formatted       3ca7a5ae5fb0  recursion-schemes-5.2.3/src/Data/Functor/Foldable.hs
-formatted       db17ac3b1e40  recursion-schemes-5.2.3/src/Data/Functor/Foldable/TH.hs
-formatted       1581398eb1b5  resourcet-1.3.0/Control/Monad/Trans/Resource.hs
-formatted       491af03a5ea1  resourcet-1.3.0/Control/Monad/Trans/Resource/Internal.hs
-formatted       22ba33396e6e  resourcet-1.3.0/Data/Acquire.hs
-formatted       4a9defd159ee  resourcet-1.3.0/Data/Acquire/Internal.hs
-formatted       27565132aa25  resourcet-1.3.0/UnliftIO/Resource.hs
-formatted       1434a2ae8bde  resourcet-1.3.0/test/main.hs
-formatted       e865ae48f11b  retry-0.9.3.1/Setup.hs
-formatted       d4f84e488fb0  retry-0.9.3.1/src/Control/Retry.hs
-formatted       cce7cb264472  retry-0.9.3.1/src/UnliftIO/Retry.hs
-formatted       94b4a78445b3  retry-0.9.3.1/test/Main.hs
-formatted       08af947c789a  retry-0.9.3.1/test/Tests/Control/Retry.hs
-formatted       0b770fc83ef2  retry-0.9.3.1/test/Tests/UnliftIO/Retry.hs
-formatted       e865ae48f11b  safe-exceptions-0.1.7.4/Setup.hs
-formatted       9dd8a8e1a75f  safe-exceptions-0.1.7.4/src/Control/Exception/Safe.hs
-formatted       c34af7148814  safe-exceptions-0.1.7.4/test/Control/Exception/SafeSpec.hs
-formatted       2fbd14b119a4  safe-exceptions-0.1.7.4/test/Spec.hs
-formatted       e865ae48f11b  scientific-0.3.8.1/Setup.hs
-formatted       6a2de24bbe1d  scientific-0.3.8.1/bench/bench.hs
-formatted       b51f688e4f66  scientific-0.3.8.1/src/Data/ByteString/Builder/Scientific.hs
-formatted       a00104fdca94  scientific-0.3.8.1/src/Data/Scientific.hs
-formatted       5837fdbf8485  scientific-0.3.8.1/src/Data/Text/Lazy/Builder/Scientific.hs
-formatted       8e2c4142aa7f  scientific-0.3.8.1/src/GHC/Integer/Compat.hs
-formatted       70da6923c6d5  scientific-0.3.8.1/src/Utils.hs
-formatted       511632de8f71  scientific-0.3.8.1/test/test.hs
-formatted       e865ae48f11b  scotty-0.30/Setup.hs
-formatted       b4007b5fca90  scotty-0.30/Web/Scotty.hs
-formatted       06db4e678a89  scotty-0.30/Web/Scotty/Action.hs
-formatted       61431d95ef5b  scotty-0.30/Web/Scotty/Body.hs
-formatted       42bb0728a5d6  scotty-0.30/Web/Scotty/Cookie.hs
-formatted       517b584372bf  scotty-0.30/Web/Scotty/Internal/Types.hs
-formatted       ccdc72ea4dc8  scotty-0.30/Web/Scotty/Route.hs
-formatted       220c453f0fd9  scotty-0.30/Web/Scotty/Session.hs
-formatted       1d39c130ee80  scotty-0.30/Web/Scotty/Trans.hs
-formatted       e2036cbfa7c2  scotty-0.30/Web/Scotty/Trans/Lazy.hs
-formatted       2645fdc50126  scotty-0.30/Web/Scotty/Trans/Strict.hs
-formatted       6bad8484016a  scotty-0.30/Web/Scotty/Util.hs
-formatted       19a63b08e8cc  scotty-0.30/bench/Main.hs
-formatted       ff18ebd00d97  scotty-0.30/doctest/Main.hs
-formatted       bfcc28288099  scotty-0.30/examples/basic.hs
-formatted       128fcbdca77d  scotty-0.30/examples/bodyecho.hs
-formatted       0bfdeec9e9d5  scotty-0.30/examples/cookies.hs
-formatted       e68dfe58dd88  scotty-0.30/examples/exceptions.hs
-formatted       99664eb0da8e  scotty-0.30/examples/globalstate.hs
-formatted       984bcbbe2aa7  scotty-0.30/examples/gzip.hs
-formatted       8efdf09d4d75  scotty-0.30/examples/json_mode.hs
-formatted       d96b13ea35d6  scotty-0.30/examples/middleware.hs
-formatted       dd5796ac98ac  scotty-0.30/examples/nested.hs
-formatted       f424d2128b4a  scotty-0.30/examples/options.hs
-formatted       8b1e46c9aeb7  scotty-0.30/examples/reader.hs
-formatted       6750528250e9  scotty-0.30/examples/session.hs
-formatted       d40e0a8e64ea  scotty-0.30/examples/upload.hs
-formatted       94f10fda97e5  scotty-0.30/examples/urlshortener.hs
-formatted       2fbd14b119a4  scotty-0.30/test/Spec.hs
-formatted       dd9baecda733  scotty-0.30/test/Test/Hspec/Wai/Extra.hs
-formatted       409d10e2c1d9  scotty-0.30/test/Web/ScottySpec.hs
-formatted       091ccbfea22a  semigroupoids-6.0.2/src/Data/Bifunctor/Apply.hs
-formatted       43f2fc743e76  semigroupoids-6.0.2/src/Data/Functor/Alt.hs
-formatted       b091ae1639ae  semigroupoids-6.0.2/src/Data/Functor/Apply.hs
-formatted       4322a16f4eaf  semigroupoids-6.0.2/src/Data/Functor/Bind.hs
-declined        -             semigroupoids-6.0.2/src/Data/Functor/Bind/Class.hs
-formatted       82dabf65525e  semigroupoids-6.0.2/src/Data/Functor/Bind/Trans.hs
-formatted       dbcbf10c5fed  semigroupoids-6.0.2/src/Data/Functor/Contravariant/Conclude.hs
-formatted       a7b3bbac40b5  semigroupoids-6.0.2/src/Data/Functor/Contravariant/Decide.hs
-formatted       abf4c37d3996  semigroupoids-6.0.2/src/Data/Functor/Contravariant/Divise.hs
-formatted       91c0a22860b9  semigroupoids-6.0.2/src/Data/Functor/Extend.hs
-formatted       da9d284cb9bb  semigroupoids-6.0.2/src/Data/Functor/Plus.hs
-formatted       2c9e2b95e1c6  semigroupoids-6.0.2/src/Data/Groupoid.hs
-formatted       2a2382799a6a  semigroupoids-6.0.2/src/Data/Isomorphism.hs
-formatted       c38d3ee4d146  semigroupoids-6.0.2/src/Data/Semigroup/Bifoldable.hs
-formatted       3b69bf2b2c98  semigroupoids-6.0.2/src/Data/Semigroup/Bitraversable.hs
-formatted       6ec751a395e5  semigroupoids-6.0.2/src/Data/Semigroup/Foldable.hs
-formatted       15d51636f77f  semigroupoids-6.0.2/src/Data/Semigroup/Foldable/Class.hs
-formatted       e46135ea634e  semigroupoids-6.0.2/src/Data/Semigroup/Traversable.hs
-formatted       5db895bd9aed  semigroupoids-6.0.2/src/Data/Semigroup/Traversable/Class.hs
-formatted       8288490eb6a8  semigroupoids-6.0.2/src/Data/Semigroupoid.hs
-formatted       b3380ca605a0  semigroupoids-6.0.2/src/Data/Semigroupoid/Categorical.hs
-formatted       45153648a25d  semigroupoids-6.0.2/src/Data/Semigroupoid/Dual.hs
-formatted       f1c21cb8613d  semigroupoids-6.0.2/src/Data/Semigroupoid/Ob.hs
-formatted       b8cb23896bf9  semigroupoids-6.0.2/src/Data/Semigroupoid/Static.hs
-formatted       9945f77c9069  semigroupoids-6.0.2/src/Data/Traversable/Instances.hs
-formatted       4f91affffbe0  semigroupoids-6.0.2/src/Semigroupoids/Do.hs
-formatted       689e1e042e62  semigroupoids-6.0.2/src/Semigroupoids/Internal.hs
-formatted       e865ae48f11b  servant-0.20.3.0/Setup.hs
-formatted       9153c9da89d5  servant-0.20.3.0/src/Servant/API.hs
-formatted       6ca32413e226  servant-0.20.3.0/src/Servant/API/Alternative.hs
-formatted       c265b91e3c97  servant-0.20.3.0/src/Servant/API/BasicAuth.hs
-formatted       a2c409071755  servant-0.20.3.0/src/Servant/API/Capture.hs
-formatted       a15886878620  servant-0.20.3.0/src/Servant/API/ContentTypes.hs
-formatted       ae6eeb995066  servant-0.20.3.0/src/Servant/API/Description.hs
-formatted       3529480c44cb  servant-0.20.3.0/src/Servant/API/Empty.hs
-formatted       ca9f880fe9c3  servant-0.20.3.0/src/Servant/API/Experimental/Auth.hs
-formatted       1cb7b7979a37  servant-0.20.3.0/src/Servant/API/Fragment.hs
-formatted       0b0271e38424  servant-0.20.3.0/src/Servant/API/Generic.hs
-formatted       6ace49e9ee6c  servant-0.20.3.0/src/Servant/API/Header.hs
-formatted       a4120f74a189  servant-0.20.3.0/src/Servant/API/Host.hs
-formatted       9add62e890f1  servant-0.20.3.0/src/Servant/API/HttpVersion.hs
-formatted       efd092f09057  servant-0.20.3.0/src/Servant/API/IsSecure.hs
-formatted       714c99b4ea0e  servant-0.20.3.0/src/Servant/API/Modifiers.hs
-formatted       684bc7886ecb  servant-0.20.3.0/src/Servant/API/MultiVerb.hs
-formatted       56acb7471063  servant-0.20.3.0/src/Servant/API/NamedRoutes.hs
-formatted       2a67c6814cd7  servant-0.20.3.0/src/Servant/API/QueryParam.hs
-formatted       c9e33c06dd4d  servant-0.20.3.0/src/Servant/API/QueryString.hs
-formatted       d94765f780c5  servant-0.20.3.0/src/Servant/API/Range.hs
-formatted       54177faefb7f  servant-0.20.3.0/src/Servant/API/Raw.hs
-formatted       0d8ceb92e030  servant-0.20.3.0/src/Servant/API/RemoteHost.hs
-formatted       fa0f8d364af9  servant-0.20.3.0/src/Servant/API/ReqBody.hs
-formatted       8acf042b8234  servant-0.20.3.0/src/Servant/API/ResponseHeaders.hs
-formatted       c67668bb6c05  servant-0.20.3.0/src/Servant/API/ServerSentEvents.hs
-formatted       d944ce6b72bb  servant-0.20.3.0/src/Servant/API/Status.hs
-formatted       80b82bca3c39  servant-0.20.3.0/src/Servant/API/Stream.hs
-formatted       edf5b4aed88d  servant-0.20.3.0/src/Servant/API/Sub.hs
-formatted       ff144efc7edd  servant-0.20.3.0/src/Servant/API/TypeErrors.hs
-formatted       29ad4adf0dc7  servant-0.20.3.0/src/Servant/API/TypeLevel.hs
-formatted       c0878f59a227  servant-0.20.3.0/src/Servant/API/TypeLevel/List.hs
-formatted       9be4a4b0a678  servant-0.20.3.0/src/Servant/API/UVerb.hs
-formatted       46da2eb7f65a  servant-0.20.3.0/src/Servant/API/UVerb/Union.hs
-formatted       635eed50f570  servant-0.20.3.0/src/Servant/API/Vault.hs
-formatted       2dc0c94ac83c  servant-0.20.3.0/src/Servant/API/Verbs.hs
-formatted       5dcaa0e3d262  servant-0.20.3.0/src/Servant/API/WithNamedContext.hs
-formatted       c8d1802909fc  servant-0.20.3.0/src/Servant/API/WithResource.hs
-formatted       7bd50129afee  servant-0.20.3.0/src/Servant/Links.hs
-formatted       4a79910df177  servant-0.20.3.0/src/Servant/Test/ComprehensiveAPI.hs
-formatted       72397d3bb59f  servant-0.20.3.0/src/Servant/Types/Internal/Response.hs
-formatted       e57b2e66d9d5  servant-0.20.3.0/src/Servant/Types/SourceT.hs
-formatted       8e01166db243  servant-0.20.3.0/test/Servant/API/ContentTypesSpec.hs
-formatted       8d914b5e174f  servant-0.20.3.0/test/Servant/API/ResponseHeadersSpec.hs
-formatted       19481f24edd2  servant-0.20.3.0/test/Servant/API/StreamSpec.hs
-formatted       4f1634d779c6  servant-0.20.3.0/test/Servant/LinksSpec.hs
-formatted       2fbd14b119a4  servant-0.20.3.0/test/Spec.hs
-formatted       e865ae48f11b  servant-server-0.20.3.0/Setup.hs
-formatted       e0bc38ee2107  servant-server-0.20.3.0/example/greet.hs
-formatted       a401126eeff8  servant-server-0.20.3.0/src/Servant.hs
-formatted       9ef459de1886  servant-server-0.20.3.0/src/Servant/Server.hs
-formatted       1f26409f3f2c  servant-server-0.20.3.0/src/Servant/Server/Experimental/Auth.hs
-formatted       6fc6eff93d47  servant-server-0.20.3.0/src/Servant/Server/Generic.hs
-formatted       a4686d4d8168  servant-server-0.20.3.0/src/Servant/Server/Internal.hs
-formatted       6ece26e7e14b  servant-server-0.20.3.0/src/Servant/Server/Internal/BasicAuth.hs
-formatted       840da824ddc2  servant-server-0.20.3.0/src/Servant/Server/Internal/Context.hs
-formatted       f75d6b244e90  servant-server-0.20.3.0/src/Servant/Server/Internal/Delayed.hs
-formatted       b1e176cb1e12  servant-server-0.20.3.0/src/Servant/Server/Internal/DelayedIO.hs
-formatted       577b2ebfe120  servant-server-0.20.3.0/src/Servant/Server/Internal/ErrorFormatter.hs
-formatted       a235c4a5477e  servant-server-0.20.3.0/src/Servant/Server/Internal/Handler.hs
-formatted       bd96b8ecb097  servant-server-0.20.3.0/src/Servant/Server/Internal/ResponseRender.hs
-formatted       f0244940436b  servant-server-0.20.3.0/src/Servant/Server/Internal/RouteResult.hs
-formatted       c383b059c7cd  servant-server-0.20.3.0/src/Servant/Server/Internal/Router.hs
-formatted       09cdf39e03b6  servant-server-0.20.3.0/src/Servant/Server/Internal/RoutingApplication.hs
-formatted       b15781d6d1a7  servant-server-0.20.3.0/src/Servant/Server/Internal/ServerError.hs
-formatted       4be302b8cfbe  servant-server-0.20.3.0/src/Servant/Server/StaticFiles.hs
-formatted       7a929eb5f6c6  servant-server-0.20.3.0/src/Servant/Server/UVerb.hs
-formatted       d43150f68994  servant-server-0.20.3.0/src/Servant/Utils/StaticFiles.hs
-formatted       e9e090db95fa  servant-server-0.20.3.0/test/Servant/ArbitraryMonadServerSpec.hs
-formatted       a92186c8737e  servant-server-0.20.3.0/test/Servant/HoistSpec.hs
-formatted       5a2bd30f3c12  servant-server-0.20.3.0/test/Servant/Server/ErrorSpec.hs
-formatted       6f993e850de5  servant-server-0.20.3.0/test/Servant/Server/Internal/ContextSpec.hs
-formatted       6979f09da111  servant-server-0.20.3.0/test/Servant/Server/Internal/RoutingApplicationSpec.hs
-formatted       ebf15aace7c8  servant-server-0.20.3.0/test/Servant/Server/RouterSpec.hs
-formatted       ca1d8b69c2d4  servant-server-0.20.3.0/test/Servant/Server/StaticFilesSpec.hs
-formatted       e9a7ef4fbb57  servant-server-0.20.3.0/test/Servant/Server/StreamingSpec.hs
-formatted       6bd03c4fd0e6  servant-server-0.20.3.0/test/Servant/Server/UsingContextSpec.hs
-formatted       c68eea536d8f  servant-server-0.20.3.0/test/Servant/Server/UsingContextSpec/TestCombinators.hs
-formatted       52710abf0bdb  servant-server-0.20.3.0/test/Servant/ServerSpec.hs
-formatted       2fbd14b119a4  servant-server-0.20.3.0/test/Spec.hs
-formatted       e865ae48f11b  shake-0.19.9/Setup.hs
-formatted       85840851c997  shake-0.19.9/docs/manual/Shakefile.hs
-formatted       659df897f906  shake-0.19.9/src/Development/Ninja/All.hs
-formatted       3104f3ca6fe0  shake-0.19.9/src/Development/Ninja/Env.hs
-formatted       7cb2becdc041  shake-0.19.9/src/Development/Ninja/Lexer.hs
-formatted       750928680562  shake-0.19.9/src/Development/Ninja/Parse.hs
-formatted       c0a33fcdb116  shake-0.19.9/src/Development/Ninja/Type.hs
-formatted       1e091717f0e4  shake-0.19.9/src/Development/Shake.hs
-formatted       5a0ba406abd6  shake-0.19.9/src/Development/Shake/Classes.hs
-formatted       7ae91e4024b4  shake-0.19.9/src/Development/Shake/Command.hs
-formatted       5959e8996e24  shake-0.19.9/src/Development/Shake/Config.hs
-formatted       e9d594f06006  shake-0.19.9/src/Development/Shake/Database.hs
-formatted       6a9f5286dbbd  shake-0.19.9/src/Development/Shake/FilePath.hs
-formatted       4da3a2b0f58b  shake-0.19.9/src/Development/Shake/Forward.hs
-formatted       7718900e8a44  shake-0.19.9/src/Development/Shake/Internal/Args.hs
-formatted       176c017dbbd9  shake-0.19.9/src/Development/Shake/Internal/CmdOption.hs
-formatted       aaf913d99d5c  shake-0.19.9/src/Development/Shake/Internal/CompactUI.hs
-formatted       f6bbbd69a477  shake-0.19.9/src/Development/Shake/Internal/Core/Action.hs
-formatted       66a65bc9bc34  shake-0.19.9/src/Development/Shake/Internal/Core/Build.hs
-formatted       4e75290b3b44  shake-0.19.9/src/Development/Shake/Internal/Core/Database.hs
-formatted       3e4afc55b835  shake-0.19.9/src/Development/Shake/Internal/Core/Monad.hs
-formatted       e0107f7baea9  shake-0.19.9/src/Development/Shake/Internal/Core/Pool.hs
-formatted       f6fa2073bad8  shake-0.19.9/src/Development/Shake/Internal/Core/Rules.hs
-formatted       cf3d65d83229  shake-0.19.9/src/Development/Shake/Internal/Core/Run.hs
-formatted       5af9f97a9e29  shake-0.19.9/src/Development/Shake/Internal/Core/Storage.hs
-formatted       ab347cc10d7a  shake-0.19.9/src/Development/Shake/Internal/Core/Types.hs
-formatted       30ee262fedde  shake-0.19.9/src/Development/Shake/Internal/Demo.hs
-formatted       1afe6f5f82c8  shake-0.19.9/src/Development/Shake/Internal/Derived.hs
-formatted       09c8188aa053  shake-0.19.9/src/Development/Shake/Internal/Errors.hs
-declined        -             shake-0.19.9/src/Development/Shake/Internal/FileInfo.hs
-formatted       759fa2b54278  shake-0.19.9/src/Development/Shake/Internal/FileName.hs
-formatted       4d3c15baa1e4  shake-0.19.9/src/Development/Shake/Internal/FilePattern.hs
-formatted       1e054a94085b  shake-0.19.9/src/Development/Shake/Internal/History/Bloom.hs
-formatted       01551ed3cbf4  shake-0.19.9/src/Development/Shake/Internal/History/Cloud.hs
-formatted       249ed8efaa13  shake-0.19.9/src/Development/Shake/Internal/History/Network.hs
-formatted       4f537be442b0  shake-0.19.9/src/Development/Shake/Internal/History/Serialise.hs
-formatted       14a6f9c117dc  shake-0.19.9/src/Development/Shake/Internal/History/Server.hs
-formatted       bf25365673d0  shake-0.19.9/src/Development/Shake/Internal/History/Shared.hs
-declined        -             shake-0.19.9/src/Development/Shake/Internal/History/Symlink.hs
-formatted       765062af5b1e  shake-0.19.9/src/Development/Shake/Internal/History/Types.hs
-formatted       7a68e11d3f88  shake-0.19.9/src/Development/Shake/Internal/Options.hs
-formatted       c8651e83c45c  shake-0.19.9/src/Development/Shake/Internal/Paths.hs
-formatted       208cc40e49ba  shake-0.19.9/src/Development/Shake/Internal/Profile.hs
-declined        -             shake-0.19.9/src/Development/Shake/Internal/Progress.hs
-formatted       c9971fdca3e5  shake-0.19.9/src/Development/Shake/Internal/Resource.hs
-formatted       5733144919c3  shake-0.19.9/src/Development/Shake/Internal/Rules/Default.hs
-formatted       8a63ca21fcda  shake-0.19.9/src/Development/Shake/Internal/Rules/Directory.hs
-formatted       f000c73ea4b7  shake-0.19.9/src/Development/Shake/Internal/Rules/File.hs
-formatted       6e7322f7f7c1  shake-0.19.9/src/Development/Shake/Internal/Rules/Files.hs
-formatted       18637b215cdb  shake-0.19.9/src/Development/Shake/Internal/Rules/Oracle.hs
-formatted       b0d13ac0a3a9  shake-0.19.9/src/Development/Shake/Internal/Rules/OrderOnly.hs
-formatted       941f5cc2dd1d  shake-0.19.9/src/Development/Shake/Internal/Rules/Rerun.hs
-formatted       25ffba5bb7e7  shake-0.19.9/src/Development/Shake/Internal/Value.hs
-formatted       4f57cc655ba3  shake-0.19.9/src/Development/Shake/Rule.hs
-formatted       2df0d77b7d5c  shake-0.19.9/src/Development/Shake/Util.hs
-formatted       796b5a76fb8c  shake-0.19.9/src/General/Bilist.hs
-formatted       a2e9bfc4e206  shake-0.19.9/src/General/Binary.hs
-formatted       0208bf728797  shake-0.19.9/src/General/Chunks.hs
-formatted       d8ae6dd155de  shake-0.19.9/src/General/Cleanup.hs
-declined        -             shake-0.19.9/src/General/EscCodes.hs
-formatted       5c8c7f7e8bf2  shake-0.19.9/src/General/Extra.hs
-formatted       6ac31a44af53  shake-0.19.9/src/General/Fence.hs
-declined        -             shake-0.19.9/src/General/FileLock.hs
-formatted       4813c23ad42d  shake-0.19.9/src/General/GetOpt.hs
-formatted       5efc029ad726  shake-0.19.9/src/General/Ids.hs
-formatted       9126ed0fbd34  shake-0.19.9/src/General/Intern.hs
-formatted       5049f87854f9  shake-0.19.9/src/General/ListBuilder.hs
-formatted       54fa4898327b  shake-0.19.9/src/General/Makefile.hs
-formatted       e1829b34f218  shake-0.19.9/src/General/Pool.hs
-formatted       4e88a21092ea  shake-0.19.9/src/General/Process.hs
-formatted       0d39543216b1  shake-0.19.9/src/General/Template.hs
-formatted       20e74944695a  shake-0.19.9/src/General/Thread.hs
-formatted       b9b9368bdf92  shake-0.19.9/src/General/Timing.hs
-formatted       f1cfb5928cdc  shake-0.19.9/src/General/TypeMap.hs
-formatted       8d69ed0989cc  shake-0.19.9/src/General/Wait.hs
-formatted       4743f12ee1b5  shake-0.19.9/src/Paths.hs
-formatted       80112aa74398  shake-0.19.9/src/Run.hs
-formatted       e59791013e00  shake-0.19.9/src/Test.hs
-formatted       8559d6daa99e  shake-0.19.9/src/Test/Basic.hs
-formatted       93ef4d632053  shake-0.19.9/src/Test/Batch.hs
-formatted       9817e09728fc  shake-0.19.9/src/Test/Benchmark.hs
-formatted       72e8b4ab4dea  shake-0.19.9/src/Test/Builtin.hs
-formatted       48ec6eca2417  shake-0.19.9/src/Test/BuiltinOverride.hs
-formatted       10efc06e6c7b  shake-0.19.9/src/Test/C.hs
-formatted       53e433c2fd6d  shake-0.19.9/src/Test/Cache.hs
-formatted       2d7ccbb45ced  shake-0.19.9/src/Test/Cleanup.hs
-formatted       448b76c4e03f  shake-0.19.9/src/Test/CloseFileHandles.hs
-formatted       52e8e06b790c  shake-0.19.9/src/Test/Command.hs
-formatted       5ea96ce5a74d  shake-0.19.9/src/Test/Config.hs
-formatted       42fd949d6eef  shake-0.19.9/src/Test/Database.hs
-formatted       e8ca948ce33e  shake-0.19.9/src/Test/Digest.hs
-formatted       9b70158e614d  shake-0.19.9/src/Test/Directory.hs
-formatted       6bbe2ff03da5  shake-0.19.9/src/Test/Docs.hs
-formatted       7425a9004035  shake-0.19.9/src/Test/Errors.hs
-formatted       b698eeb22c5b  shake-0.19.9/src/Test/Existence.hs
-formatted       33dfd1039065  shake-0.19.9/src/Test/FileLock.hs
-formatted       53f9a23d9106  shake-0.19.9/src/Test/FilePath.hs
-formatted       f735f16c91d5  shake-0.19.9/src/Test/FilePattern.hs
-formatted       7f088d1e23e6  shake-0.19.9/src/Test/Files.hs
-formatted       f46b5feb3e77  shake-0.19.9/src/Test/Forward.hs
-formatted       07a41b0c82df  shake-0.19.9/src/Test/History.hs
-formatted       a6278c0f744f  shake-0.19.9/src/Test/Journal.hs
-formatted       ea3088aef841  shake-0.19.9/src/Test/Lint.hs
-formatted       abb6b38a5148  shake-0.19.9/src/Test/Live.hs
-formatted       b1f4f9102098  shake-0.19.9/src/Test/Manual.hs
-formatted       0ea86eab061d  shake-0.19.9/src/Test/Match.hs
-formatted       3358afb343e9  shake-0.19.9/src/Test/Monad.hs
-formatted       30eaa5d85dba  shake-0.19.9/src/Test/Ninja.hs
-formatted       78f51e13afdb  shake-0.19.9/src/Test/Oracle.hs
-formatted       3a29cbe0f415  shake-0.19.9/src/Test/OrderOnly.hs
-formatted       11c7d4112a98  shake-0.19.9/src/Test/Parallel.hs
-formatted       af1e17f9eab1  shake-0.19.9/src/Test/Pool.hs
-formatted       278a912d8e40  shake-0.19.9/src/Test/Progress.hs
-formatted       8f84d993fd5b  shake-0.19.9/src/Test/Random.hs
-formatted       2cbfb37c7d59  shake-0.19.9/src/Test/Rebuild.hs
-formatted       685ecba8ab37  shake-0.19.9/src/Test/Reschedule.hs
-formatted       a4beab4d5e04  shake-0.19.9/src/Test/Resources.hs
-formatted       4c2e03f5a06d  shake-0.19.9/src/Test/Self.hs
-formatted       f161b0f0a749  shake-0.19.9/src/Test/SelfMake.hs
-formatted       ce7a14c40a6c  shake-0.19.9/src/Test/Tar.hs
-formatted       010efc5cef7a  shake-0.19.9/src/Test/Targets.hs
-formatted       2ada3fd9cfe5  shake-0.19.9/src/Test/Thread.hs
-formatted       54ac2eb76326  shake-0.19.9/src/Test/Tup.hs
-formatted       306bd01403f4  shake-0.19.9/src/Test/Type.hs
-formatted       068337f03a57  shake-0.19.9/src/Test/Unicode.hs
-formatted       312e45ba1b16  shake-0.19.9/src/Test/Util.hs
-formatted       6649fd7b7e4a  shake-0.19.9/src/Test/Verbosity.hs
-formatted       f32aa5af75ac  shake-0.19.9/src/Test/Version.hs
-formatted       a7151db2ed5c  split-0.2.5/src/Data/List/Split.hs
-formatted       63fb58665984  split-0.2.5/src/Data/List/Split/Internals.hs
-formatted       1c394a59af79  split-0.2.5/test/Properties.hs
-formatted       e865ae48f11b  stack-9.9.9/Setup.hs
-formatted       e865ae48f11b  stack-9.9.9/new-template/Setup.hs
-formatted       76b6ff5a6856  stack-9.9.9/new-template/app/Main.hs
-formatted       b206a21d3b3c  stack-9.9.9/new-template/src/Lib.hs
-formatted       ef8d1c0c14bd  stack-9.9.9/new-template/test/Spec.hs
-formatted       2cb36e6bb1bb  stack-9.9.9/src/Control/Concurrent/Execute.hs
-formatted       de0bbff44bba  stack-9.9.9/src/Data/Aeson/Extended.hs
-formatted       45b24cbb6885  stack-9.9.9/src/Data/Attoparsec/Args.hs
-formatted       6be772a6002d  stack-9.9.9/src/Data/Attoparsec/Combinators.hs
-formatted       e4f1165dc10b  stack-9.9.9/src/Data/Binary/VersionTagged.hs
-formatted       b0799314dce2  stack-9.9.9/src/Data/Maybe/Extra.hs
-formatted       8740a5fcb2ef  stack-9.9.9/src/Data/Set/Monad.hs
-formatted       40389f299346  stack-9.9.9/src/Network/HTTP/Download.hs
-formatted       9e93dca6ce44  stack-9.9.9/src/Network/HTTP/Download/Verified.hs
-formatted       d7a0d294e3c7  stack-9.9.9/src/Options/Applicative/Args.hs
-formatted       0116483c0e39  stack-9.9.9/src/Options/Applicative/Builder/Extra.hs
-formatted       35d5981b158d  stack-9.9.9/src/Path/Find.hs
-formatted       eafb883091d5  stack-9.9.9/src/Path/IO.hs
-formatted       2df07688f5ed  stack-9.9.9/src/Stack/Build.hs
-formatted       bdc4f36f2c62  stack-9.9.9/src/Stack/Build/Cache.hs
-formatted       846d984fa5a3  stack-9.9.9/src/Stack/Build/ConstructPlan.hs
-formatted       335c39b2a711  stack-9.9.9/src/Stack/Build/Execute.hs
-formatted       c154ec698482  stack-9.9.9/src/Stack/Build/Haddock.hs
-formatted       d45c6e3e96c6  stack-9.9.9/src/Stack/Build/Installed.hs
-formatted       8f851999c795  stack-9.9.9/src/Stack/Build/Source.hs
-formatted       4d0e41188711  stack-9.9.9/src/Stack/Build/Types.hs
-formatted       c422573c7530  stack-9.9.9/src/Stack/BuildPlan.hs
-formatted       dc215b9523e2  stack-9.9.9/src/Stack/Config.hs
-formatted       db186c830bf3  stack-9.9.9/src/Stack/Constants.hs
-formatted       655fc3d77d9a  stack-9.9.9/src/Stack/Docker.hs
-formatted       7dac02fa726c  stack-9.9.9/src/Stack/Docker/GlobalDB.hs
-formatted       7d15eaae39ff  stack-9.9.9/src/Stack/Dot.hs
-formatted       e3fe02818737  stack-9.9.9/src/Stack/Exec.hs
-formatted       44beb7f3ec53  stack-9.9.9/src/Stack/Fetch.hs
-formatted       667b523cf3db  stack-9.9.9/src/Stack/GhcPkg.hs
-formatted       733ecb413de7  stack-9.9.9/src/Stack/Init.hs
-formatted       9f228f8da7ce  stack-9.9.9/src/Stack/New.hs
-formatted       ebbee12a77fc  stack-9.9.9/src/Stack/Package.hs
-formatted       a4d6c3332390  stack-9.9.9/src/Stack/PackageDump.hs
-formatted       2b3785c57355  stack-9.9.9/src/Stack/PackageIndex.hs
-formatted       2814387b2b76  stack-9.9.9/src/Stack/Repl.hs
-formatted       8d70e82cb03c  stack-9.9.9/src/Stack/Setup.hs
-formatted       68c48310e4ce  stack-9.9.9/src/Stack/Solver.hs
-formatted       ebbf896669e4  stack-9.9.9/src/Stack/Types.hs
-formatted       4f7543f1a686  stack-9.9.9/src/Stack/Types/BuildPlan.hs
-formatted       38eedeb37ea4  stack-9.9.9/src/Stack/Types/Config.hs
-formatted       dc9a426c72cd  stack-9.9.9/src/Stack/Types/Docker.hs
-formatted       cd2bb0d685de  stack-9.9.9/src/Stack/Types/FlagName.hs
-formatted       d8f8b074a086  stack-9.9.9/src/Stack/Types/GhcPkgId.hs
-formatted       bd4be7dcc823  stack-9.9.9/src/Stack/Types/Internal.hs
-formatted       6f80f79fae7e  stack-9.9.9/src/Stack/Types/PackageIdentifier.hs
-formatted       88a4f8bd73e5  stack-9.9.9/src/Stack/Types/PackageName.hs
-formatted       bcc9e5fa699d  stack-9.9.9/src/Stack/Types/StackT.hs
-formatted       403717ac1cf2  stack-9.9.9/src/Stack/Types/Version.hs
-formatted       2f4855580908  stack-9.9.9/src/Stack/Upgrade.hs
-formatted       e1e4da453112  stack-9.9.9/src/Stack/Upload.hs
-formatted       85d5e680f53b  stack-9.9.9/src/System/Process/Log.hs
-formatted       015e3efd2d86  stack-9.9.9/src/System/Process/PagerEditor.hs
-formatted       3d6b7b0e58e8  stack-9.9.9/src/System/Process/Read.hs
-formatted       c40dad9ce8ee  stack-9.9.9/src/System/Process/Run.hs
-formatted       fc7e2b25ab4e  stack-9.9.9/src/main/Main.hs
-formatted       4eec70869c80  stack-9.9.9/src/main/Plugins.hs
-formatted       50b246d28182  stack-9.9.9/src/main/Plugins/Commands.hs
-formatted       65c8c298f7aa  stack-9.9.9/src/test/Spec.hs
-formatted       bbf9464a53ee  stack-9.9.9/src/test/Stack/ArgsSpec.hs
-formatted       41ea23b8880f  stack-9.9.9/src/test/Stack/Build/ExecuteSpec.hs
-formatted       38d5f430f742  stack-9.9.9/src/test/Stack/BuildPlanSpec.hs
-formatted       8f505819b19a  stack-9.9.9/src/test/Stack/ConfigSpec.hs
-formatted       2d4cbcc98b0c  stack-9.9.9/src/test/Stack/PackageDumpSpec.hs
-formatted       fd075df62297  stack-9.9.9/src/test/Test.hs
-formatted       53953d153dfa  stack-9.9.9/test/integration/Spec.hs
-formatted       56e4e5258116  statistics-0.16.5.0/Statistics/Autocorrelation.hs
-formatted       bda03074d5aa  statistics-0.16.5.0/Statistics/ConfidenceInt.hs
-formatted       069d7156f594  statistics-0.16.5.0/Statistics/Correlation.hs
-formatted       9ba74f547b39  statistics-0.16.5.0/Statistics/Correlation/Kendall.hs
-formatted       bbd4e3259f36  statistics-0.16.5.0/Statistics/Distribution.hs
-formatted       ae8ad80251ff  statistics-0.16.5.0/Statistics/Distribution/Beta.hs
-formatted       7b32fc5b6cfc  statistics-0.16.5.0/Statistics/Distribution/Binomial.hs
-formatted       23f140cdf9bc  statistics-0.16.5.0/Statistics/Distribution/CauchyLorentz.hs
-formatted       dc30bfda499d  statistics-0.16.5.0/Statistics/Distribution/ChiSquared.hs
-formatted       f4734696df71  statistics-0.16.5.0/Statistics/Distribution/DiscreteUniform.hs
-formatted       cc3d61a22aa0  statistics-0.16.5.0/Statistics/Distribution/Exponential.hs
-formatted       5d35b356cb29  statistics-0.16.5.0/Statistics/Distribution/FDistribution.hs
-formatted       1258f180d7c0  statistics-0.16.5.0/Statistics/Distribution/Gamma.hs
-formatted       97a9584986c7  statistics-0.16.5.0/Statistics/Distribution/Geometric.hs
-formatted       e05ef1359929  statistics-0.16.5.0/Statistics/Distribution/Hypergeometric.hs
-formatted       ca93eabbbf15  statistics-0.16.5.0/Statistics/Distribution/Laplace.hs
-formatted       1e363f04365e  statistics-0.16.5.0/Statistics/Distribution/Lognormal.hs
-formatted       f5cce916fd78  statistics-0.16.5.0/Statistics/Distribution/NegativeBinomial.hs
-formatted       fb17da6ed19d  statistics-0.16.5.0/Statistics/Distribution/Normal.hs
-formatted       1bbb63345a51  statistics-0.16.5.0/Statistics/Distribution/Poisson.hs
-formatted       fb54f6de83df  statistics-0.16.5.0/Statistics/Distribution/Poisson/Internal.hs
-formatted       f2dd661c1f1a  statistics-0.16.5.0/Statistics/Distribution/StudentT.hs
-formatted       06505b01e90a  statistics-0.16.5.0/Statistics/Distribution/Transform.hs
-formatted       ead3df94c4d5  statistics-0.16.5.0/Statistics/Distribution/Uniform.hs
-formatted       bd8bb4f92c76  statistics-0.16.5.0/Statistics/Distribution/Weibull.hs
-formatted       1a6eda2dc778  statistics-0.16.5.0/Statistics/Function.hs
-formatted       4ce5ca3ee348  statistics-0.16.5.0/Statistics/Internal.hs
-formatted       86e8d1a0a535  statistics-0.16.5.0/Statistics/Quantile.hs
-formatted       4eb8961889ae  statistics-0.16.5.0/Statistics/Regression.hs
-formatted       535c5c96b342  statistics-0.16.5.0/Statistics/Resampling.hs
-formatted       76d271403a9e  statistics-0.16.5.0/Statistics/Resampling/Bootstrap.hs
-formatted       cc05168e10be  statistics-0.16.5.0/Statistics/Sample.hs
-formatted       24ce2ba6d88a  statistics-0.16.5.0/Statistics/Sample/Histogram.hs
-formatted       cab9e68a7e21  statistics-0.16.5.0/Statistics/Sample/Internal.hs
-formatted       43f665ddfdd4  statistics-0.16.5.0/Statistics/Sample/KernelDensity.hs
-formatted       57cb926959b9  statistics-0.16.5.0/Statistics/Sample/KernelDensity/Simple.hs
-formatted       e7d037eb7906  statistics-0.16.5.0/Statistics/Sample/Normalize.hs
-formatted       1242733971ab  statistics-0.16.5.0/Statistics/Sample/Powers.hs
-formatted       a2b672b48aca  statistics-0.16.5.0/Statistics/Test/Bartlett.hs
-formatted       da8b73ff5c88  statistics-0.16.5.0/Statistics/Test/ChiSquared.hs
-formatted       4990518d53f6  statistics-0.16.5.0/Statistics/Test/Internal.hs
-formatted       e5d5a7822558  statistics-0.16.5.0/Statistics/Test/KolmogorovSmirnov.hs
-formatted       68068b68b9a0  statistics-0.16.5.0/Statistics/Test/KruskalWallis.hs
-formatted       6e9db487a147  statistics-0.16.5.0/Statistics/Test/Levene.hs
-formatted       a4c13293539e  statistics-0.16.5.0/Statistics/Test/MannWhitneyU.hs
-formatted       63ad198bde51  statistics-0.16.5.0/Statistics/Test/StudentT.hs
-formatted       8222073f1e45  statistics-0.16.5.0/Statistics/Test/Types.hs
-formatted       f3c789b5cb44  statistics-0.16.5.0/Statistics/Test/WilcoxonT.hs
-formatted       4dc98e7c6347  statistics-0.16.5.0/Statistics/Transform.hs
-formatted       f4cfb5a2aebb  statistics-0.16.5.0/Statistics/Types.hs
-formatted       f071cb4c4814  statistics-0.16.5.0/Statistics/Types/Internal.hs
-formatted       b5402a2dc355  statistics-0.16.5.0/bench-papi/Bench.hs
-formatted       3963835f0889  statistics-0.16.5.0/bench-time/Bench.hs
-formatted       61d4105d3456  statistics-0.16.5.0/benchmark/Main.hs
-formatted       d80f7bf6f96d  statistics-0.16.5.0/examples/kde/KDE.hs
-formatted       dcea40eeb511  statistics-0.16.5.0/tests/Tests/ApproxEq.hs
-formatted       2ae25961f71d  statistics-0.16.5.0/tests/Tests/Correlation.hs
-formatted       b0317e3f9b24  statistics-0.16.5.0/tests/Tests/Distribution.hs
-formatted       3d4db70bc7ca  statistics-0.16.5.0/tests/Tests/ExactDistribution.hs
-formatted       299f43f28485  statistics-0.16.5.0/tests/Tests/Function.hs
-formatted       9c5a618f3bf1  statistics-0.16.5.0/tests/Tests/Helpers.hs
-formatted       fec77bb7c2ff  statistics-0.16.5.0/tests/Tests/KDE.hs
-formatted       cf822ef362eb  statistics-0.16.5.0/tests/Tests/Matrix.hs
-formatted       27d419347379  statistics-0.16.5.0/tests/Tests/Matrix/Types.hs
-formatted       ea56dc62a57a  statistics-0.16.5.0/tests/Tests/NonParametric.hs
-formatted       4d0172724882  statistics-0.16.5.0/tests/Tests/NonParametric/Table.hs
-formatted       65adfee8e313  statistics-0.16.5.0/tests/Tests/Orphanage.hs
-formatted       bc01b981cd07  statistics-0.16.5.0/tests/Tests/Parametric.hs
-formatted       bb2edc2f982d  statistics-0.16.5.0/tests/Tests/Quantile.hs
-formatted       4e08d3c82170  statistics-0.16.5.0/tests/Tests/Serialization.hs
-formatted       d60faa0d5f6c  statistics-0.16.5.0/tests/Tests/Transform.hs
-formatted       55f699624c9d  statistics-0.16.5.0/tests/doctest.hs
-formatted       f0e3d45c9159  statistics-0.16.5.0/tests/tests.hs
-formatted       2c4811cee336  stm-2.5.3.1/Control/Concurrent/STM.hs
-formatted       fd81deb0a4a0  stm-2.5.3.1/Control/Concurrent/STM/TArray.hs
-formatted       9e9c5d20cb7c  stm-2.5.3.1/Control/Concurrent/STM/TBQueue.hs
-formatted       643c4c4304ca  stm-2.5.3.1/Control/Concurrent/STM/TChan.hs
-formatted       5de1c73d983a  stm-2.5.3.1/Control/Concurrent/STM/TMVar.hs
-formatted       4fabec7ab606  stm-2.5.3.1/Control/Concurrent/STM/TQueue.hs
-formatted       0167cfd0c06a  stm-2.5.3.1/Control/Concurrent/STM/TSem.hs
-formatted       6a0ece958ded  stm-2.5.3.1/Control/Concurrent/STM/TVar.hs
-partly-checked  6aa0575474c4  stm-2.5.3.1/Control/Monad/STM.hs
-formatted       6aecb29a12ab  stm-2.5.3.1/Control/Sequential/STM.hs
-formatted       7474b7e1d4f5  stm-2.5.3.1/Setup.hs
-formatted       e290291970ca  stm-2.5.3.1/testsuite/src/Issue17.hs
-formatted       c3343c4d48cb  stm-2.5.3.1/testsuite/src/Issue9.hs
-formatted       9159857aaf7c  stm-2.5.3.1/testsuite/src/Main.hs
-formatted       5a7bdca5eb2f  stm-2.5.3.1/testsuite/src/Stm052.hs
-formatted       9b30ce222d29  stm-2.5.3.1/testsuite/src/Stm064.hs
-formatted       0f86f9b94d82  stm-2.5.3.1/testsuite/src/Stm065.hs
-formatted       0872066614e0  swagger2-2.9.1/Setup.hs
-formatted       e53974342c33  swagger2-2.9.1/examples/hackage.hs
-formatted       bbac1d7e9767  swagger2-2.9.1/src/Data/HashMap/Strict/InsOrd/Compat.hs
-formatted       d71d272f220f  swagger2-2.9.1/src/Data/Swagger.hs
-formatted       3a66f17ffe6b  swagger2-2.9.1/src/Data/Swagger/Declare.hs
-formatted       3d36b503c6bf  swagger2-2.9.1/src/Data/Swagger/Internal.hs
-formatted       7dfa5b7b4803  swagger2-2.9.1/src/Data/Swagger/Internal/AesonUtils.hs
-formatted       be2b0df4ab34  swagger2-2.9.1/src/Data/Swagger/Internal/ParamSchema.hs
-formatted       e4da8109511e  swagger2-2.9.1/src/Data/Swagger/Internal/Schema.hs
-formatted       eb4f3c8c3253  swagger2-2.9.1/src/Data/Swagger/Internal/Schema/Validation.hs
-formatted       185e997df260  swagger2-2.9.1/src/Data/Swagger/Internal/TypeShape.hs
-formatted       abc8c961e8d8  swagger2-2.9.1/src/Data/Swagger/Internal/Utils.hs
-formatted       fac02daa06aa  swagger2-2.9.1/src/Data/Swagger/Lens.hs
-formatted       69c86ada5be4  swagger2-2.9.1/src/Data/Swagger/Operation.hs
-formatted       385ee16b2de5  swagger2-2.9.1/src/Data/Swagger/Optics.hs
-formatted       b74d3f8d9ea4  swagger2-2.9.1/src/Data/Swagger/ParamSchema.hs
-formatted       19a9a7c3a0de  swagger2-2.9.1/src/Data/Swagger/Schema.hs
-formatted       59f835605e15  swagger2-2.9.1/src/Data/Swagger/Schema/Generator.hs
-formatted       7770e1fe2353  swagger2-2.9.1/src/Data/Swagger/Schema/Validation.hs
-formatted       2fd313eb8746  swagger2-2.9.1/src/Data/Swagger/SchemaOptions.hs
-formatted       151ebac1c141  swagger2-2.9.1/test/Data/Swagger/CommonTestTypes.hs
-formatted       88ae3e07f1d6  swagger2-2.9.1/test/Data/Swagger/ParamSchemaSpec.hs
-formatted       ba8d29dd4929  swagger2-2.9.1/test/Data/Swagger/Schema/GeneratorSpec.hs
-formatted       2bbe75a01f34  swagger2-2.9.1/test/Data/Swagger/Schema/ValidationSpec.hs
-formatted       bc07fee39679  swagger2-2.9.1/test/Data/Swagger/SchemaSpec.hs
-formatted       b59e746b8895  swagger2-2.9.1/test/Data/SwaggerSpec.hs
-formatted       2fbd14b119a4  swagger2-2.9.1/test/Spec.hs
-formatted       1534dc51af48  swagger2-2.9.1/test/SpecCommon.hs
-formatted       cc17d35cb01d  swagger2-2.9.1/test/doctests.hs
-formatted       2620b9109dd2  tasty-1.5.4/Control/Concurrent/Async.hs
-formatted       e865ae48f11b  tasty-1.5.4/Setup.hs
-formatted       02df8ffe2eb3  tasty-1.5.4/Test/Tasty.hs
-formatted       244024ebd276  tasty-1.5.4/Test/Tasty/CmdLine.hs
-formatted       aaf8f6f4fdaf  tasty-1.5.4/Test/Tasty/Core.hs
-formatted       dd00b52edeb7  tasty-1.5.4/Test/Tasty/Ingredients.hs
-formatted       9e13d30f1aac  tasty-1.5.4/Test/Tasty/Ingredients/Basic.hs
-formatted       4ed0611c5431  tasty-1.5.4/Test/Tasty/Ingredients/ConsoleReporter.hs
-formatted       8c6cf8ae3d46  tasty-1.5.4/Test/Tasty/Ingredients/IncludingOptions.hs
-formatted       095b09b1c146  tasty-1.5.4/Test/Tasty/Ingredients/ListTests.hs
-formatted       26649d291142  tasty-1.5.4/Test/Tasty/Options.hs
-formatted       ebd9fd9c2ca5  tasty-1.5.4/Test/Tasty/Options/Core.hs
-formatted       d9fbf61e13b4  tasty-1.5.4/Test/Tasty/Options/Env.hs
-formatted       bc3c7e134e5c  tasty-1.5.4/Test/Tasty/Parallel.hs
-formatted       d8b2acdcc674  tasty-1.5.4/Test/Tasty/Patterns.hs
-formatted       0d97fca4d8c9  tasty-1.5.4/Test/Tasty/Patterns/Eval.hs
-formatted       4d5e43449879  tasty-1.5.4/Test/Tasty/Patterns/Expr.hs
-formatted       29b2bd9b3c0c  tasty-1.5.4/Test/Tasty/Patterns/Parser.hs
-formatted       3b88b836a8da  tasty-1.5.4/Test/Tasty/Patterns/Printer.hs
-formatted       76352e15e8e6  tasty-1.5.4/Test/Tasty/Patterns/Types.hs
-formatted       b2ce3b3d2ba6  tasty-1.5.4/Test/Tasty/Providers.hs
-formatted       1e9dd494aa0d  tasty-1.5.4/Test/Tasty/Providers/ConsoleFormat.hs
-formatted       00b00e15f6b6  tasty-1.5.4/Test/Tasty/Run.hs
-formatted       cb5862c8ea8c  tasty-1.5.4/Test/Tasty/Runners.hs
-formatted       2b0086f6772b  tasty-1.5.4/Test/Tasty/Runners/Reducers.hs
-formatted       b1a27c0f0bde  tasty-1.5.4/Test/Tasty/Runners/Utils.hs
-formatted       e865ae48f11b  tensorflow-0.2.0.1/Setup.hs
-formatted       1f1f98c9417e  tensorflow-0.2.0.1/src/TensorFlow/Build.hs
-formatted       6a8867b44ef1  tensorflow-0.2.0.1/src/TensorFlow/BuildOp.hs
-formatted       77489c8b8f87  tensorflow-0.2.0.1/src/TensorFlow/ControlFlow.hs
-formatted       4cc5cc869f78  tensorflow-0.2.0.1/src/TensorFlow/Core.hs
-formatted       76a2093eefd8  tensorflow-0.2.0.1/src/TensorFlow/Internal/FFI.hs
-formatted       62d7a0995301  tensorflow-0.2.0.1/src/TensorFlow/Internal/VarInt.hs
-formatted       33a0218dc730  tensorflow-0.2.0.1/src/TensorFlow/Nodes.hs
-formatted       575aa8d6acdd  tensorflow-0.2.0.1/src/TensorFlow/Output.hs
-formatted       969822ad8386  tensorflow-0.2.0.1/src/TensorFlow/Session.hs
-formatted       2456b562c83a  tensorflow-0.2.0.1/src/TensorFlow/Tensor.hs
-formatted       60f3e396af96  tensorflow-0.2.0.1/src/TensorFlow/Types.hs
-formatted       7786d8f90a48  tensorflow-0.2.0.1/tests/FFITest.hs
-formatted       0f5db84dd77b  tensorflow-0.2.0.1/tests/VarIntTest.hs
-formatted       8ae0364c5862  text-2.1.4/benchmarks/haskell/Benchmarks.hs
-formatted       ffe091bc4536  text-2.1.4/benchmarks/haskell/Benchmarks/Builder.hs
-formatted       46dcd64eb8e5  text-2.1.4/benchmarks/haskell/Benchmarks/Concat.hs
-formatted       1e546a146930  text-2.1.4/benchmarks/haskell/Benchmarks/DecodeUtf8.hs
-formatted       41909e2de312  text-2.1.4/benchmarks/haskell/Benchmarks/EncodeUtf8.hs
-formatted       919f36b12c57  text-2.1.4/benchmarks/haskell/Benchmarks/Equality.hs
-formatted       a5d1f5795b29  text-2.1.4/benchmarks/haskell/Benchmarks/FileRead.hs
-formatted       09b54ec2d23a  text-2.1.4/benchmarks/haskell/Benchmarks/FileWrite.hs
-formatted       ad27e899bf04  text-2.1.4/benchmarks/haskell/Benchmarks/FoldLines.hs
-formatted       983d6f9117cd  text-2.1.4/benchmarks/haskell/Benchmarks/Micro.hs
-formatted       78b2688949ff  text-2.1.4/benchmarks/haskell/Benchmarks/Multilang.hs
-formatted       6ee308d7049c  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/BigTable.hs
-formatted       b1d195224e1a  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/Cut.hs
-formatted       2814a67c6d1b  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/Fold.hs
-formatted       2cebf4fe82ba  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/Sort.hs
-formatted       d9f35273ed3a  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/StripTags.hs
-formatted       760d861cf866  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/Throughput.hs
-formatted       5126bd0f0a93  text-2.1.4/benchmarks/haskell/Benchmarks/Pure.hs
-formatted       e54e95cc30f1  text-2.1.4/benchmarks/haskell/Benchmarks/ReadNumbers.hs
-formatted       bf7477bd4934  text-2.1.4/benchmarks/haskell/Benchmarks/Replace.hs
-formatted       36cf43ee1086  text-2.1.4/benchmarks/haskell/Benchmarks/Search.hs
-formatted       ce632d47d038  text-2.1.4/benchmarks/haskell/Benchmarks/Stream.hs
-formatted       582c824b5ff5  text-2.1.4/benchmarks/haskell/Benchmarks/WordFrequencies.hs
-formatted       352931675b25  text-2.1.4/scripts/ApiCompare.hs
-formatted       227860122661  text-2.1.4/scripts/Arsec.hs
-formatted       a2272b1457ad  text-2.1.4/scripts/CaseFolding.hs
-formatted       a0bdad468ca4  text-2.1.4/scripts/CaseMapping.hs
-formatted       50cd030932e1  text-2.1.4/scripts/SpecialCasing.hs
-formatted       d775bb623580  text-2.1.4/scripts/UnicodeData.hs
-partly-checked  08b3c96288dc  text-2.1.4/src/Data/Text.hs
-formatted       5b72823ffe98  text-2.1.4/src/Data/Text/Array.hs
-formatted       4970b89f4e7e  text-2.1.4/src/Data/Text/Encoding.hs
-formatted       d6231f7ebe99  text-2.1.4/src/Data/Text/Encoding/Error.hs
-formatted       7580816061c0  text-2.1.4/src/Data/Text/Foreign.hs
-formatted       d1ee1d8d8964  text-2.1.4/src/Data/Text/IO.hs
-formatted       8c24fec0de81  text-2.1.4/src/Data/Text/IO/Utf8.hs
-formatted       8c62dc2df371  text-2.1.4/src/Data/Text/Internal.hs
-formatted       48c631518261  text-2.1.4/src/Data/Text/Internal/ArrayUtils.hs
-formatted       e5f93165747b  text-2.1.4/src/Data/Text/Internal/Builder.hs
-formatted       3a05c951a914  text-2.1.4/src/Data/Text/Internal/Builder/Functions.hs
-formatted       f5f871c975a4  text-2.1.4/src/Data/Text/Internal/Builder/Int/Digits.hs
-formatted       ab51e88834e1  text-2.1.4/src/Data/Text/Internal/Builder/RealFloat/Functions.hs
-formatted       7fa192160c9b  text-2.1.4/src/Data/Text/Internal/ByteStringCompat.hs
-formatted       370cd9150da5  text-2.1.4/src/Data/Text/Internal/Encoding.hs
-formatted       43a1a670b3db  text-2.1.4/src/Data/Text/Internal/Encoding/Fusion.hs
-formatted       07ceae987c37  text-2.1.4/src/Data/Text/Internal/Encoding/Fusion/Common.hs
-formatted       875961737225  text-2.1.4/src/Data/Text/Internal/Encoding/Utf16.hs
-formatted       48ea4745d7e8  text-2.1.4/src/Data/Text/Internal/Encoding/Utf32.hs
-formatted       999f28ae046f  text-2.1.4/src/Data/Text/Internal/Encoding/Utf8.hs
-formatted       9b74d0d7d95a  text-2.1.4/src/Data/Text/Internal/Fusion.hs
-formatted       9ae139203b50  text-2.1.4/src/Data/Text/Internal/Fusion/CaseMapping.hs
-formatted       0858f0992142  text-2.1.4/src/Data/Text/Internal/Fusion/Common.hs
-formatted       eb26e26b5392  text-2.1.4/src/Data/Text/Internal/Fusion/Size.hs
-formatted       a8149e253de6  text-2.1.4/src/Data/Text/Internal/Fusion/Types.hs
-formatted       e8fe9af0fd3d  text-2.1.4/src/Data/Text/Internal/IO.hs
-formatted       e2bb47936e11  text-2.1.4/src/Data/Text/Internal/IsAscii.hs
-formatted       538632ba614a  text-2.1.4/src/Data/Text/Internal/Lazy.hs
-formatted       513ae58ba231  text-2.1.4/src/Data/Text/Internal/Lazy/Encoding/Fusion.hs
-formatted       c627413119e8  text-2.1.4/src/Data/Text/Internal/Lazy/Fusion.hs
-formatted       a3c76abdf09c  text-2.1.4/src/Data/Text/Internal/Lazy/Search.hs
-formatted       7eee07692410  text-2.1.4/src/Data/Text/Internal/Measure.hs
-formatted       7635d57189ea  text-2.1.4/src/Data/Text/Internal/PrimCompat.hs
-formatted       634f3b2cbbde  text-2.1.4/src/Data/Text/Internal/Private.hs
-formatted       a41bd3d7edab  text-2.1.4/src/Data/Text/Internal/Read.hs
-formatted       ec56c867ca01  text-2.1.4/src/Data/Text/Internal/Reverse.hs
-formatted       eff6a5ffb928  text-2.1.4/src/Data/Text/Internal/Search.hs
-formatted       67bf06cca611  text-2.1.4/src/Data/Text/Internal/StrictBuilder.hs
-formatted       a739bca575a2  text-2.1.4/src/Data/Text/Internal/Transformation.hs
-formatted       18ae86a38924  text-2.1.4/src/Data/Text/Internal/Unsafe.hs
-formatted       d3b144e675ef  text-2.1.4/src/Data/Text/Internal/Unsafe/Char.hs
-formatted       66e47e950ff0  text-2.1.4/src/Data/Text/Internal/Validate.hs
-formatted       ef7a4a273c4d  text-2.1.4/src/Data/Text/Internal/Validate/Native.hs
-formatted       530d639cfd22  text-2.1.4/src/Data/Text/Internal/Validate/Simd.hs
-formatted       6d4a57a9277a  text-2.1.4/src/Data/Text/Lazy.hs
-formatted       38ff2d7cb674  text-2.1.4/src/Data/Text/Lazy/Builder.hs
-formatted       38666af96d86  text-2.1.4/src/Data/Text/Lazy/Builder/Int.hs
-formatted       29e65f5a5a13  text-2.1.4/src/Data/Text/Lazy/Builder/RealFloat.hs
-formatted       a19c3620d230  text-2.1.4/src/Data/Text/Lazy/Encoding.hs
-formatted       b420221eedf6  text-2.1.4/src/Data/Text/Lazy/IO.hs
-formatted       737ca3b98c79  text-2.1.4/src/Data/Text/Lazy/Internal.hs
-formatted       4053796b9111  text-2.1.4/src/Data/Text/Lazy/Read.hs
-formatted       95185ba2e9b4  text-2.1.4/src/Data/Text/Read.hs
-formatted       1140737c74af  text-2.1.4/src/Data/Text/Show.hs
-formatted       5aa1e6b706a4  text-2.1.4/src/Data/Text/Unsafe.hs
-formatted       8c35444bb7ce  text-2.1.4/tests/LiteralRuleTest.hs
-formatted       6c129d5c79c5  text-2.1.4/tests/Tests.hs
-formatted       8c9ba4deec7f  text-2.1.4/tests/Tests/Lift.hs
-formatted       eea1f5be128d  text-2.1.4/tests/Tests/Properties.hs
-formatted       a1795fe9db0d  text-2.1.4/tests/Tests/Properties/Basics.hs
-formatted       4095b24da789  text-2.1.4/tests/Tests/Properties/Builder.hs
-formatted       0da554ece794  text-2.1.4/tests/Tests/Properties/CornerCases.hs
-formatted       966d6896eccc  text-2.1.4/tests/Tests/Properties/Folds.hs
-formatted       05ba3e128127  text-2.1.4/tests/Tests/Properties/Instances.hs
-formatted       85722c4277cd  text-2.1.4/tests/Tests/Properties/LowLevel.hs
-formatted       73ce8ac597c8  text-2.1.4/tests/Tests/Properties/Read.hs
-formatted       3429b9447ca6  text-2.1.4/tests/Tests/Properties/Substrings.hs
-formatted       bc4a76ea99f3  text-2.1.4/tests/Tests/Properties/Text.hs
-formatted       8c294303c64a  text-2.1.4/tests/Tests/Properties/Transcoding.hs
-formatted       cd2ce6693a46  text-2.1.4/tests/Tests/Properties/Validate.hs
-formatted       f69fd3fb97e5  text-2.1.4/tests/Tests/QuickCheckUtils.hs
-formatted       c6e25a3408e0  text-2.1.4/tests/Tests/RebindableSyntaxTest.hs
-formatted       939e997260ba  text-2.1.4/tests/Tests/Regressions.hs
-formatted       b7037d3f07cc  text-2.1.4/tests/Tests/ShareEmpty.hs
-formatted       f4e9f36f6be9  text-2.1.4/tests/Tests/SlowFunctions.hs
-formatted       375091fbe743  text-2.1.4/tests/Tests/Utils.hs
-formatted       e865ae48f11b  th-abstraction-0.7.2.0/Setup.hs
-formatted       2a559d420115  th-abstraction-0.7.2.0/src/Language/Haskell/TH/Datatype.hs
-formatted       b67b7b9c968e  th-abstraction-0.7.2.0/src/Language/Haskell/TH/Datatype/Internal.hs
-formatted       0bd7defdc9f9  th-abstraction-0.7.2.0/src/Language/Haskell/TH/Datatype/TyVarBndr.hs
-formatted       ede8a6d3e460  th-abstraction-0.7.2.0/test/Harness.hs
-partly-checked  4515e1386d50  th-abstraction-0.7.2.0/test/Main.hs
-formatted       dc9970880595  th-abstraction-0.7.2.0/test/Types.hs
-formatted       fd2ff7ad97e3  time-1.16.0.1/Setup.hs
-formatted       125260959da8  time-1.16.0.1/benchmark/Main.hs
-formatted       06fdc32a2b7b  time-1.16.0.1/lib/Data/Format.hs
-formatted       138e9cb35e13  time-1.16.0.1/lib/Data/Time.hs
-formatted       d808f69809c2  time-1.16.0.1/lib/Data/Time/Calendar.hs
-formatted       0f617301ba5b  time-1.16.0.1/lib/Data/Time/Calendar/CalendarDiffDays.hs
-formatted       e210a7d3456b  time-1.16.0.1/lib/Data/Time/Calendar/Days.hs
-formatted       03412f0b8356  time-1.16.0.1/lib/Data/Time/Calendar/Easter.hs
-formatted       f8d4d6f009e4  time-1.16.0.1/lib/Data/Time/Calendar/Gregorian.hs
-formatted       be538512fc07  time-1.16.0.1/lib/Data/Time/Calendar/Julian.hs
-formatted       625e7b428153  time-1.16.0.1/lib/Data/Time/Calendar/JulianYearDay.hs
-formatted       9ba18c758e02  time-1.16.0.1/lib/Data/Time/Calendar/Month.hs
-formatted       eee4b0761e17  time-1.16.0.1/lib/Data/Time/Calendar/MonthDay.hs
-formatted       fe021b5bb8e1  time-1.16.0.1/lib/Data/Time/Calendar/OrdinalDate.hs
-formatted       025bb4e6307c  time-1.16.0.1/lib/Data/Time/Calendar/Private.hs
-formatted       7d5d5b51baca  time-1.16.0.1/lib/Data/Time/Calendar/Quarter.hs
-formatted       61e7261c13da  time-1.16.0.1/lib/Data/Time/Calendar/Types.hs
-formatted       55892c430b7b  time-1.16.0.1/lib/Data/Time/Calendar/Week.hs
-formatted       8d6d0ff3c8ec  time-1.16.0.1/lib/Data/Time/Calendar/WeekDate.hs
-formatted       c2de888ee84b  time-1.16.0.1/lib/Data/Time/Clock.hs
-formatted       0b01b660df99  time-1.16.0.1/lib/Data/Time/Clock/Internal/AbsoluteTime.hs
-declined        -             time-1.16.0.1/lib/Data/Time/Clock/Internal/CTimeval.hs
-formatted       fde88246f337  time-1.16.0.1/lib/Data/Time/Clock/Internal/DiffTime.hs
-formatted       130201256efa  time-1.16.0.1/lib/Data/Time/Clock/Internal/NominalDiffTime.hs
-formatted       8ef6afa040bc  time-1.16.0.1/lib/Data/Time/Clock/Internal/POSIXTime.hs
-formatted       e9a83d4e7327  time-1.16.0.1/lib/Data/Time/Clock/Internal/SystemTime.hs
-formatted       310750655010  time-1.16.0.1/lib/Data/Time/Clock/Internal/UTCDiff.hs
-formatted       a58732cd7eb8  time-1.16.0.1/lib/Data/Time/Clock/Internal/UTCTime.hs
-formatted       acaedfdab698  time-1.16.0.1/lib/Data/Time/Clock/Internal/UniversalTime.hs
-formatted       cf441f809fdf  time-1.16.0.1/lib/Data/Time/Clock/POSIX.hs
-formatted       6dd6034d73b4  time-1.16.0.1/lib/Data/Time/Clock/System.hs
-formatted       7cdd69049dcf  time-1.16.0.1/lib/Data/Time/Clock/TAI.hs
-formatted       b600a5b5c744  time-1.16.0.1/lib/Data/Time/Format.hs
-formatted       6c005f66f0be  time-1.16.0.1/lib/Data/Time/Format/Format/Class.hs
-formatted       47f1688c0787  time-1.16.0.1/lib/Data/Time/Format/Format/Instances.hs
-formatted       3764319de19b  time-1.16.0.1/lib/Data/Time/Format/ISO8601.hs
-formatted       76aa49c9292b  time-1.16.0.1/lib/Data/Time/Format/Internal.hs
-formatted       b7ae7592bcb6  time-1.16.0.1/lib/Data/Time/Format/Locale.hs
-formatted       2cd514758801  time-1.16.0.1/lib/Data/Time/Format/Parse.hs
-formatted       05a7f0bf5554  time-1.16.0.1/lib/Data/Time/Format/Parse/Class.hs
-formatted       cb2ccd8c40fd  time-1.16.0.1/lib/Data/Time/Format/Parse/Instances.hs
-formatted       4489a4cdab49  time-1.16.0.1/lib/Data/Time/LocalTime.hs
-formatted       93986a8450d1  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/CalendarDiffTime.hs
-formatted       94f381fe1ad1  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/Foreign.hs
-formatted       ca98c37fb34c  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/LocalTime.hs
-formatted       9200ebaf067a  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/TimeOfDay.hs
-formatted       74496e557585  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/TimeZone.hs
-formatted       343d16749a70  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/ZonedTime.hs
-formatted       c365d1aa63cd  time-1.16.0.1/test/ForeignCalls.hs
-formatted       fc8234c946fb  time-1.16.0.1/test/ShowDefaultTZAbbreviations.hs
-formatted       b51274826033  time-1.16.0.1/test/ShowTime.hs
-formatted       921506ceef7c  time-1.16.0.1/test/main/Main.hs
-formatted       a04f2637edec  time-1.16.0.1/test/main/Test/AddDiff.hs
-formatted       5b7aef4fe245  time-1.16.0.1/test/main/Test/Arbitrary.hs
-formatted       a31b50175d67  time-1.16.0.1/test/main/Test/Calendar/AddDays.hs
-formatted       5b09874748fc  time-1.16.0.1/test/main/Test/Calendar/AddDaysRef.hs
-formatted       1f2ab37cb077  time-1.16.0.1/test/main/Test/Calendar/CalendarProps.hs
-formatted       fe6ab3f07aa9  time-1.16.0.1/test/main/Test/Calendar/Calendars.hs
-formatted       ba59184d394c  time-1.16.0.1/test/main/Test/Calendar/CalendarsRef.hs
-formatted       e4ef550ce506  time-1.16.0.1/test/main/Test/Calendar/ClipDates.hs
-formatted       f707c1ddaec1  time-1.16.0.1/test/main/Test/Calendar/ClipDatesRef.hs
-formatted       d031fd80c27f  time-1.16.0.1/test/main/Test/Calendar/ConvertBack.hs
-formatted       168e9526852a  time-1.16.0.1/test/main/Test/Calendar/DayPeriod.hs
-formatted       3347574732a8  time-1.16.0.1/test/main/Test/Calendar/Duration.hs
-formatted       56b1c2b8beea  time-1.16.0.1/test/main/Test/Calendar/Easter.hs
-formatted       3f35f96f7337  time-1.16.0.1/test/main/Test/Calendar/LongWeekYears.hs
-formatted       bdfb9e546ba3  time-1.16.0.1/test/main/Test/Calendar/LongWeekYearsRef.hs
-formatted       b5181d1d6218  time-1.16.0.1/test/main/Test/Calendar/MonthDay.hs
-formatted       c01cb667a9a8  time-1.16.0.1/test/main/Test/Calendar/MonthDayRef.hs
-formatted       fc8caea8866a  time-1.16.0.1/test/main/Test/Calendar/MonthOfYear.hs
-formatted       bdc7d2df472c  time-1.16.0.1/test/main/Test/Calendar/Valid.hs
-formatted       516d424dfa89  time-1.16.0.1/test/main/Test/Calendar/Week.hs
-formatted       96f42a259e5f  time-1.16.0.1/test/main/Test/Calendar/Year.hs
-formatted       868a03b5a657  time-1.16.0.1/test/main/Test/Clock/Conversion.hs
-formatted       5c09197a3ec5  time-1.16.0.1/test/main/Test/Clock/Pattern.hs
-formatted       449c0cf9b9bd  time-1.16.0.1/test/main/Test/Clock/Resolution.hs
-formatted       e5afef596413  time-1.16.0.1/test/main/Test/Clock/TAI.hs
-formatted       56759726b4b9  time-1.16.0.1/test/main/Test/Format/Compile.hs
-formatted       9a5ff5f775a0  time-1.16.0.1/test/main/Test/Format/Format.hs
-formatted       8aaf7b1caf88  time-1.16.0.1/test/main/Test/Format/ISO8601.hs
-formatted       37b32c4a0925  time-1.16.0.1/test/main/Test/Format/ParseTime.hs
-formatted       87d53b9f2df8  time-1.16.0.1/test/main/Test/LocalTime/CalendarDiffTime.hs
-formatted       3c6fcbef621e  time-1.16.0.1/test/main/Test/LocalTime/Time.hs
-formatted       4c37e59c357b  time-1.16.0.1/test/main/Test/LocalTime/TimeOfDay.hs
-formatted       db61298fae47  time-1.16.0.1/test/main/Test/LocalTime/TimeRef.hs
-formatted       274e9173e128  time-1.16.0.1/test/main/Test/TestUtil.hs
-formatted       41cfd788db10  time-1.16.0.1/test/main/Test/Types.hs
-formatted       2e8ad72db81a  time-1.16.0.1/test/template/Main.hs
-formatted       29972ed619e0  time-1.16.0.1/test/template/Test/TastyWrapper.hs
-formatted       ea580c874e6f  time-1.16.0.1/test/unix/Main.hs
-formatted       2259bf37c138  time-1.16.0.1/test/unix/Test/Format/Format.hs
-formatted       21b333187684  time-1.16.0.1/test/unix/Test/LocalTime/TimeZone.hs
-formatted       80c12af20c6e  time-1.16.0.1/test/unix/Test/TestUtil.hs
-formatted       7917eb9d1f66  tls-2.4.3/Benchmarks/Benchmarks.hs
-formatted       489534a90c4b  tls-2.4.3/Network/TLS.hs
-formatted       7ce1364dcb4a  tls-2.4.3/Network/TLS/Backend.hs
-formatted       f9d4f25241e6  tls-2.4.3/Network/TLS/Cipher.hs
-formatted       a0fa75894b05  tls-2.4.3/Network/TLS/Compression.hs
-formatted       1a706256562f  tls-2.4.3/Network/TLS/Context.hs
-formatted       1eeefa415421  tls-2.4.3/Network/TLS/Context/Internal.hs
-formatted       bbff565b3ae1  tls-2.4.3/Network/TLS/Core.hs
-formatted       e1443ef58aff  tls-2.4.3/Network/TLS/Credentials.hs
-formatted       1e866a0b1add  tls-2.4.3/Network/TLS/Crypto.hs
-formatted       a8fca7835f0d  tls-2.4.3/Network/TLS/Crypto/DH.hs
-formatted       446c8c8a07ed  tls-2.4.3/Network/TLS/Crypto/IES.hs
-formatted       b7e6a0d5aaac  tls-2.4.3/Network/TLS/Crypto/Types.hs
-formatted       025f72c75341  tls-2.4.3/Network/TLS/ErrT.hs
-formatted       76e7495f609c  tls-2.4.3/Network/TLS/Error.hs
-formatted       5f5ef96f88b3  tls-2.4.3/Network/TLS/Extension.hs
-formatted       a7c47ad146ac  tls-2.4.3/Network/TLS/Extension.hs-boot
-formatted       49db661a445a  tls-2.4.3/Network/TLS/Extra.hs
-formatted       31d3b677e3dd  tls-2.4.3/Network/TLS/Extra/Cipher.hs
-formatted       0ee5bebb0e07  tls-2.4.3/Network/TLS/Extra/CipherCBC.hs
-formatted       5d51d07ab286  tls-2.4.3/Network/TLS/Extra/FFDHE.hs
-formatted       0003b888622d  tls-2.4.3/Network/TLS/Handshake.hs
-formatted       34fa3d5f9250  tls-2.4.3/Network/TLS/Handshake/Certificate.hs
-formatted       2ece306df042  tls-2.4.3/Network/TLS/Handshake/Client.hs
-formatted       c309df62a6dc  tls-2.4.3/Network/TLS/Handshake/Client/ClientHello.hs
-formatted       7f2f22708910  tls-2.4.3/Network/TLS/Handshake/Client/Common.hs
-formatted       51e7fc6f4794  tls-2.4.3/Network/TLS/Handshake/Client/ServerHello.hs
-formatted       3f13588f75b3  tls-2.4.3/Network/TLS/Handshake/Client/TLS12.hs
-formatted       cbcf509e71d1  tls-2.4.3/Network/TLS/Handshake/Client/TLS13.hs
-formatted       a165513e351d  tls-2.4.3/Network/TLS/Handshake/Common.hs
-formatted       781edf2ff067  tls-2.4.3/Network/TLS/Handshake/Common13.hs
-formatted       02f97ef7593d  tls-2.4.3/Network/TLS/Handshake/Control.hs
-formatted       2c0676398aca  tls-2.4.3/Network/TLS/Handshake/Key.hs
-formatted       9dc05a147d3b  tls-2.4.3/Network/TLS/Handshake/Random.hs
-formatted       718a7715d422  tls-2.4.3/Network/TLS/Handshake/Server.hs
-formatted       20f083ce3b73  tls-2.4.3/Network/TLS/Handshake/Server/ClientHello.hs
-formatted       31d74cce1ec5  tls-2.4.3/Network/TLS/Handshake/Server/ClientHello12.hs
-formatted       c10c507909d1  tls-2.4.3/Network/TLS/Handshake/Server/ClientHello13.hs
-formatted       a2f2d3470f0f  tls-2.4.3/Network/TLS/Handshake/Server/Common.hs
-formatted       e0d048534445  tls-2.4.3/Network/TLS/Handshake/Server/ServerHello12.hs
-formatted       4f5074d8165a  tls-2.4.3/Network/TLS/Handshake/Server/ServerHello13.hs
-formatted       b29b9f3d0ef7  tls-2.4.3/Network/TLS/Handshake/Server/TLS12.hs
-formatted       06002a108581  tls-2.4.3/Network/TLS/Handshake/Server/TLS13.hs
-formatted       6a8388c49af7  tls-2.4.3/Network/TLS/Handshake/Signature.hs
-formatted       009f1658802d  tls-2.4.3/Network/TLS/Handshake/State.hs
-formatted       8533c61b72e3  tls-2.4.3/Network/TLS/Handshake/State13.hs
-formatted       11825b040470  tls-2.4.3/Network/TLS/Handshake/TranscriptHash.hs
-formatted       38c7f1733b3a  tls-2.4.3/Network/TLS/HashAndSignature.hs
-formatted       7be5df148925  tls-2.4.3/Network/TLS/Hooks.hs
-formatted       be666dff7b14  tls-2.4.3/Network/TLS/IO.hs
-formatted       f83586ff735d  tls-2.4.3/Network/TLS/IO/Decode.hs
-formatted       b5b4ec68ca00  tls-2.4.3/Network/TLS/IO/Encode.hs
-formatted       6c20cf748535  tls-2.4.3/Network/TLS/Imports.hs
-formatted       21e9ce7c3507  tls-2.4.3/Network/TLS/Internal.hs
-formatted       92999e90c6b3  tls-2.4.3/Network/TLS/KeySchedule.hs
-formatted       febba7334e9e  tls-2.4.3/Network/TLS/MAC.hs
-formatted       44b7f6f73115  tls-2.4.3/Network/TLS/Measurement.hs
-formatted       f0042ddb2e2e  tls-2.4.3/Network/TLS/Packet.hs
-formatted       8d74b7707cba  tls-2.4.3/Network/TLS/Packet13.hs
-formatted       a14ea5098afd  tls-2.4.3/Network/TLS/Parameters.hs
-formatted       29784d509f48  tls-2.4.3/Network/TLS/PostHandshake.hs
-formatted       8edf9e30c18b  tls-2.4.3/Network/TLS/QUIC.hs
-formatted       360a52dcf151  tls-2.4.3/Network/TLS/RNG.hs
-formatted       805eb6800681  tls-2.4.3/Network/TLS/Record.hs
-formatted       176fc6cb0e0b  tls-2.4.3/Network/TLS/Record/Decrypt.hs
-formatted       58803d051f03  tls-2.4.3/Network/TLS/Record/Encrypt.hs
-formatted       3d9c53507eaa  tls-2.4.3/Network/TLS/Record/Layer.hs
-formatted       a66c641fa8a1  tls-2.4.3/Network/TLS/Record/Recv.hs
-formatted       9fa588833e07  tls-2.4.3/Network/TLS/Record/Send.hs
-formatted       2af800e2c322  tls-2.4.3/Network/TLS/Record/State.hs
-formatted       5bfbdf5546a3  tls-2.4.3/Network/TLS/Record/Types.hs
-formatted       42bed44c3eaa  tls-2.4.3/Network/TLS/Session.hs
-formatted       5bef08c36337  tls-2.4.3/Network/TLS/State.hs
-formatted       ff17eb8d38b8  tls-2.4.3/Network/TLS/Struct.hs
-formatted       2aeee057d9ff  tls-2.4.3/Network/TLS/Struct13.hs
-formatted       ea0d39cd9f70  tls-2.4.3/Network/TLS/Types.hs
-formatted       997becc4fe58  tls-2.4.3/Network/TLS/Types/Cipher.hs
-formatted       e6e9255220bb  tls-2.4.3/Network/TLS/Types/Secret.hs
-formatted       35bf4ee60be8  tls-2.4.3/Network/TLS/Types/Session.hs
-formatted       741cb1c84257  tls-2.4.3/Network/TLS/Types/Version.hs
-formatted       be921f75cb0a  tls-2.4.3/Network/TLS/Util.hs
-formatted       1d021bd7e9a7  tls-2.4.3/Network/TLS/Util/ASN1.hs
-formatted       9d70166f446f  tls-2.4.3/Network/TLS/Util/Serialization.hs
-formatted       32a205e8e871  tls-2.4.3/Network/TLS/Wire.hs
-formatted       8d9038e38c2b  tls-2.4.3/Network/TLS/X509.hs
-formatted       e865ae48f11b  tls-2.4.3/Setup.hs
-formatted       45a83b6cde24  tls-2.4.3/test/API.hs
-formatted       eaaf5def6469  tls-2.4.3/test/Arbitrary.hs
-formatted       ba1557ab2831  tls-2.4.3/test/Certificate.hs
-formatted       37c216e39fd1  tls-2.4.3/test/CiphersSpec.hs
-formatted       127368e06936  tls-2.4.3/test/ECHSpec.hs
-formatted       a99d04d129f7  tls-2.4.3/test/EncodeSpec.hs
-formatted       fe70454cad85  tls-2.4.3/test/HandshakeSpec.hs
-formatted       6851deeb2440  tls-2.4.3/test/PipeChan.hs
-formatted       338dcd8056de  tls-2.4.3/test/PubKey.hs
-formatted       9621232ed432  tls-2.4.3/test/Run.hs
-formatted       a550a90f6578  tls-2.4.3/test/Session.hs
-formatted       2fbd14b119a4  tls-2.4.3/test/Spec.hs
-formatted       9034972735e8  tls-2.4.3/test/ThreadSpec.hs
-formatted       0d661eb8f9c2  tls-2.4.3/util/Client.hs
-formatted       c555911ae465  tls-2.4.3/util/Common.hs
-formatted       7dd3b5f2e44a  tls-2.4.3/util/Imports.hs
-formatted       6e9aa070c533  tls-2.4.3/util/Server.hs
-formatted       2e4c1c1f2132  tls-2.4.3/util/tls-client.hs
-formatted       cc5d29d77364  tls-2.4.3/util/tls-server.hs
-partly-checked  3fb7ad77e453  transformers-0.6.3.0/Control/Applicative/Backwards.hs
-partly-checked  1e0b5cb5f0b3  transformers-0.6.3.0/Control/Applicative/Lift.hs
-formatted       578b0e3c1682  transformers-0.6.3.0/Control/Monad/Signatures.hs
-partly-checked  903d26036ddf  transformers-0.6.3.0/Control/Monad/Trans/Accum.hs
-formatted       dc84c86bb82a  transformers-0.6.3.0/Control/Monad/Trans/Class.hs
-formatted       1817d0d25545  transformers-0.6.3.0/Control/Monad/Trans/Cont.hs
-partly-checked  98eeed8cf935  transformers-0.6.3.0/Control/Monad/Trans/Except.hs
-partly-checked  67b62194140d  transformers-0.6.3.0/Control/Monad/Trans/Identity.hs
-partly-checked  c166041a8c5e  transformers-0.6.3.0/Control/Monad/Trans/Maybe.hs
-formatted       6f7326668607  transformers-0.6.3.0/Control/Monad/Trans/RWS.hs
-formatted       c18cfc68a7ca  transformers-0.6.3.0/Control/Monad/Trans/RWS/CPS.hs
-partly-checked  fa6eb9bac0a7  transformers-0.6.3.0/Control/Monad/Trans/RWS/Lazy.hs
-partly-checked  d7f98f96171d  transformers-0.6.3.0/Control/Monad/Trans/RWS/Strict.hs
-partly-checked  d75058073c9e  transformers-0.6.3.0/Control/Monad/Trans/Reader.hs
-formatted       b58555f08340  transformers-0.6.3.0/Control/Monad/Trans/Select.hs
-formatted       dc729d1936a2  transformers-0.6.3.0/Control/Monad/Trans/State.hs
-partly-checked  f062acd2848c  transformers-0.6.3.0/Control/Monad/Trans/State/Lazy.hs
-partly-checked  53dea27ba637  transformers-0.6.3.0/Control/Monad/Trans/State/Strict.hs
-formatted       6a9857bbd181  transformers-0.6.3.0/Control/Monad/Trans/Writer.hs
-formatted       1b5b2ad9e9d8  transformers-0.6.3.0/Control/Monad/Trans/Writer/CPS.hs
-partly-checked  579da23e5e5b  transformers-0.6.3.0/Control/Monad/Trans/Writer/Lazy.hs
-partly-checked  f89a27634c86  transformers-0.6.3.0/Control/Monad/Trans/Writer/Strict.hs
-declined        -             transformers-0.6.3.0/Data/Functor/Constant.hs
-partly-checked  9b1d6b4e909d  transformers-0.6.3.0/Data/Functor/Reverse.hs
-formatted       e865ae48f11b  transformers-0.6.3.0/Setup.hs
-declined        -             transformers-0.6.3.0/legacy/pre709/Data/Functor/Identity.hs
-formatted       ee4ba7098a5c  transformers-0.6.3.0/legacy/pre711/Control/Monad/IO/Class.hs
-formatted       7d9fab9a0caf  transformers-0.6.3.0/legacy/pre711/Data/Functor/Classes.hs
-formatted       284d6d5fc1d3  transformers-0.6.3.0/legacy/pre711/Data/Functor/Compose.hs
-partly-checked  e96184ffa2ec  transformers-0.6.3.0/legacy/pre711/Data/Functor/Product.hs
-formatted       87f324f0c768  transformers-0.6.3.0/legacy/pre711/Data/Functor/Sum.hs
-formatted       e865ae48f11b  typed-process-0.2.13.0/Setup.hs
-formatted       b26f653e6a78  typed-process-0.2.13.0/src/System/Process/Typed.hs
-formatted       a2f3c6df3e9b  typed-process-0.2.13.0/src/System/Process/Typed/Internal.hs
-formatted       2fbd14b119a4  typed-process-0.2.13.0/test/Spec.hs
-formatted       7da6b9dd8336  typed-process-0.2.13.0/test/System/Process/TypedSpec.hs
-formatted       e865ae48f11b  unliftio-0.2.25.1/Setup.hs
-formatted       86399961b28a  unliftio-0.2.25.1/bench/ConcBench.hs
-formatted       737706872ccf  unliftio-0.2.25.1/src/UnliftIO.hs
-formatted       713d1458fd8d  unliftio-0.2.25.1/src/UnliftIO/Async.hs
-formatted       5463e06f3adf  unliftio-0.2.25.1/src/UnliftIO/Chan.hs
-formatted       189c6c89bb81  unliftio-0.2.25.1/src/UnliftIO/Concurrent.hs
-partly-checked  c708a2f3ee0e  unliftio-0.2.25.1/src/UnliftIO/Directory.hs
-formatted       402fb486b3cf  unliftio-0.2.25.1/src/UnliftIO/Environment.hs
-formatted       c9305d3c9be9  unliftio-0.2.25.1/src/UnliftIO/Exception.hs
-formatted       e5401695da5a  unliftio-0.2.25.1/src/UnliftIO/Exception/Lens.hs
-formatted       ff1234d6ddbd  unliftio-0.2.25.1/src/UnliftIO/Foreign.hs
-formatted       a64a8ea6c117  unliftio-0.2.25.1/src/UnliftIO/IO.hs
-formatted       c940b0ac5eb1  unliftio-0.2.25.1/src/UnliftIO/IO/File.hs
-formatted       8f52b4c4db23  unliftio-0.2.25.1/src/UnliftIO/IO/File/Posix.hs
-formatted       2688f4b976d8  unliftio-0.2.25.1/src/UnliftIO/IORef.hs
-formatted       1738f330bd77  unliftio-0.2.25.1/src/UnliftIO/Internals/Async.hs
-formatted       2e37ab380c8b  unliftio-0.2.25.1/src/UnliftIO/MVar.hs
-formatted       25ab39f4a7d1  unliftio-0.2.25.1/src/UnliftIO/Memoize.hs
-formatted       5803964631a0  unliftio-0.2.25.1/src/UnliftIO/Process.hs
-formatted       f17d64d4c913  unliftio-0.2.25.1/src/UnliftIO/QSem.hs
-formatted       6e50df49a6ba  unliftio-0.2.25.1/src/UnliftIO/QSemN.hs
-formatted       ee3bf4d22673  unliftio-0.2.25.1/src/UnliftIO/STM.hs
-formatted       809c4f4424bb  unliftio-0.2.25.1/src/UnliftIO/Temporary.hs
-formatted       0f5f7167bc7b  unliftio-0.2.25.1/src/UnliftIO/Timeout.hs
-formatted       2fbd14b119a4  unliftio-0.2.25.1/test/Spec.hs
-formatted       3118f2133668  unliftio-0.2.25.1/test/UnliftIO/AsyncSpec.hs
-formatted       dda4d2f1b5ef  unliftio-0.2.25.1/test/UnliftIO/DirectorySpec.hs
-formatted       500e291fb7a1  unliftio-0.2.25.1/test/UnliftIO/ExceptionSpec.hs
-formatted       a899c691b2e6  unliftio-0.2.25.1/test/UnliftIO/IO/FileSpec.hs
-formatted       258e4c04879b  unliftio-0.2.25.1/test/UnliftIO/IOSpec.hs
-formatted       68c4411ed8f4  unliftio-0.2.25.1/test/UnliftIO/MemoizeSpec.hs
-formatted       f878ce9da222  unliftio-0.2.25.1/test/UnliftIO/PooledAsyncSpec.hs
-formatted       2f5ad1921f27  unordered-containers-0.2.21/Data/HashMap/Internal.hs
-declined        -             unordered-containers-0.2.21/Data/HashMap/Internal/Array.hs
-formatted       7be08d5816ff  unordered-containers-0.2.21/Data/HashMap/Internal/Debug.hs
-formatted       25f94316b17e  unordered-containers-0.2.21/Data/HashMap/Internal/List.hs
-formatted       08e073c2c7dd  unordered-containers-0.2.21/Data/HashMap/Internal/Strict.hs
-formatted       a4d22b20936f  unordered-containers-0.2.21/Data/HashMap/Lazy.hs
-formatted       b51d84ac0257  unordered-containers-0.2.21/Data/HashMap/Strict.hs
-formatted       d88b52d5dce2  unordered-containers-0.2.21/Data/HashSet.hs
-formatted       a238b77b05ef  unordered-containers-0.2.21/Data/HashSet/Internal.hs
-formatted       e865ae48f11b  unordered-containers-0.2.21/Setup.hs
-formatted       e85bc02778c3  unordered-containers-0.2.21/benchmarks/Benchmarks.hs
-formatted       0ed2a6102dba  unordered-containers-0.2.21/benchmarks/FineGrained.hs
-formatted       7e72d194e206  unordered-containers-0.2.21/benchmarks/Key/Bytes.hs
-formatted       de9c7b30da36  unordered-containers-0.2.21/benchmarks/Util/ByteString.hs
-formatted       284694c5798b  unordered-containers-0.2.21/benchmarks/Util/Int.hs
-formatted       771e81db1b05  unordered-containers-0.2.21/benchmarks/Util/String.hs
-formatted       2b26017dfa9e  unordered-containers-0.2.21/tests/Main.hs
-formatted       27005a00112e  unordered-containers-0.2.21/tests/Properties.hs
-formatted       feff92267a82  unordered-containers-0.2.21/tests/Properties/HashMapLazy.hs
-formatted       f2a904c3a89a  unordered-containers-0.2.21/tests/Properties/HashMapStrict.hs
-formatted       a612762e1b58  unordered-containers-0.2.21/tests/Properties/HashSet.hs
-formatted       3584a01b2cdd  unordered-containers-0.2.21/tests/Properties/List.hs
-formatted       6464664cb68b  unordered-containers-0.2.21/tests/Regressions.hs
-formatted       d094f07710f5  unordered-containers-0.2.21/tests/Strictness.hs
-formatted       00cf0a5ee0ea  unordered-containers-0.2.21/tests/Util/Key.hs
-formatted       e865ae48f11b  unpacked-containers-0/Setup.hs
-formatted       8523e9d3c669  unpacked-containers-0/example/Int.hs
-formatted       ba3a254765ca  unpacked-containers-0/example/Main.hs
-formatted       941a76a7e532  unpacked-containers-0/src/Key.hsig
-formatted       0ab7b95772b1  unpacked-containers-0/src/Map.hs
-formatted       4ab593177929  unpacked-containers-0/src/Map/Internal.hs
-formatted       412fdc3e3871  unpacked-containers-0/src/Map/Internal/Debug.hs
-formatted       88e3acab50fe  unpacked-containers-0/src/Map/Lazy.hs
-formatted       d160eb88e766  unpacked-containers-0/src/Map/Merge/Lazy.hs
-formatted       3401a14fe602  unpacked-containers-0/src/Map/Merge/Strict.hs
-formatted       1da0e231433b  unpacked-containers-0/src/Map/Strict.hs
-formatted       9b01f9961f71  unpacked-containers-0/src/Map/Strict/Internal.hs
-formatted       bb6c9398369f  unpacked-containers-0/src/Set.hs
-formatted       cb11e5a3315d  unpacked-containers-0/src/Set/Internal.hs
-formatted       867c9afd504a  unpacked-containers-0/utils/Internal/BitQueue.hs
-formatted       7c96e08090d5  unpacked-containers-0/utils/Internal/BitUtil.hs
-formatted       a1134be4230d  unpacked-containers-0/utils/Internal/PtrEquality.hs
-formatted       5dd1b940181c  unpacked-containers-0/utils/Internal/State.hs
-formatted       ed12f1faf0ed  unpacked-containers-0/utils/Internal/StrictFold.hs
-formatted       621944df674c  unpacked-containers-0/utils/Internal/StrictMaybe.hs
-formatted       b7a091ef4c77  unpacked-containers-0/utils/Internal/StrictPair.hs
-formatted       4a8ac51676df  uuid-types-1.0.6.1/Setup.hs
-formatted       e97eca400518  uuid-types-1.0.6.1/src/Data/UUID/Types.hs
-formatted       2dc18f83b9c9  uuid-types-1.0.6.1/src/Data/UUID/Types/Internal.hs
-formatted       d63508f44841  uuid-types-1.0.6.1/src/Data/UUID/Types/Internal/Builder.hs
-formatted       14a92dc8286f  uuid-types-1.0.6.1/tests/TestUUID.hs
-formatted       e865ae48f11b  vector-0.13.2.0/Setup.hs
-formatted       cb65eb293bd5  vector-0.13.2.0/benchlib/Bench/Vector/Algo/AwShCC.hs
-formatted       8a7c35b680c0  vector-0.13.2.0/benchlib/Bench/Vector/Algo/FindIndexR.hs
-formatted       7536358d3c8c  vector-0.13.2.0/benchlib/Bench/Vector/Algo/HybCC.hs
-formatted       31caf6daa18c  vector-0.13.2.0/benchlib/Bench/Vector/Algo/Leaffix.hs
-formatted       c647f14c61cb  vector-0.13.2.0/benchlib/Bench/Vector/Algo/ListRank.hs
-formatted       bbc9ffdd439f  vector-0.13.2.0/benchlib/Bench/Vector/Algo/MutableSet.hs
-formatted       49998369707c  vector-0.13.2.0/benchlib/Bench/Vector/Algo/NextPermutation.hs
-formatted       a1d4d3d489b4  vector-0.13.2.0/benchlib/Bench/Vector/Algo/Quickhull.hs
-formatted       cff7efe83577  vector-0.13.2.0/benchlib/Bench/Vector/Algo/Rootfix.hs
-formatted       bc96aa2b8cdf  vector-0.13.2.0/benchlib/Bench/Vector/Algo/Spectral.hs
-formatted       438dab6789ad  vector-0.13.2.0/benchlib/Bench/Vector/Algo/Tridiag.hs
-formatted       ec97bfaffec3  vector-0.13.2.0/benchlib/Bench/Vector/Tasty.hs
-formatted       368deb66d310  vector-0.13.2.0/benchlib/Bench/Vector/TestData/Graph.hs
-formatted       476c4f42945a  vector-0.13.2.0/benchlib/Bench/Vector/TestData/ParenTree.hs
-formatted       6b1b4aea2361  vector-0.13.2.0/benchmarks/Main.hs
-formatted       77ce7d3b1eda  vector-0.13.2.0/internal/GenUnboxTuple.hs
-formatted       7e257cfd7468  vector-0.13.2.0/src/Data/Vector.hs
-formatted       16d1d0522130  vector-0.13.2.0/src/Data/Vector/Fusion/Bundle.hs
-formatted       c77517ac5b6b  vector-0.13.2.0/src/Data/Vector/Fusion/Bundle/Monadic.hs
-formatted       281a320dd1fd  vector-0.13.2.0/src/Data/Vector/Fusion/Bundle/Size.hs
-formatted       8b09b3b8c680  vector-0.13.2.0/src/Data/Vector/Fusion/Stream/Monadic.hs
-formatted       cfc06f7907bc  vector-0.13.2.0/src/Data/Vector/Fusion/Util.hs
-formatted       a981b8dada8f  vector-0.13.2.0/src/Data/Vector/Generic.hs
-formatted       24e087932bf9  vector-0.13.2.0/src/Data/Vector/Generic/Base.hs
-formatted       6c34f319e085  vector-0.13.2.0/src/Data/Vector/Generic/Mutable.hs
-formatted       14ab0fea35a5  vector-0.13.2.0/src/Data/Vector/Generic/Mutable/Base.hs
-formatted       31ef8684e6a5  vector-0.13.2.0/src/Data/Vector/Generic/New.hs
-formatted       1842a6e1d83f  vector-0.13.2.0/src/Data/Vector/Internal/Check.hs
-formatted       3a331752a108  vector-0.13.2.0/src/Data/Vector/Mutable.hs
-formatted       c77c6d8b48f1  vector-0.13.2.0/src/Data/Vector/Primitive.hs
-formatted       7790a579fd85  vector-0.13.2.0/src/Data/Vector/Primitive/Mutable.hs
-formatted       d63a299a6982  vector-0.13.2.0/src/Data/Vector/Storable.hs
-formatted       f3208fa21c31  vector-0.13.2.0/src/Data/Vector/Storable/Internal.hs
-formatted       a312fe3ca55a  vector-0.13.2.0/src/Data/Vector/Storable/Mutable.hs
-formatted       ca6c3919dbe4  vector-0.13.2.0/src/Data/Vector/Strict.hs
-formatted       3bc69095cb4d  vector-0.13.2.0/src/Data/Vector/Strict/Mutable.hs
-formatted       5a349caedbaf  vector-0.13.2.0/src/Data/Vector/Unboxed.hs
-formatted       fa9e19a0d58d  vector-0.13.2.0/src/Data/Vector/Unboxed/Base.hs
-formatted       58ff39d532e3  vector-0.13.2.0/src/Data/Vector/Unboxed/Mutable.hs
-formatted       f4e17f002657  vector-0.13.2.0/tests-inspect/Inspect.hs
-formatted       992258e8ec96  vector-0.13.2.0/tests-inspect/Inspect/DerivingVia.hs
-formatted       005977089309  vector-0.13.2.0/tests-inspect/Inspect/DerivingVia/OtherFoo.hs
-formatted       c86daf6b0506  vector-0.13.2.0/tests-inspect/main.hs
-formatted       b27a545b7df5  vector-0.13.2.0/tests/Boilerplater.hs
-formatted       9d758ab214f1  vector-0.13.2.0/tests/Main.hs
-formatted       8061fe09f977  vector-0.13.2.0/tests/Tests/Bundle.hs
-formatted       1525be7e0a46  vector-0.13.2.0/tests/Tests/Move.hs
-formatted       43dd4c8d5a9c  vector-0.13.2.0/tests/Tests/Vector/Boxed.hs
-formatted       54a741f726e9  vector-0.13.2.0/tests/Tests/Vector/Primitive.hs
-formatted       4c1e86e31a44  vector-0.13.2.0/tests/Tests/Vector/Property.hs
-formatted       89d6f5f286c7  vector-0.13.2.0/tests/Tests/Vector/Storable.hs
-formatted       cc9e0bc6f8e0  vector-0.13.2.0/tests/Tests/Vector/Strict.hs
-formatted       891ffe33c45c  vector-0.13.2.0/tests/Tests/Vector/Unboxed.hs
-formatted       9d70a141ca8e  vector-0.13.2.0/tests/Tests/Vector/UnitTests.hs
-formatted       915b72919a48  vector-0.13.2.0/tests/Utilities.hs
-formatted       88ed51490944  vector-0.13.2.0/tests/doctests.hs
-formatted       5561dc5bc4a0  vector-algorithms-0.9.1.0/bench/simple/Blocks.hs
-formatted       501fcfb24218  vector-algorithms-0.9.1.0/bench/simple/Main.hs
-formatted       518a902d3c59  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms.hs
-formatted       553211019f78  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/AmericanFlag.hs
-formatted       5bc324a60b4f  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Common.hs
-formatted       a7c93d247f1d  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Heap.hs
-formatted       385f1aecc6ac  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Insertion.hs
-formatted       eaaf49335045  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Intro.hs
-formatted       4a50f751547a  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Merge.hs
-formatted       9a4c2dc71a47  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Optimal.hs
-formatted       b7b0f718deb2  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Radix.hs
-formatted       47f1d28b6145  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Search.hs
-formatted       0a376532e9cb  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Tim.hs
-formatted       a9ac57f13756  vector-algorithms-0.9.1.0/tests/properties/Optimal.hs
-formatted       b19d49d0db4b  vector-algorithms-0.9.1.0/tests/properties/Properties.hs
-formatted       9b8afe81a4c6  vector-algorithms-0.9.1.0/tests/properties/Tests.hs
-formatted       68c72976d14e  vector-algorithms-0.9.1.0/tests/properties/Util.hs
-formatted       8509e18a780a  wai-3.2.5/Network/Wai.hs
-formatted       7174252dda45  wai-3.2.5/Network/Wai/Internal.hs
-formatted       76fdb58b6d05  wai-3.2.5/test/Network/WaiSpec.hs
-formatted       2fbd14b119a4  wai-3.2.5/test/Spec.hs
-formatted       d069d134e586  warp-3.4.15/Network/Wai/Handler/Warp.hs
-formatted       009ccfac9d51  warp-3.4.15/Network/Wai/Handler/Warp/Buffer.hs
-formatted       f910265f50d3  warp-3.4.15/Network/Wai/Handler/Warp/Conduit.hs
-formatted       c978e6eb627c  warp-3.4.15/Network/Wai/Handler/Warp/Counter.hs
-formatted       26b005936471  warp-3.4.15/Network/Wai/Handler/Warp/Date.hs
-formatted       349d250e5826  warp-3.4.15/Network/Wai/Handler/Warp/FdCache.hs
-formatted       5c8ff344b068  warp-3.4.15/Network/Wai/Handler/Warp/File.hs
-formatted       e56514093065  warp-3.4.15/Network/Wai/Handler/Warp/FileInfoCache.hs
-formatted       2b7f4d356448  warp-3.4.15/Network/Wai/Handler/Warp/HTTP1.hs
-formatted       f32ce233886c  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2.hs
-formatted       a7debda99dd6  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2/File.hs
-formatted       cd7ebbac04db  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2/PushPromise.hs
-formatted       40821f53b1d9  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2/Request.hs
-formatted       831c4440cde7  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2/Response.hs
-formatted       40e59aa92ecc  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2/Types.hs
-formatted       69c55babd99e  warp-3.4.15/Network/Wai/Handler/Warp/HashMap.hs
-formatted       cee4ba0a15b3  warp-3.4.15/Network/Wai/Handler/Warp/Header.hs
-formatted       a036771b5a25  warp-3.4.15/Network/Wai/Handler/Warp/IO.hs
-formatted       d92af26eb2ec  warp-3.4.15/Network/Wai/Handler/Warp/Imports.hs
-formatted       98f2e1cfdade  warp-3.4.15/Network/Wai/Handler/Warp/Internal.hs
-formatted       e8583e08a2e4  warp-3.4.15/Network/Wai/Handler/Warp/MultiMap.hs
-formatted       ed16ebc20147  warp-3.4.15/Network/Wai/Handler/Warp/PackInt.hs
-formatted       22e5a5d6d3c9  warp-3.4.15/Network/Wai/Handler/Warp/ReadInt.hs
-formatted       e29d1517c375  warp-3.4.15/Network/Wai/Handler/Warp/Request.hs
-formatted       c7905b72682b  warp-3.4.15/Network/Wai/Handler/Warp/RequestHeader.hs
-formatted       7100fbff6910  warp-3.4.15/Network/Wai/Handler/Warp/Response.hs
-formatted       27cae25ae83a  warp-3.4.15/Network/Wai/Handler/Warp/ResponseHeader.hs
-formatted       621b343ceaa3  warp-3.4.15/Network/Wai/Handler/Warp/Run.hs
-formatted       47a04a642ad1  warp-3.4.15/Network/Wai/Handler/Warp/SendFile.hs
-formatted       bad8f2d42358  warp-3.4.15/Network/Wai/Handler/Warp/Settings.hs
-formatted       bc4925a06045  warp-3.4.15/Network/Wai/Handler/Warp/ShuttingDown.hs
-formatted       a531dacd44be  warp-3.4.15/Network/Wai/Handler/Warp/Types.hs
-formatted       f1ff20ab87da  warp-3.4.15/Network/Wai/Handler/Warp/Windows.hs
-formatted       2bef9620132e  warp-3.4.15/Network/Wai/Handler/Warp/WithApplication.hs
-formatted       f3a2c7ee7659  warp-3.4.15/bench/Parser.hs
-formatted       8f739e595518  warp-3.4.15/test/BufferSpec.hs
-formatted       6d25fc643699  warp-3.4.15/test/ConduitSpec.hs
-formatted       103842d1ec84  warp-3.4.15/test/ConnectionSpec.hs
-formatted       7d698edc37d0  warp-3.4.15/test/EarlyHintsSpec.hs
-formatted       3b37c702fe26  warp-3.4.15/test/ExceptionSpec.hs
-formatted       6da076d7c2ae  warp-3.4.15/test/FdCacheSpec.hs
-formatted       f91844cc6a8f  warp-3.4.15/test/FileSpec.hs
-formatted       0ba618e41ab1  warp-3.4.15/test/GracefulShutdownSpec.hs
-formatted       c99958718db1  warp-3.4.15/test/HTTP.hs
-formatted       70bab0349402  warp-3.4.15/test/PackIntSpec.hs
-formatted       c0ed531ac6d7  warp-3.4.15/test/ReadIntSpec.hs
-formatted       203ea20f13bf  warp-3.4.15/test/RequestSpec.hs
-formatted       4ef55f7e523c  warp-3.4.15/test/ResponseHeaderSpec.hs
-formatted       ac591a85b19f  warp-3.4.15/test/ResponseSpec.hs
-formatted       190ad2e064b1  warp-3.4.15/test/RunSpec.hs
-formatted       12d7c8bf7283  warp-3.4.15/test/SendFileSpec.hs
-formatted       56bf11ebdf68  warp-3.4.15/test/ServerStateSpec.hs
-formatted       2fbd14b119a4  warp-3.4.15/test/Spec.hs
-formatted       6239c41d8ad7  warp-3.4.15/test/WithApplicationSpec.hs
-formatted       c61ebeab72e9  warp-3.4.15/test/doctests.hs
-formatted       c3a0978b358e  xmonad-0.18.1/Main.hs
-formatted       147fdbecf10c  xmonad-0.18.1/man/xmonad.hs
-formatted       1b9e38e5ffc2  xmonad-0.18.1/src/XMonad.hs
-formatted       d5ed6e53aeb6  xmonad-0.18.1/src/XMonad/Config.hs
-formatted       a69fbe62400f  xmonad-0.18.1/src/XMonad/Core.hs
-formatted       16d9eaa37934  xmonad-0.18.1/src/XMonad/Layout.hs
-formatted       185beff032bf  xmonad-0.18.1/src/XMonad/Main.hs
-formatted       fececd53a9f5  xmonad-0.18.1/src/XMonad/ManageHook.hs
-formatted       1ce7bcb56804  xmonad-0.18.1/src/XMonad/Operations.hs
-formatted       436b2faa58c9  xmonad-0.18.1/src/XMonad/StackSet.hs
-formatted       710ec0764541  xmonad-0.18.1/tests/Instances.hs
-formatted       682615fd57ec  xmonad-0.18.1/tests/Properties.hs
-formatted       b9cbebbac632  xmonad-0.18.1/tests/Properties/Delete.hs
-formatted       2b2b85b4c7fe  xmonad-0.18.1/tests/Properties/Failure.hs
-formatted       2825306e83f9  xmonad-0.18.1/tests/Properties/Floating.hs
-formatted       ae9be34908bc  xmonad-0.18.1/tests/Properties/Focus.hs
-formatted       1418915d6ac8  xmonad-0.18.1/tests/Properties/GreedyView.hs
-formatted       ff83b882ad73  xmonad-0.18.1/tests/Properties/Insert.hs
-formatted       2d0f361b70f7  xmonad-0.18.1/tests/Properties/Layout/Full.hs
-formatted       d216f32ba806  xmonad-0.18.1/tests/Properties/Layout/Tall.hs
-formatted       65709ceae761  xmonad-0.18.1/tests/Properties/Screen.hs
-formatted       13ed9089c892  xmonad-0.18.1/tests/Properties/Shift.hs
-formatted       879d6f9db8a2  xmonad-0.18.1/tests/Properties/Stack.hs
-formatted       7384642a8941  xmonad-0.18.1/tests/Properties/StackSet.hs
-formatted       e48be0e8732d  xmonad-0.18.1/tests/Properties/Swap.hs
-formatted       f6f63b59cfb0  xmonad-0.18.1/tests/Properties/View.hs
-formatted       ef9aade1e2ca  xmonad-0.18.1/tests/Properties/Workspace.hs
-formatted       87ba4b32b250  xmonad-0.18.1/tests/Utils.hs
-formatted       d8adcc5e8871  yesod-core-1.7.0.0/bench/widget.hs
-formatted       810a9b2932db  yesod-core-1.7.0.0/src/Yesod/Core.hs
-formatted       76a91abab9c7  yesod-core-1.7.0.0/src/Yesod/Core/Class/Breadcrumbs.hs
-formatted       5eb301cd4009  yesod-core-1.7.0.0/src/Yesod/Core/Class/Dispatch.hs
-formatted       4e0e4c27884b  yesod-core-1.7.0.0/src/Yesod/Core/Class/Dispatch/ToParentRoute.hs
-formatted       f5e77d45ac7f  yesod-core-1.7.0.0/src/Yesod/Core/Class/Handler.hs
-formatted       b609ce0ae4aa  yesod-core-1.7.0.0/src/Yesod/Core/Class/Yesod.hs
-formatted       7b7185683c72  yesod-core-1.7.0.0/src/Yesod/Core/Content.hs
-formatted       8f8e6e5fb762  yesod-core-1.7.0.0/src/Yesod/Core/Dispatch.hs
-formatted       a266e1ec29d7  yesod-core-1.7.0.0/src/Yesod/Core/Handler.hs
-formatted       88d4d8c2323a  yesod-core-1.7.0.0/src/Yesod/Core/Internal.hs
-formatted       212235b50682  yesod-core-1.7.0.0/src/Yesod/Core/Internal/LiteApp.hs
-formatted       ca64c4e6d606  yesod-core-1.7.0.0/src/Yesod/Core/Internal/Request.hs
-formatted       bbb065ca69ff  yesod-core-1.7.0.0/src/Yesod/Core/Internal/Response.hs
-formatted       3032144ec1d6  yesod-core-1.7.0.0/src/Yesod/Core/Internal/Run.hs
-formatted       da5ec533b3d0  yesod-core-1.7.0.0/src/Yesod/Core/Internal/Session.hs
-formatted       7d85bdcde5ef  yesod-core-1.7.0.0/src/Yesod/Core/Internal/TH.hs
-formatted       a4d70c77b953  yesod-core-1.7.0.0/src/Yesod/Core/Internal/Util.hs
-formatted       3c6023c01f8d  yesod-core-1.7.0.0/src/Yesod/Core/Json.hs
-formatted       3d3ea6cd2254  yesod-core-1.7.0.0/src/Yesod/Core/TypeCache.hs
-formatted       aa67fd550b47  yesod-core-1.7.0.0/src/Yesod/Core/Types.hs
-formatted       38102a09e32a  yesod-core-1.7.0.0/src/Yesod/Core/Types/Content.hs
-formatted       49991219fbf5  yesod-core-1.7.0.0/src/Yesod/Core/Types/ErrorResponse.hs
-formatted       2f42d728713c  yesod-core-1.7.0.0/src/Yesod/Core/Types/HandlerContents.hs
-formatted       eea90c376092  yesod-core-1.7.0.0/src/Yesod/Core/Types/TypedContent.hs
-formatted       abfe32d3eadd  yesod-core-1.7.0.0/src/Yesod/Core/Unsafe.hs
-formatted       1620502b047c  yesod-core-1.7.0.0/src/Yesod/Core/Widget.hs
-formatted       b35c9ac0daff  yesod-core-1.7.0.0/src/Yesod/Routes/Class.hs
-formatted       06717cf94aef  yesod-core-1.7.0.0/src/Yesod/Routes/Overlap.hs
-formatted       728c1336d2fd  yesod-core-1.7.0.0/src/Yesod/Routes/Parse.hs
-formatted       7bcf63c3b7e5  yesod-core-1.7.0.0/src/Yesod/Routes/TH.hs
-formatted       aba7c8cd51ca  yesod-core-1.7.0.0/src/Yesod/Routes/TH/Dispatch.hs
-formatted       a463b5f83292  yesod-core-1.7.0.0/src/Yesod/Routes/TH/Internal.hs
-formatted       f88d33d3ea28  yesod-core-1.7.0.0/src/Yesod/Routes/TH/ParseRoute.hs
-formatted       dbc4eb3d7e58  yesod-core-1.7.0.0/src/Yesod/Routes/TH/RenderRoute.hs
-formatted       3baa6af3d56d  yesod-core-1.7.0.0/src/Yesod/Routes/TH/RouteAttrs.hs
-formatted       b435513e2c49  yesod-core-1.7.0.0/src/Yesod/Routes/TH/Types.hs
-formatted       4cf83d0b0f07  yesod-core-1.7.0.0/test/Hierarchy.hs
-formatted       acf61854d2ec  yesod-core-1.7.0.0/test/Hierarchy/Admin.hs
-formatted       38126f8a1ed6  yesod-core-1.7.0.0/test/Hierarchy/Nest.hs
-formatted       a739150f03f1  yesod-core-1.7.0.0/test/Hierarchy/Nest2.hs
-formatted       1998d7e7b6f0  yesod-core-1.7.0.0/test/Hierarchy/Nest2/NestInner.hs
-formatted       6e683051218c  yesod-core-1.7.0.0/test/Hierarchy/Nest3.hs
-formatted       8f1d12dc181e  yesod-core-1.7.0.0/test/Hierarchy/ResourceTree.hs
-formatted       f70ab72cd608  yesod-core-1.7.0.0/test/Route/DeepAritySpec.hs
-formatted       1a22181a9cf2  yesod-core-1.7.0.0/test/Route/DeepArityTypes.hs
-formatted       6cf89c893af0  yesod-core-1.7.0.0/test/Route/DiscoveryModeSpec.hs
-formatted       8742e593c3d0  yesod-core-1.7.0.0/test/Route/FallthroughSpec.hs
-formatted       83547078da44  yesod-core-1.7.0.0/test/Route/FocusLeafConsSpec.hs
-formatted       b96279c392b7  yesod-core-1.7.0.0/test/Route/InlineParseClausesSpec.hs
-formatted       d8f6752d05e7  yesod-core-1.7.0.0/test/Route/InstanceProbeSpec.hs
-formatted       5f762e160869  yesod-core-1.7.0.0/test/Route/InstanceProbeTypes.hs
-formatted       66f474c75dbf  yesod-core-1.7.0.0/test/Route/MissingFocusTargetSpec.hs
-formatted       4ca53b8c21db  yesod-core-1.7.0.0/test/Route/MissingFocusTargetTypes.hs
-formatted       c4733044c565  yesod-core-1.7.0.0/test/Route/NestedParseClausesSpec.hs
-formatted       96c9db79de94  yesod-core-1.7.0.0/test/Route/PureQ.hs
-formatted       1084d2ca990f  yesod-core-1.7.0.0/test/Route/RenderRouteSpec.hs
-formatted       5cf00838dae7  yesod-core-1.7.0.0/test/Route/RouteAttrSpec.hs
-formatted       9303c7a203b3  yesod-core-1.7.0.0/test/Route/SubDispatchAritySpec.hs
-formatted       141148a01530  yesod-core-1.7.0.0/test/RouteSpec.hs
-formatted       456251f78b44  yesod-core-1.7.0.0/test/YesodCoreTest.hs
-formatted       f0034c742a78  yesod-core-1.7.0.0/test/YesodCoreTest/Auth.hs
-formatted       3a700bfeb45e  yesod-core-1.7.0.0/test/YesodCoreTest/BangSeparatorRuntime.hs
-formatted       33355032a6ea  yesod-core-1.7.0.0/test/YesodCoreTest/Breadcrumb.hs
-formatted       6192a640749e  yesod-core-1.7.0.0/test/YesodCoreTest/Cache.hs
-formatted       5731b7743f4b  yesod-core-1.7.0.0/test/YesodCoreTest/CleanPath.hs
-formatted       36a004c6a4e3  yesod-core-1.7.0.0/test/YesodCoreTest/Content.hs
-formatted       6d11e0679e7e  yesod-core-1.7.0.0/test/YesodCoreTest/Csrf.hs
-formatted       a73924c2a367  yesod-core-1.7.0.0/test/YesodCoreTest/ErrorHandling.hs
-formatted       d369eb73b47a  yesod-core-1.7.0.0/test/YesodCoreTest/ErrorHandling/CustomApp.hs
-formatted       75e0dffb40ce  yesod-core-1.7.0.0/test/YesodCoreTest/Exceptions.hs
-formatted       82e178e31f61  yesod-core-1.7.0.0/test/YesodCoreTest/FallthroughDispatch/Resources.hs
-formatted       e4f8f0ea3e72  yesod-core-1.7.0.0/test/YesodCoreTest/FallthroughDispatch/Runtime.hs
-formatted       4d5c1d9a3551  yesod-core-1.7.0.0/test/YesodCoreTest/FallthroughMatrix/FirstFoo.hs
-formatted       bd497866625d  yesod-core-1.7.0.0/test/YesodCoreTest/FallthroughMatrix/Resources.hs
-formatted       8c70739a50e7  yesod-core-1.7.0.0/test/YesodCoreTest/FallthroughMatrix/Runtime.hs
-formatted       2ec1229d8e62  yesod-core-1.7.0.0/test/YesodCoreTest/Header.hs
-formatted       964ef508ce0f  yesod-core-1.7.0.0/test/YesodCoreTest/InternalRequest.hs
-formatted       f7afe29ae117  yesod-core-1.7.0.0/test/YesodCoreTest/JsAttributes.hs
-formatted       84646813873d  yesod-core-1.7.0.0/test/YesodCoreTest/JsLoader.hs
-formatted       f8cdd188f370  yesod-core-1.7.0.0/test/YesodCoreTest/JsLoaderSites/Bottom.hs
-formatted       bda9b1f5f2d2  yesod-core-1.7.0.0/test/YesodCoreTest/Json.hs
-formatted       23181a127cee  yesod-core-1.7.0.0/test/YesodCoreTest/Links.hs
-formatted       ab54e89c96fb  yesod-core-1.7.0.0/test/YesodCoreTest/LiteApp.hs
-formatted       cc9f882fd64b  yesod-core-1.7.0.0/test/YesodCoreTest/Media.hs
-formatted       0078c3a7e79d  yesod-core-1.7.0.0/test/YesodCoreTest/MediaData.hs
-formatted       46b0e2d1153d  yesod-core-1.7.0.0/test/YesodCoreTest/Meta.hs
-formatted       d8beeb52123f  yesod-core-1.7.0.0/test/YesodCoreTest/MultiPieceNestedRuntime.hs
-formatted       fb29902bb9c5  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/InnerR.hs
-formatted       4c9ceb4fb663  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/NestR.hs
-formatted       4aed48f429ab  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/Parent0R.hs
-formatted       0f8ca6cd8fe6  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/Parent0R/Child0R.hs
-formatted       762195ad3d8f  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/ParentR.hs
-formatted       7587ed701299  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/Resources.hs
-formatted       36defe4aa862  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/Runtime.hs
-formatted       2c72e04ebbc2  yesod-core-1.7.0.0/test/YesodCoreTest/NoOverloadedStrings.hs
-formatted       320b6668f0c5  yesod-core-1.7.0.0/test/YesodCoreTest/NoOverloadedStringsSub.hs
-formatted       ab80a9a09e84  yesod-core-1.7.0.0/test/YesodCoreTest/ParamDefaultSplit/Data.hs
-formatted       a8472a7588f7  yesod-core-1.7.0.0/test/YesodCoreTest/ParamDefaultSplit/Runtime.hs
-formatted       3b1830a98315  yesod-core-1.7.0.0/test/YesodCoreTest/ParamFallthroughRuntime.hs
-formatted       9191317f2178  yesod-core-1.7.0.0/test/YesodCoreTest/ParamFocusSplit/Resources.hs
-formatted       0d171db106f1  yesod-core-1.7.0.0/test/YesodCoreTest/ParamFocusSplit/Runtime.hs
-formatted       6f7510d0b57c  yesod-core-1.7.0.0/test/YesodCoreTest/ParamFocusSplit/SubR.hs
-formatted       46dbd15fa23d  yesod-core-1.7.0.0/test/YesodCoreTest/ParamNestedNoFallthroughRuntime.hs
-formatted       32c5372b9148  yesod-core-1.7.0.0/test/YesodCoreTest/ParamNoExplicitArgs.hs
-formatted       30470908614f  yesod-core-1.7.0.0/test/YesodCoreTest/ParamNoFallthroughRuntime.hs
-formatted       cf6ee78ba4ee  yesod-core-1.7.0.0/test/YesodCoreTest/ParamSubsite/Data.hs
-formatted       e0dfb958d109  yesod-core-1.7.0.0/test/YesodCoreTest/ParamSubsite/InstanceRuntime.hs
-formatted       020a44aa16b1  yesod-core-1.7.0.0/test/YesodCoreTest/ParamSubsite/SplitNested.hs
-formatted       f8d1220c3bf2  yesod-core-1.7.0.0/test/YesodCoreTest/ParamSubsite/SplitRuntime.hs
-formatted       1981b86c26db  yesod-core-1.7.0.0/test/YesodCoreTest/ParamTopLevelRuntime.hs
-formatted       f991cd7adeb7  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSite.hs
-formatted       0476a7be2abf  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSite/Compat.hs
-formatted       b2b143cf4a47  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSite/PolyAny.hs
-formatted       eb56902b1432  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSite/PolyShow.hs
-formatted       acaebbfebc7a  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSite/SubRoute.hs
-formatted       48e797fc7ef7  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSubData.hs
-formatted       18a74bf9331c  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSubDispatch.hs
-formatted       eb2ad79d2f60  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSubDispatch/Data.hs
-formatted       c0c9e30ebea8  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSubDispatchRuntime.hs
-formatted       09c5b840c977  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSubDispatchRuntime/Data.hs
-formatted       4555e2245690  yesod-core-1.7.0.0/test/YesodCoreTest/RawResponse.hs
-formatted       de49c81693c6  yesod-core-1.7.0.0/test/YesodCoreTest/Redirect.hs
-formatted       ddda63d607db  yesod-core-1.7.0.0/test/YesodCoreTest/RenderRouteSpec.hs
-formatted       139e78486aea  yesod-core-1.7.0.0/test/YesodCoreTest/RenderRouteSpec/TH.hs
-formatted       73425f7bb9ab  yesod-core-1.7.0.0/test/YesodCoreTest/Reps.hs
-formatted       e18610f848a2  yesod-core-1.7.0.0/test/YesodCoreTest/RequestBodySize.hs
-formatted       bf72ad1f5d18  yesod-core-1.7.0.0/test/YesodCoreTest/RuntimeHarness.hs
-formatted       e78bf62c9259  yesod-core-1.7.0.0/test/YesodCoreTest/SplitSubsite/Data.hs
-formatted       d553ab39b43f  yesod-core-1.7.0.0/test/YesodCoreTest/SplitSubsite/NestedR.hs
-formatted       1f144a63c0ce  yesod-core-1.7.0.0/test/YesodCoreTest/SplitSubsite/Runtime.hs
-formatted       a05df238a9e5  yesod-core-1.7.0.0/test/YesodCoreTest/Ssl.hs
-formatted       203d5f3df4f0  yesod-core-1.7.0.0/test/YesodCoreTest/Streaming.hs
-formatted       4a163efbc574  yesod-core-1.7.0.0/test/YesodCoreTest/StubLaxSameSite.hs
-formatted       5831f923349c  yesod-core-1.7.0.0/test/YesodCoreTest/StubSslOnly.hs
-formatted       6510112ce4b4  yesod-core-1.7.0.0/test/YesodCoreTest/StubStrictSameSite.hs
-formatted       9cb2274c1880  yesod-core-1.7.0.0/test/YesodCoreTest/StubUnsecured.hs
-formatted       1f8bcbc31bb2  yesod-core-1.7.0.0/test/YesodCoreTest/SubSub.hs
-formatted       e3aad0dd9042  yesod-core-1.7.0.0/test/YesodCoreTest/SubSubData.hs
-formatted       dbed829ecef5  yesod-core-1.7.0.0/test/YesodCoreTest/SubsiteFallthrough/Data.hs
-formatted       6ef87c226f01  yesod-core-1.7.0.0/test/YesodCoreTest/SubsiteFallthrough/Nested.hs
-formatted       d5e98e912280  yesod-core-1.7.0.0/test/YesodCoreTest/SubsiteFallthrough/Runtime.hs
-formatted       fffa6b1eb3e9  yesod-core-1.7.0.0/test/YesodCoreTest/SubsiteOptsFallthrough/Data.hs
-formatted       a30c02d77457  yesod-core-1.7.0.0/test/YesodCoreTest/SubsiteOptsFallthrough/Runtime.hs
-formatted       353abcbca9cc  yesod-core-1.7.0.0/test/YesodCoreTest/WaiSubsite.hs
+formatted       a2e019984c92  Agda-2.8.0/src/data/MAlonzo/src/MAlonzo/RTE.hs
+formatted       4e3f28ed5e54  Agda-2.8.0/src/data/MAlonzo/src/MAlonzo/RTE/Float.hs
+formatted       124cef969fcd  Agda-2.8.0/src/full/Agda/Benchmarking.hs
+formatted       957956be26ea  Agda-2.8.0/src/full/Agda/Compiler/Backend.hs
+formatted       98789e7a7f39  Agda-2.8.0/src/full/Agda/Compiler/Backend/Base.hs
+formatted       b8be5cf3b8d8  Agda-2.8.0/src/full/Agda/Compiler/Builtin.hs
+formatted       ef45f44548b6  Agda-2.8.0/src/full/Agda/Compiler/CallCompiler.hs
+formatted       f1e15482ea8b  Agda-2.8.0/src/full/Agda/Compiler/Common.hs
+formatted       199ef6355081  Agda-2.8.0/src/full/Agda/Compiler/JS/Compiler.hs
+formatted       778777e97e31  Agda-2.8.0/src/full/Agda/Compiler/JS/Pretty.hs
+formatted       f3ee347549c0  Agda-2.8.0/src/full/Agda/Compiler/JS/Substitution.hs
+formatted       716643be2984  Agda-2.8.0/src/full/Agda/Compiler/JS/Syntax.hs
+formatted       aa25bd2f6330  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Coerce.hs
+formatted       ef6f1f45a952  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Compiler.hs
+formatted       a5e37499e9c4  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Encode.hs
+formatted       04fc0d770103  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/HaskellTypes.hs
+formatted       aa62f795f1b2  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Misc.hs
+formatted       d8bb7b275f39  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Pragmas.hs
+formatted       76490fc3bd40  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Pretty.hs
+formatted       b28a330a89c3  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Primitives.hs
+formatted       cd156da2fa25  Agda-2.8.0/src/full/Agda/Compiler/MAlonzo/Strict.hs
+formatted       c378a2b833ad  Agda-2.8.0/src/full/Agda/Compiler/ToTreeless.hs
+formatted       0abe92b8f16f  Agda-2.8.0/src/full/Agda/Compiler/Treeless/AsPatterns.hs
+formatted       1ef5a4fa98a1  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Builtin.hs
+formatted       ce128b9cab5e  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Compare.hs
+formatted       3f7ef773d4c9  Agda-2.8.0/src/full/Agda/Compiler/Treeless/EliminateDefaults.hs
+formatted       33e35d69d40c  Agda-2.8.0/src/full/Agda/Compiler/Treeless/EliminateLiteralPatterns.hs
+formatted       1ef7b3a1de25  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Erase.hs
+formatted       4bf71aa72967  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Erase.hs-boot
+formatted       6cefe9037318  Agda-2.8.0/src/full/Agda/Compiler/Treeless/GuardsToPrims.hs
+formatted       8722e737dadc  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Identity.hs
+formatted       f933510f2058  Agda-2.8.0/src/full/Agda/Compiler/Treeless/NormalizeNames.hs
+formatted       43adb2681389  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Pretty.hs
+formatted       9e9ffec9fb88  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Pretty.hs-boot
+formatted       4795b9a43709  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Simplify.hs
+formatted       80fddf5d858f  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Subst.hs
+formatted       83543a8ec338  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Uncase.hs
+formatted       24aeb7ff3365  Agda-2.8.0/src/full/Agda/Compiler/Treeless/Unused.hs
+formatted       3985ec175c5f  Agda-2.8.0/src/full/Agda/ImpossibleTest.hs
+formatted       4bfae407a40f  Agda-2.8.0/src/full/Agda/Interaction/AgdaTop.hs
+formatted       e41de99732fd  Agda-2.8.0/src/full/Agda/Interaction/Base.hs
+formatted       7dea38f021f1  Agda-2.8.0/src/full/Agda/Interaction/BasicOps.hs
+formatted       816c519a07e6  Agda-2.8.0/src/full/Agda/Interaction/BuildLibrary.hs
+formatted       eb4048782016  Agda-2.8.0/src/full/Agda/Interaction/Command.hs
+formatted       c894515a3afb  Agda-2.8.0/src/full/Agda/Interaction/CommandLine.hs
+formatted       ab83a5beeab5  Agda-2.8.0/src/full/Agda/Interaction/EmacsCommand.hs
+formatted       555155a56d86  Agda-2.8.0/src/full/Agda/Interaction/EmacsTop.hs
+formatted       720e5305288c  Agda-2.8.0/src/full/Agda/Interaction/ExitCode.hs
+formatted       17bdb4bd6cff  Agda-2.8.0/src/full/Agda/Interaction/FindFile.hs
+formatted       3170eb1921b4  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Common.hs
+formatted       1fb0462a1b45  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Dot.hs
+formatted       273d20bb2305  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Dot/Backend.hs
+formatted       fc10621b7e2c  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Dot/Base.hs
+formatted       773365a6b3e4  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Emacs.hs
+formatted       cb992e2c3ef4  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/FromAbstract.hs
+formatted       b592d71b267b  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Generate.hs
+formatted       8bc140b18e62  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Generate.hs-boot
+formatted       9a3fde618f2b  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/HTML.hs
+formatted       3838841067f3  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/HTML/Backend.hs
+formatted       b17a80a34eff  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/HTML/Base.hs
+formatted       d36037cbeadf  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/JSON.hs
+formatted       b5bb035e43f1  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/LaTeX.hs
+formatted       8bd4871fba54  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/LaTeX/Backend.hs
+formatted       45edbada6fe2  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/LaTeX/Base.hs
+formatted       a58ba6711ffc  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Precise.hs
+formatted       c9f5864c0103  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Range.hs
+formatted       0054edf8b9e6  Agda-2.8.0/src/full/Agda/Interaction/Highlighting/Vim.hs
+formatted       d0f1fa308509  Agda-2.8.0/src/full/Agda/Interaction/Imports.hs
+formatted       65e8798f3384  Agda-2.8.0/src/full/Agda/Interaction/Imports.hs-boot
+formatted       e71203866f7c  Agda-2.8.0/src/full/Agda/Interaction/InteractionTop.hs
+formatted       3424b7b23f57  Agda-2.8.0/src/full/Agda/Interaction/JSON.hs
+formatted       ee7c581ca624  Agda-2.8.0/src/full/Agda/Interaction/JSONTop.hs
+formatted       b1854ec69b1d  Agda-2.8.0/src/full/Agda/Interaction/Library.hs
+formatted       803e9d296a38  Agda-2.8.0/src/full/Agda/Interaction/Library/Base.hs
+formatted       485f6f0b6ae7  Agda-2.8.0/src/full/Agda/Interaction/Library/Parse.hs
+formatted       8cf6215e1bb9  Agda-2.8.0/src/full/Agda/Interaction/MakeCase.hs
+formatted       dccaf3f6ab13  Agda-2.8.0/src/full/Agda/Interaction/Monad.hs
+formatted       c831a742f557  Agda-2.8.0/src/full/Agda/Interaction/Options.hs
+formatted       ff905a26b6ef  Agda-2.8.0/src/full/Agda/Interaction/Options/Base.hs
+formatted       d1a377c4a707  Agda-2.8.0/src/full/Agda/Interaction/Options/Errors.hs
+formatted       e44ed789f5f9  Agda-2.8.0/src/full/Agda/Interaction/Options/HasOptions.hs
+formatted       434d46226886  Agda-2.8.0/src/full/Agda/Interaction/Options/Help.hs
+formatted       8955b5901517  Agda-2.8.0/src/full/Agda/Interaction/Options/Lenses.hs
+formatted       e04f7f2b15cd  Agda-2.8.0/src/full/Agda/Interaction/Options/Types.hs
+formatted       d4126d498421  Agda-2.8.0/src/full/Agda/Interaction/Options/Warnings.hs
+formatted       11f05a0591fc  Agda-2.8.0/src/full/Agda/Interaction/Output.hs
+formatted       772e302dedad  Agda-2.8.0/src/full/Agda/Interaction/Response.hs
+formatted       77cf584c94f3  Agda-2.8.0/src/full/Agda/Interaction/Response/Base.hs
+formatted       150002ef2df6  Agda-2.8.0/src/full/Agda/Interaction/SearchAbout.hs
+declined        -             Agda-2.8.0/src/full/Agda/Main.hs
+formatted       089cf0cbdae7  Agda-2.8.0/src/full/Agda/Mimer/Mimer.hs
+formatted       5ee8e2854fd8  Agda-2.8.0/src/full/Agda/Mimer/Options.hs
+formatted       d31e480d5b64  Agda-2.8.0/src/full/Agda/Syntax/Abstract.hs
+formatted       c6c710983329  Agda-2.8.0/src/full/Agda/Syntax/Abstract/Name.hs
+formatted       e3b2246d927b  Agda-2.8.0/src/full/Agda/Syntax/Abstract/Pattern.hs
+formatted       8f9f098701be  Agda-2.8.0/src/full/Agda/Syntax/Abstract/PatternSynonyms.hs
+formatted       3f1f9a03363a  Agda-2.8.0/src/full/Agda/Syntax/Abstract/Pretty.hs
+formatted       965e3c3c1a0e  Agda-2.8.0/src/full/Agda/Syntax/Abstract/UsedNames.hs
+formatted       fe4b31b903f2  Agda-2.8.0/src/full/Agda/Syntax/Abstract/Views.hs
+formatted       4860938107fe  Agda-2.8.0/src/full/Agda/Syntax/Builtin.hs
+formatted       a551f361a03b  Agda-2.8.0/src/full/Agda/Syntax/Common.hs
+formatted       e4fbe59bf094  Agda-2.8.0/src/full/Agda/Syntax/Common/Aspect.hs
+formatted       24ed1641ef0b  Agda-2.8.0/src/full/Agda/Syntax/Common/KeywordRange.hs
+formatted       bddb87a288f9  Agda-2.8.0/src/full/Agda/Syntax/Common/Pretty.hs
+formatted       0b01caf3aafb  Agda-2.8.0/src/full/Agda/Syntax/Common/Pretty/ANSI.hs
+formatted       ab82680e0ed9  Agda-2.8.0/src/full/Agda/Syntax/Concrete.hs
+formatted       3ac132adc898  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Attribute.hs
+formatted       8a621f4f4558  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Definitions.hs
+formatted       426479b8ea34  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Definitions/Errors.hs
+formatted       9b402d20ca09  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Definitions/Monad.hs
+formatted       7b8c167c0685  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Definitions/Types.hs
+formatted       961ee2376643  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Fixity.hs
+formatted       d906da5f87a7  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Generic.hs
+formatted       6a2db093db8c  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Glyph.hs
+formatted       88279e378aeb  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Name.hs
+formatted       6a2bac89820e  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Operators.hs
+formatted       ce9f55c318d6  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Operators/Parser.hs
+formatted       d052bdb98637  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Operators/Parser/Monad.hs
+formatted       7e63c760f37f  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Pattern.hs
+formatted       279d71b7193a  Agda-2.8.0/src/full/Agda/Syntax/Concrete/Pretty.hs
+formatted       db8fd8405ab1  Agda-2.8.0/src/full/Agda/Syntax/DoNotation.hs
+formatted       0fa4ef8ac984  Agda-2.8.0/src/full/Agda/Syntax/Fixity.hs
+formatted       f53d6a38a8a5  Agda-2.8.0/src/full/Agda/Syntax/IdiomBrackets.hs
+formatted       30d96511b2ee  Agda-2.8.0/src/full/Agda/Syntax/Info.hs
+formatted       2c69ecf0c73d  Agda-2.8.0/src/full/Agda/Syntax/Internal.hs
+formatted       16ce0f4386b9  Agda-2.8.0/src/full/Agda/Syntax/Internal/Blockers.hs
+formatted       0c3da8bec4ce  Agda-2.8.0/src/full/Agda/Syntax/Internal/Defs.hs
+formatted       93a21efc34d2  Agda-2.8.0/src/full/Agda/Syntax/Internal/Elim.hs
+formatted       59acbea17d71  Agda-2.8.0/src/full/Agda/Syntax/Internal/Generic.hs
+formatted       ff9aafebc54f  Agda-2.8.0/src/full/Agda/Syntax/Internal/MetaVars.hs
+formatted       0da6abb2c898  Agda-2.8.0/src/full/Agda/Syntax/Internal/Names.hs
+formatted       70a2a49f93c0  Agda-2.8.0/src/full/Agda/Syntax/Internal/Pattern.hs
+formatted       4f0688215ae9  Agda-2.8.0/src/full/Agda/Syntax/Internal/SanityCheck.hs
+formatted       dc9c871223a7  Agda-2.8.0/src/full/Agda/Syntax/Internal/Univ.hs
+formatted       0d45e13b2a31  Agda-2.8.0/src/full/Agda/Syntax/Literal.hs
+formatted       1f5db6f08b8e  Agda-2.8.0/src/full/Agda/Syntax/Notation.hs
+formatted       5441d15e6659  Agda-2.8.0/src/full/Agda/Syntax/Parser.hs
+formatted       38e524b350d0  Agda-2.8.0/src/full/Agda/Syntax/Parser/Alex.hs
+formatted       b58b3e60f482  Agda-2.8.0/src/full/Agda/Syntax/Parser/Comments.hs
+formatted       2502cd0a5c24  Agda-2.8.0/src/full/Agda/Syntax/Parser/Helpers.hs
+formatted       0131f3ce9187  Agda-2.8.0/src/full/Agda/Syntax/Parser/Layout.hs
+formatted       700549be6fd6  Agda-2.8.0/src/full/Agda/Syntax/Parser/Layout.hs-boot
+formatted       2e1b70194e94  Agda-2.8.0/src/full/Agda/Syntax/Parser/LexActions.hs
+formatted       a5d57cb1b6b9  Agda-2.8.0/src/full/Agda/Syntax/Parser/LexActions.hs-boot
+formatted       eec09f91bea6  Agda-2.8.0/src/full/Agda/Syntax/Parser/Literate.hs
+formatted       7eb92ce94825  Agda-2.8.0/src/full/Agda/Syntax/Parser/LookAhead.hs
+formatted       0936ca900233  Agda-2.8.0/src/full/Agda/Syntax/Parser/Monad.hs
+formatted       6b041886ce39  Agda-2.8.0/src/full/Agda/Syntax/Parser/StringLiterals.hs
+formatted       2c4b958b94a9  Agda-2.8.0/src/full/Agda/Syntax/Parser/Tokens.hs
+formatted       a0ef5d8e9313  Agda-2.8.0/src/full/Agda/Syntax/Position.hs
+formatted       d16539c2a462  Agda-2.8.0/src/full/Agda/Syntax/Position.hs-boot
+formatted       b1dd8bfd3111  Agda-2.8.0/src/full/Agda/Syntax/Reflected.hs
+formatted       e07f0327dc05  Agda-2.8.0/src/full/Agda/Syntax/Scope/Base.hs
+formatted       6ff9f287871d  Agda-2.8.0/src/full/Agda/Syntax/Scope/Flat.hs
+formatted       074a6f85bb7d  Agda-2.8.0/src/full/Agda/Syntax/Scope/Monad.hs
+formatted       d3a3db0834c5  Agda-2.8.0/src/full/Agda/Syntax/TopLevelModuleName.hs
+formatted       f40939e29708  Agda-2.8.0/src/full/Agda/Syntax/TopLevelModuleName/Boot.hs
+formatted       186389ffe3cc  Agda-2.8.0/src/full/Agda/Syntax/Translation/AbstractToConcrete.hs
+formatted       0ad45d8e0040  Agda-2.8.0/src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs
+formatted       5a2ce5ab4c13  Agda-2.8.0/src/full/Agda/Syntax/Translation/InternalToAbstract.hs
+formatted       8c2de5355091  Agda-2.8.0/src/full/Agda/Syntax/Translation/ReflectedToAbstract.hs
+formatted       1833fe43bc3a  Agda-2.8.0/src/full/Agda/Syntax/Treeless.hs
+formatted       12a4f8c1947c  Agda-2.8.0/src/full/Agda/Termination/CallGraph.hs
+formatted       cfc23b42c681  Agda-2.8.0/src/full/Agda/Termination/CallMatrix.hs
+formatted       ebc4ce14c917  Agda-2.8.0/src/full/Agda/Termination/CutOff.hs
+formatted       4ff8fc0f073c  Agda-2.8.0/src/full/Agda/Termination/Monad.hs
+formatted       2c8fd045045b  Agda-2.8.0/src/full/Agda/Termination/Order.hs
+formatted       3d6943fd6805  Agda-2.8.0/src/full/Agda/Termination/RecCheck.hs
+formatted       5d2396bcde51  Agda-2.8.0/src/full/Agda/Termination/Semiring.hs
+formatted       8231b4fafab9  Agda-2.8.0/src/full/Agda/Termination/SparseMatrix.hs
+formatted       5cf49fc9d151  Agda-2.8.0/src/full/Agda/Termination/TermCheck.hs
+formatted       ed0ea780ef94  Agda-2.8.0/src/full/Agda/Termination/Termination.hs
+formatted       9ce4d907acfa  Agda-2.8.0/src/full/Agda/TheTypeChecker.hs
+formatted       522c2e92c2f2  Agda-2.8.0/src/full/Agda/TypeChecking/Abstract.hs
+formatted       e757073d2d4e  Agda-2.8.0/src/full/Agda/TypeChecking/CheckInternal.hs
+formatted       2d6bbce1312f  Agda-2.8.0/src/full/Agda/TypeChecking/CheckInternal.hs-boot
+formatted       32a35663e792  Agda-2.8.0/src/full/Agda/TypeChecking/CompiledClause.hs
+formatted       93990b804e2f  Agda-2.8.0/src/full/Agda/TypeChecking/CompiledClause/Compile.hs
+formatted       6b8cf4277b16  Agda-2.8.0/src/full/Agda/TypeChecking/CompiledClause/Compile.hs-boot
+formatted       a141f28ffb17  Agda-2.8.0/src/full/Agda/TypeChecking/CompiledClause/Match.hs
+formatted       3142e5d8c639  Agda-2.8.0/src/full/Agda/TypeChecking/CompiledClause/Match.hs-boot
+formatted       8daa667ddddd  Agda-2.8.0/src/full/Agda/TypeChecking/Constraints.hs
+formatted       47ac61419563  Agda-2.8.0/src/full/Agda/TypeChecking/Constraints.hs-boot
+broken          1d46dc5f6f5c  Agda-2.8.0/src/full/Agda/TypeChecking/Conversion.hs
+formatted       cc3a6f5cf005  Agda-2.8.0/src/full/Agda/TypeChecking/Conversion.hs-boot
+formatted       8bb452c258d1  Agda-2.8.0/src/full/Agda/TypeChecking/Conversion/Pure.hs
+formatted       5078fcc899f4  Agda-2.8.0/src/full/Agda/TypeChecking/Coverage.hs
+formatted       494defadf31e  Agda-2.8.0/src/full/Agda/TypeChecking/Coverage/Cubical.hs
+formatted       a5d8271fb8c7  Agda-2.8.0/src/full/Agda/TypeChecking/Coverage/Match.hs
+formatted       66752ed436cd  Agda-2.8.0/src/full/Agda/TypeChecking/Coverage/SplitClause.hs
+formatted       50e4c607d3c4  Agda-2.8.0/src/full/Agda/TypeChecking/Coverage/SplitTree.hs
+formatted       a628c1c13722  Agda-2.8.0/src/full/Agda/TypeChecking/Datatypes.hs
+formatted       bf771aa7c583  Agda-2.8.0/src/full/Agda/TypeChecking/Datatypes.hs-boot
+formatted       70b7181d282e  Agda-2.8.0/src/full/Agda/TypeChecking/DeadCode.hs
+formatted       59bd9e3da33e  Agda-2.8.0/src/full/Agda/TypeChecking/DiscrimTree.hs
+formatted       c17cb27af1b5  Agda-2.8.0/src/full/Agda/TypeChecking/DiscrimTree/Types.hs
+formatted       ee105b08c0e0  Agda-2.8.0/src/full/Agda/TypeChecking/DisplayForm.hs
+formatted       db46b8c74ecf  Agda-2.8.0/src/full/Agda/TypeChecking/DropArgs.hs
+formatted       c4bcc3ec3efc  Agda-2.8.0/src/full/Agda/TypeChecking/Empty.hs
+formatted       546e2690c8bd  Agda-2.8.0/src/full/Agda/TypeChecking/Empty.hs-boot
+formatted       be42b289f13f  Agda-2.8.0/src/full/Agda/TypeChecking/Errors.hs
+formatted       4d637dbd29d8  Agda-2.8.0/src/full/Agda/TypeChecking/Errors.hs-boot
+formatted       aaf8e5a6f74a  Agda-2.8.0/src/full/Agda/TypeChecking/Errors/Names.hs
+formatted       fa9468d1b394  Agda-2.8.0/src/full/Agda/TypeChecking/EtaContract.hs
+formatted       cf915294753e  Agda-2.8.0/src/full/Agda/TypeChecking/Forcing.hs
+formatted       bdbb0b01cf6e  Agda-2.8.0/src/full/Agda/TypeChecking/Free.hs
+formatted       8db094c5d7c6  Agda-2.8.0/src/full/Agda/TypeChecking/Free/Lazy.hs
+formatted       e10225542a24  Agda-2.8.0/src/full/Agda/TypeChecking/Free/Precompute.hs
+formatted       ed93d677a9dd  Agda-2.8.0/src/full/Agda/TypeChecking/Free/Reduce.hs
+formatted       dda08728d05b  Agda-2.8.0/src/full/Agda/TypeChecking/Functions.hs
+formatted       9fc3cf57b64a  Agda-2.8.0/src/full/Agda/TypeChecking/Generalize.hs
+formatted       e7eb98a27abe  Agda-2.8.0/src/full/Agda/TypeChecking/IApplyConfluence.hs
+formatted       87b0399276b5  Agda-2.8.0/src/full/Agda/TypeChecking/Implicit.hs
+formatted       d835876f5a10  Agda-2.8.0/src/full/Agda/TypeChecking/Injectivity.hs
+formatted       32f96c636db2  Agda-2.8.0/src/full/Agda/TypeChecking/Inlining.hs
+formatted       717f70a59997  Agda-2.8.0/src/full/Agda/TypeChecking/InstanceArguments.hs
+formatted       daede539773d  Agda-2.8.0/src/full/Agda/TypeChecking/InstanceArguments.hs-boot
+formatted       e3ca55cde230  Agda-2.8.0/src/full/Agda/TypeChecking/Irrelevance.hs
+formatted       f5e2359204d8  Agda-2.8.0/src/full/Agda/TypeChecking/Irrelevance.hs-boot
+formatted       d1ef164ce157  Agda-2.8.0/src/full/Agda/TypeChecking/Level.hs
+formatted       4df75f041db4  Agda-2.8.0/src/full/Agda/TypeChecking/Level.hs-boot
+formatted       43902630fee9  Agda-2.8.0/src/full/Agda/TypeChecking/Level/Solve.hs
+formatted       ae0893a4561e  Agda-2.8.0/src/full/Agda/TypeChecking/LevelConstraints.hs
+formatted       f1d52a2a57f4  Agda-2.8.0/src/full/Agda/TypeChecking/Lock.hs
+formatted       00b8f5e75aa7  Agda-2.8.0/src/full/Agda/TypeChecking/Lock.hs-boot
+formatted       4d6c3253493c  Agda-2.8.0/src/full/Agda/TypeChecking/MetaVars.hs
+formatted       52101179c5b2  Agda-2.8.0/src/full/Agda/TypeChecking/MetaVars.hs-boot
+formatted       d45b97295243  Agda-2.8.0/src/full/Agda/TypeChecking/MetaVars/Mention.hs
+formatted       402d1f890cfc  Agda-2.8.0/src/full/Agda/TypeChecking/MetaVars/Occurs.hs
+formatted       d47e8c206217  Agda-2.8.0/src/full/Agda/TypeChecking/Modalities.hs
+formatted       1fd16a038ff2  Agda-2.8.0/src/full/Agda/TypeChecking/Monad.hs
+formatted       60eaec2ce48f  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Base.hs
+formatted       8a87322aad4c  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Base/Types.hs
+formatted       7860b2253820  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Base/Warning.hs
+formatted       56ab8bfd7ea3  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Benchmark.hs
+formatted       28bf26746324  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Builtin.hs
+formatted       6b2e93e4eef0  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Builtin.hs-boot
+formatted       d3627bb3ef79  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Caching.hs
+formatted       ceeedfc93ba5  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Closure.hs
+formatted       9e856998188f  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Constraints.hs
+formatted       965403e8d54c  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Context.hs
+formatted       aa421afb353b  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Context.hs-boot
+formatted       93f76be51b99  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Debug.hs
+formatted       07c8440dbd10  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Debug.hs-boot
+formatted       ab2c039addc8  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Env.hs
+formatted       46512cb4f780  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Imports.hs
+formatted       5fb2e7fde476  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/MetaVars.hs
+formatted       894d39f81e58  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/MetaVars.hs-boot
+formatted       b783b82e5721  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Modality.hs
+formatted       bbf8f13a117e  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Mutual.hs
+formatted       8fe6e5c381d6  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Open.hs
+formatted       dbde98a0370f  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Options.hs
+formatted       2b144a9f6ada  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Options.hs-boot
+formatted       a266ccade893  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Pure.hs
+formatted       f549f9160d1c  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Pure.hs-boot
+formatted       f045762684e1  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Signature.hs
+formatted       a5b44843ae0b  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Signature.hs-boot
+formatted       29bd7bc7527e  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/SizedTypes.hs
+formatted       9573759abf1d  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/State.hs
+formatted       63e1167a5c2e  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Statistics.hs
+formatted       091a951c4837  Agda-2.8.0/src/full/Agda/TypeChecking/Monad/Trace.hs
+formatted       38ca9a4b989f  Agda-2.8.0/src/full/Agda/TypeChecking/Names.hs
+formatted       5519525e6548  Agda-2.8.0/src/full/Agda/TypeChecking/Opacity.hs
+formatted       d26ddecf1923  Agda-2.8.0/src/full/Agda/TypeChecking/Opacity.hs-boot
+formatted       ec77f6d2c4ee  Agda-2.8.0/src/full/Agda/TypeChecking/Patterns/Abstract.hs
+formatted       0f6e0c168a7c  Agda-2.8.0/src/full/Agda/TypeChecking/Patterns/Internal.hs
+formatted       3bed5c67293b  Agda-2.8.0/src/full/Agda/TypeChecking/Patterns/Match.hs
+formatted       5ee7033010bf  Agda-2.8.0/src/full/Agda/TypeChecking/Patterns/Match.hs-boot
+formatted       997967b0096b  Agda-2.8.0/src/full/Agda/TypeChecking/Polarity.hs
+formatted       2f5659c12840  Agda-2.8.0/src/full/Agda/TypeChecking/Polarity.hs-boot
+formatted       ac80c89f00e2  Agda-2.8.0/src/full/Agda/TypeChecking/Positivity.hs
+formatted       5626959a260d  Agda-2.8.0/src/full/Agda/TypeChecking/Positivity/Occurrence.hs
+formatted       850bea97b290  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty.hs
+formatted       8bd6edac6240  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty.hs-boot
+formatted       9a154e2294df  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Call.hs
+formatted       f5434869778b  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Call.hs-boot
+formatted       8985c4fc0bc9  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Constraint.hs
+formatted       4c2edd49d675  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Constraint.hs-boot
+formatted       b837e0103e3f  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Warning.hs
+formatted       bf4e737ce041  Agda-2.8.0/src/full/Agda/TypeChecking/Pretty/Warning.hs-boot
+formatted       0f23e151fb6a  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive.hs
+formatted       3c8fe98419dd  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive.hs-boot
+formatted       aa1bd02aba20  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Base.hs
+formatted       42186252e310  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Cubical.hs
+formatted       52687d62262c  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Cubical/Base.hs
+formatted       34da472277ef  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Cubical/Base.hs-boot
+formatted       4aec12c8b204  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Cubical/Glue.hs
+formatted       4056250b5173  Agda-2.8.0/src/full/Agda/TypeChecking/Primitive/Cubical/HCompU.hs
+formatted       78197ae078a9  Agda-2.8.0/src/full/Agda/TypeChecking/ProjectionLike.hs
+formatted       21d019305ce5  Agda-2.8.0/src/full/Agda/TypeChecking/ProjectionLike.hs-boot
+formatted       2505bf50d757  Agda-2.8.0/src/full/Agda/TypeChecking/Quote.hs
+formatted       134651a3168e  Agda-2.8.0/src/full/Agda/TypeChecking/ReconstructParameters.hs
+formatted       684e26974384  Agda-2.8.0/src/full/Agda/TypeChecking/RecordPatterns.hs
+formatted       8affdcc8111a  Agda-2.8.0/src/full/Agda/TypeChecking/Records.hs
+formatted       65b1d93597cd  Agda-2.8.0/src/full/Agda/TypeChecking/Records.hs-boot
+formatted       d4aed64e6ee4  Agda-2.8.0/src/full/Agda/TypeChecking/Reduce.hs
+formatted       82cb10489996  Agda-2.8.0/src/full/Agda/TypeChecking/Reduce.hs-boot
+formatted       63e3382d2f1d  Agda-2.8.0/src/full/Agda/TypeChecking/Reduce/Fast.hs
+formatted       2158647025d5  Agda-2.8.0/src/full/Agda/TypeChecking/Reduce/Fast.hs-boot
+formatted       52ceaeb66838  Agda-2.8.0/src/full/Agda/TypeChecking/Reduce/Monad.hs
+formatted       4138b13a5df5  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting.hs
+formatted       0158a552c77f  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting.hs-boot
+formatted       682e7693d697  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting/Clause.hs
+formatted       814593fa1f25  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting/Confluence.hs
+formatted       ffa8c612942d  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting/NonLinMatch.hs
+formatted       cf2803dfe738  Agda-2.8.0/src/full/Agda/TypeChecking/Rewriting/NonLinPattern.hs
+formatted       205e34acf2dd  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Application.hs
+formatted       8094c6b9ca8d  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Application.hs-boot
+formatted       fe23087ac386  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Builtin.hs
+formatted       bb96b8d55347  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs
+formatted       48f627566132  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs-boot
+formatted       1f8fe493c19f  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Data.hs
+formatted       89ea7a6db701  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Data.hs-boot
+formatted       8ca53478922f  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Decl.hs
+formatted       c3dda6e649e5  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Decl.hs-boot
+formatted       65e84b8c3d9a  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Def.hs
+formatted       aa2e722e924d  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Def.hs-boot
+formatted       fed954351c6b  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Display.hs
+formatted       01bddfcb50ba  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS.hs
+formatted       6773a3880c72  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs
+formatted       da382d16a0bc  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/Problem.hs
+formatted       faf2b455193b  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs
+formatted       e85e560d8ceb  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/Unify.hs
+formatted       302ff532dcd1  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/Unify/LeftInverse.hs
+formatted       d015b6099a7b  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/LHS/Unify/Types.hs
+formatted       4491692a08c5  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Record.hs
+formatted       067a1492920c  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Term.hs
+formatted       ccd5b1bd7f62  Agda-2.8.0/src/full/Agda/TypeChecking/Rules/Term.hs-boot
+formatted       49e329be866f  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise.hs
+formatted       b9cec9d0620c  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Base.hs
+formatted       0b03fe8ecc8f  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances.hs
+formatted       50a087db59cf  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs
+formatted       36d52dce312e  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Common.hs
+formatted       d11e2e781bb4  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Compilers.hs
+formatted       1f1b6ebe3573  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Errors.hs
+formatted       abbb853d7207  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs
+formatted       63778a1a49ac  Agda-2.8.0/src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs
+formatted       b5090c8315a6  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes.hs
+formatted       b681d54f057a  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes/Pretty.hs
+formatted       1d5f439ca188  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes/Solve.hs
+formatted       758f61663e05  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes/Syntax.hs
+formatted       904a4e241e74  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes/Utils.hs
+formatted       d63891bced83  Agda-2.8.0/src/full/Agda/TypeChecking/SizedTypes/WarshallSolver.hs
+formatted       5e29033dec27  Agda-2.8.0/src/full/Agda/TypeChecking/Sort.hs
+formatted       a6f77cb4339d  Agda-2.8.0/src/full/Agda/TypeChecking/Substitute.hs
+formatted       0710e932d5c1  Agda-2.8.0/src/full/Agda/TypeChecking/Substitute/Class.hs
+formatted       2656f0d28fba  Agda-2.8.0/src/full/Agda/TypeChecking/Substitute/DeBruijn.hs
+formatted       bdddf47208eb  Agda-2.8.0/src/full/Agda/TypeChecking/SyntacticEquality.hs
+formatted       9403f483b826  Agda-2.8.0/src/full/Agda/TypeChecking/Telescope.hs
+formatted       d94c0d202dfc  Agda-2.8.0/src/full/Agda/TypeChecking/Telescope.hs-boot
+formatted       687ac4667b88  Agda-2.8.0/src/full/Agda/TypeChecking/Telescope/Path.hs
+formatted       d927a41c56d4  Agda-2.8.0/src/full/Agda/TypeChecking/Unquote.hs
+formatted       80d32d18ead5  Agda-2.8.0/src/full/Agda/TypeChecking/Warnings.hs
+formatted       1e8984d31ba8  Agda-2.8.0/src/full/Agda/TypeChecking/With.hs
+formatted       b02f16e6d20a  Agda-2.8.0/src/full/Agda/Utils/AffineHole.hs
+formatted       ae5ced9ae20f  Agda-2.8.0/src/full/Agda/Utils/Applicative.hs
+formatted       7fe48d6127fe  Agda-2.8.0/src/full/Agda/Utils/AssocList.hs
+formatted       72df986a37f7  Agda-2.8.0/src/full/Agda/Utils/Bag.hs
+formatted       3856d320f4f2  Agda-2.8.0/src/full/Agda/Utils/Benchmark.hs
+formatted       19e137bd74e4  Agda-2.8.0/src/full/Agda/Utils/BiMap.hs
+formatted       09925de009a1  Agda-2.8.0/src/full/Agda/Utils/BoolSet.hs
+formatted       7f37f70bbf2b  Agda-2.8.0/src/full/Agda/Utils/Boolean.hs
+formatted       880aa8847616  Agda-2.8.0/src/full/Agda/Utils/CallStack.hs
+formatted       1f39698a4f6d  Agda-2.8.0/src/full/Agda/Utils/CallStack/Base.hs
+formatted       dfecf0fc01d4  Agda-2.8.0/src/full/Agda/Utils/CallStack/Pretty.hs
+formatted       eeedf1a4e3da  Agda-2.8.0/src/full/Agda/Utils/Char.hs
+formatted       2b8eb290abc6  Agda-2.8.0/src/full/Agda/Utils/Cluster.hs
+formatted       b2757fa5ae2f  Agda-2.8.0/src/full/Agda/Utils/Either.hs
+formatted       5c0f9924f59f  Agda-2.8.0/src/full/Agda/Utils/Empty.hs
+formatted       284145f1db7f  Agda-2.8.0/src/full/Agda/Utils/Environment.hs
+formatted       e2b0e8db2604  Agda-2.8.0/src/full/Agda/Utils/Fail.hs
+formatted       7ba92e89857d  Agda-2.8.0/src/full/Agda/Utils/Favorites.hs
+formatted       73363066a6a3  Agda-2.8.0/src/full/Agda/Utils/FileId.hs
+formatted       99723aa601c1  Agda-2.8.0/src/full/Agda/Utils/FileName.hs
+formatted       e5f5fbd21c99  Agda-2.8.0/src/full/Agda/Utils/Float.hs
+formatted       bb823613272f  Agda-2.8.0/src/full/Agda/Utils/Function.hs
+formatted       75a5028a6b1a  Agda-2.8.0/src/full/Agda/Utils/Functor.hs
+formatted       026b04b8661e  Agda-2.8.0/src/full/Agda/Utils/GetOpt.hs
+formatted       f69e6f903328  Agda-2.8.0/src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional.hs
+formatted       989ea83c378b  Agda-2.8.0/src/full/Agda/Utils/Graph/TopSort.hs
+formatted       db38367e7a17  Agda-2.8.0/src/full/Agda/Utils/Hash.hs
+formatted       43284ef7124c  Agda-2.8.0/src/full/Agda/Utils/HashTable.hs
+formatted       019e9637b9b0  Agda-2.8.0/src/full/Agda/Utils/Haskell/Syntax.hs
+formatted       7802531cbbc5  Agda-2.8.0/src/full/Agda/Utils/IArray.hs
+formatted       8d53e1639c43  Agda-2.8.0/src/full/Agda/Utils/IO.hs
+formatted       ddd200e851ab  Agda-2.8.0/src/full/Agda/Utils/IO/Binary.hs
+formatted       c62ffb044eae  Agda-2.8.0/src/full/Agda/Utils/IO/Directory.hs
+formatted       44ca6943bebd  Agda-2.8.0/src/full/Agda/Utils/IO/TempFile.hs
+formatted       51a9c4ed68e8  Agda-2.8.0/src/full/Agda/Utils/IO/UTF8.hs
+formatted       d938f94198a6  Agda-2.8.0/src/full/Agda/Utils/IORef.hs
+formatted       695329a3bad9  Agda-2.8.0/src/full/Agda/Utils/Impossible.hs
+formatted       e5520ad27268  Agda-2.8.0/src/full/Agda/Utils/IndexedList.hs
+formatted       89c592a4472e  Agda-2.8.0/src/full/Agda/Utils/IntSet/Infinite.hs
+formatted       37f9f2b34f7d  Agda-2.8.0/src/full/Agda/Utils/Lens.hs
+formatted       89e41b43691d  Agda-2.8.0/src/full/Agda/Utils/Lens/Examples.hs
+formatted       ef65f125c3b1  Agda-2.8.0/src/full/Agda/Utils/List.hs
+formatted       8392227e3997  Agda-2.8.0/src/full/Agda/Utils/List1.hs
+formatted       3bd635eb52aa  Agda-2.8.0/src/full/Agda/Utils/List1.hs-boot
+formatted       3514de48df05  Agda-2.8.0/src/full/Agda/Utils/List2.hs
+formatted       652d388d38ab  Agda-2.8.0/src/full/Agda/Utils/ListT.hs
+formatted       960b2b6f10d7  Agda-2.8.0/src/full/Agda/Utils/Map.hs
+formatted       8c9045bc776a  Agda-2.8.0/src/full/Agda/Utils/Map1.hs
+formatted       6e06ef12a477  Agda-2.8.0/src/full/Agda/Utils/Maybe.hs
+formatted       f52b8f698d5f  Agda-2.8.0/src/full/Agda/Utils/Maybe/Strict.hs
+formatted       fde8defcff6d  Agda-2.8.0/src/full/Agda/Utils/Memo.hs
+formatted       df3a8985dc8e  Agda-2.8.0/src/full/Agda/Utils/Monad.hs
+formatted       4f8109a5fa85  Agda-2.8.0/src/full/Agda/Utils/Monoid.hs
+formatted       92bb2192c3b2  Agda-2.8.0/src/full/Agda/Utils/Null.hs
+formatted       4fd8ca5748d3  Agda-2.8.0/src/full/Agda/Utils/POMonoid.hs
+formatted       bb186d0604db  Agda-2.8.0/src/full/Agda/Utils/Parser/MemoisedCPS.hs
+formatted       c2d2ccfc3558  Agda-2.8.0/src/full/Agda/Utils/PartialOrd.hs
+formatted       687575c7f482  Agda-2.8.0/src/full/Agda/Utils/Permutation.hs
+formatted       fda572184491  Agda-2.8.0/src/full/Agda/Utils/ProfileOptions.hs
+formatted       49a18a2c6aec  Agda-2.8.0/src/full/Agda/Utils/RangeMap.hs
+formatted       5039e6e9abfe  Agda-2.8.0/src/full/Agda/Utils/SemiRing.hs
+formatted       9aa281a4615c  Agda-2.8.0/src/full/Agda/Utils/Semigroup.hs
+formatted       fdb04073ce98  Agda-2.8.0/src/full/Agda/Utils/Set1.hs
+formatted       f45ad8f08443  Agda-2.8.0/src/full/Agda/Utils/Singleton.hs
+formatted       18c4a0bbe326  Agda-2.8.0/src/full/Agda/Utils/Size.hs
+formatted       f8b306deacdf  Agda-2.8.0/src/full/Agda/Utils/SmallSet.hs
+formatted       21babb4b50a9  Agda-2.8.0/src/full/Agda/Utils/String.hs
+formatted       57a8a5b9fa29  Agda-2.8.0/src/full/Agda/Utils/Suffix.hs
+formatted       736b26cda8bc  Agda-2.8.0/src/full/Agda/Utils/Three.hs
+formatted       ebc104ac11d6  Agda-2.8.0/src/full/Agda/Utils/Time.hs
+formatted       50c5753d1ca4  Agda-2.8.0/src/full/Agda/Utils/Trie.hs
+formatted       1711e06969b5  Agda-2.8.0/src/full/Agda/Utils/Tuple.hs
+formatted       db9dcb1b8f66  Agda-2.8.0/src/full/Agda/Utils/TypeLevel.hs
+formatted       c8c672126225  Agda-2.8.0/src/full/Agda/Utils/TypeLits.hs
+formatted       8d8d3b50eebc  Agda-2.8.0/src/full/Agda/Utils/Unsafe.hs
+formatted       7d2c7a588009  Agda-2.8.0/src/full/Agda/Utils/Update.hs
+formatted       383866b27bb0  Agda-2.8.0/src/full/Agda/Utils/VarSet.hs
+formatted       9f0839da86cb  Agda-2.8.0/src/full/Agda/Utils/WithDefault.hs
+formatted       fe0ca6de293d  Agda-2.8.0/src/full/Agda/Utils/Zipper.hs
+formatted       86e923a357db  Agda-2.8.0/src/main/Main.hs
+formatted       d3512172a4bc  Agda-2.8.0/src/setup/Agda/Setup.hs
+formatted       114aa5ab1508  Agda-2.8.0/src/setup/Agda/Setup/DataFiles.hs
+formatted       42af21c8ecf8  Agda-2.8.0/src/setup/Agda/Setup/EmacsMode.hs
+formatted       acb74e0db7a5  Agda-2.8.0/src/setup/Agda/Version.hs
+formatted       5164a4006c26  Agda-2.8.0/src/setup/Agda/VersionCommit.hs
+formatted       90cd663d9426  HUnit-1.6.2.0/examples/Example.hs
+formatted       9b1cac4b6c09  HUnit-1.6.2.0/src/Test/HUnit.hs
+formatted       a931a3d6bf9f  HUnit-1.6.2.0/src/Test/HUnit/Base.hs
+formatted       ab91586830e9  HUnit-1.6.2.0/src/Test/HUnit/Lang.hs
+formatted       f9959d10adae  HUnit-1.6.2.0/src/Test/HUnit/Terminal.hs
+formatted       c1c1d4fdc273  HUnit-1.6.2.0/src/Test/HUnit/Text.hs
+formatted       358e8e211fe4  HUnit-1.6.2.0/tests/HUnitTestExtended.hs
+formatted       2277de61adab  HUnit-1.6.2.0/tests/HUnitTests.hs
+formatted       6f374a392385  HUnit-1.6.2.0/tests/TerminalTest.hs
+formatted       3c8a199a8a36  QuickCheck-2.18.0.0/examples/Heap.hs
+formatted       0bd3a87ca5b5  QuickCheck-2.18.0.0/examples/Heap_Program.hs
+formatted       85df59b82228  QuickCheck-2.18.0.0/examples/Heap_ProgramAlgebraic.hs
+formatted       cc37d9bcd159  QuickCheck-2.18.0.0/examples/Lambda.hs
+formatted       56c98d50971f  QuickCheck-2.18.0.0/examples/Merge.hs
+formatted       6506a17a91ff  QuickCheck-2.18.0.0/examples/Set.hs
+formatted       598740b3d57c  QuickCheck-2.18.0.0/examples/Simple.hs
+partly-checked  5234e8085ba9  QuickCheck-2.18.0.0/src/Test/QuickCheck.hs
+formatted       02ad02d885d3  QuickCheck-2.18.0.0/src/Test/QuickCheck/All.hs
+declined        -             QuickCheck-2.18.0.0/src/Test/QuickCheck/Arbitrary.hs
+formatted       b394fbd4debb  QuickCheck-2.18.0.0/src/Test/QuickCheck/Compat.hs
+partly-checked  06fafd04e06a  QuickCheck-2.18.0.0/src/Test/QuickCheck/Exception.hs
+formatted       24dc2fbcd085  QuickCheck-2.18.0.0/src/Test/QuickCheck/Features.hs
+declined        -             QuickCheck-2.18.0.0/src/Test/QuickCheck/Function.hs
+formatted       061130c71dd5  QuickCheck-2.18.0.0/src/Test/QuickCheck/Gen.hs
+formatted       0488daa21096  QuickCheck-2.18.0.0/src/Test/QuickCheck/Gen/Unsafe.hs
+declined        -             QuickCheck-2.18.0.0/src/Test/QuickCheck/Modifiers.hs
+declined        -             QuickCheck-2.18.0.0/src/Test/QuickCheck/Monadic.hs
+formatted       a94b9d13da2f  QuickCheck-2.18.0.0/src/Test/QuickCheck/Monoids.hs
+formatted       0c4f8c706edf  QuickCheck-2.18.0.0/src/Test/QuickCheck/Poly.hs
+declined        -             QuickCheck-2.18.0.0/src/Test/QuickCheck/Property.hs
+formatted       d248979763fb  QuickCheck-2.18.0.0/src/Test/QuickCheck/Random.hs
+formatted       67a6c49f2d76  QuickCheck-2.18.0.0/src/Test/QuickCheck/State.hs
+formatted       3bad70f5b189  QuickCheck-2.18.0.0/src/Test/QuickCheck/Test.hs
+formatted       fc335cb1eb17  QuickCheck-2.18.0.0/src/Test/QuickCheck/Text.hs
+formatted       9ca8d4e83360  QuickCheck-2.18.0.0/tests/CollectDataTypes.hs
+formatted       da3fb75adccf  QuickCheck-2.18.0.0/tests/DiscardRatio.hs
+formatted       5408e5e13bd3  QuickCheck-2.18.0.0/tests/GCoArbitraryExample.hs
+formatted       8dd012261272  QuickCheck-2.18.0.0/tests/GShrinkExample.hs
+formatted       4c75e82798d4  QuickCheck-2.18.0.0/tests/Generators.hs
+formatted       057887c409bc  QuickCheck-2.18.0.0/tests/Misc.hs
+formatted       414efdc48918  QuickCheck-2.18.0.0/tests/MonadFix.hs
+formatted       85ad2d1decbe  QuickCheck-2.18.0.0/tests/Monoids.hs
+formatted       eae30fa51b1b  QuickCheck-2.18.0.0/tests/RunCollectDataTypes.hs
+formatted       d798509570fa  QuickCheck-2.18.0.0/tests/Split.hs
+formatted       da1fe583377c  QuickCheck-2.18.0.0/tests/Strictness.hs
+formatted       5b211214c287  QuickCheck-2.18.0.0/tests/Terminal.hs
+formatted       398a0f17171d  QuickCheck-2.18.0.0/tests/WithProgress.hs
+formatted       5bd7a41e0fb6  ShellCheck-0.11.0/shellcheck.hs
+formatted       e96f582d0994  ShellCheck-0.11.0/src/ShellCheck/AST.hs
+formatted       c37d63683cf0  ShellCheck-0.11.0/src/ShellCheck/ASTLib.hs
+formatted       84d65963cef4  ShellCheck-0.11.0/src/ShellCheck/Analytics.hs
+formatted       a37e7d6ad771  ShellCheck-0.11.0/src/ShellCheck/Analyzer.hs
+formatted       dc01891211e6  ShellCheck-0.11.0/src/ShellCheck/AnalyzerLib.hs
+formatted       d2cb76d4885e  ShellCheck-0.11.0/src/ShellCheck/CFG.hs
+formatted       612615cdeb63  ShellCheck-0.11.0/src/ShellCheck/CFGAnalysis.hs
+formatted       64df5efa4dca  ShellCheck-0.11.0/src/ShellCheck/Checker.hs
+formatted       7ef4c3e0a33f  ShellCheck-0.11.0/src/ShellCheck/Checks/Commands.hs
+formatted       4499e00fdc51  ShellCheck-0.11.0/src/ShellCheck/Checks/ControlFlow.hs
+formatted       0cbfece4e54b  ShellCheck-0.11.0/src/ShellCheck/Checks/Custom.hs
+formatted       e1006f2d757d  ShellCheck-0.11.0/src/ShellCheck/Checks/ShellSupport.hs
+formatted       d39eda0efa56  ShellCheck-0.11.0/src/ShellCheck/Data.hs
+formatted       0b8c4331f2cb  ShellCheck-0.11.0/src/ShellCheck/Debug.hs
+formatted       801ef2ddf76d  ShellCheck-0.11.0/src/ShellCheck/Fixer.hs
+formatted       1c5c142bbc8c  ShellCheck-0.11.0/src/ShellCheck/Formatter/CheckStyle.hs
+formatted       13b3c15a19bc  ShellCheck-0.11.0/src/ShellCheck/Formatter/Diff.hs
+formatted       78112453fad7  ShellCheck-0.11.0/src/ShellCheck/Formatter/Format.hs
+formatted       d90b451f113e  ShellCheck-0.11.0/src/ShellCheck/Formatter/GCC.hs
+formatted       b5dba8eeaa1e  ShellCheck-0.11.0/src/ShellCheck/Formatter/JSON.hs
+formatted       fb9c03a6a335  ShellCheck-0.11.0/src/ShellCheck/Formatter/JSON1.hs
+formatted       a381122da904  ShellCheck-0.11.0/src/ShellCheck/Formatter/Quiet.hs
+formatted       ede5712d5ab7  ShellCheck-0.11.0/src/ShellCheck/Formatter/TTY.hs
+formatted       a601aea10041  ShellCheck-0.11.0/src/ShellCheck/Interface.hs
+formatted       1f9ece3950b4  ShellCheck-0.11.0/src/ShellCheck/Parser.hs
+formatted       41e45f4ec82e  ShellCheck-0.11.0/src/ShellCheck/Prelude.hs
+formatted       0b6a2ca650ea  ShellCheck-0.11.0/src/ShellCheck/Regex.hs
+formatted       d7f66e7f3a00  ShellCheck-0.11.0/test/shellcheck.hs
+formatted       f11704872a0d  adjunctions-4.4.4/HLint.hs
+formatted       b76eebd88dde  adjunctions-4.4.4/src/Control/Comonad/Representable/Store.hs
+formatted       de45dcce87b3  adjunctions-4.4.4/src/Control/Comonad/Trans/Adjoint.hs
+formatted       b2d151be53ba  adjunctions-4.4.4/src/Control/Monad/Representable/Reader.hs
+formatted       a638921f9e27  adjunctions-4.4.4/src/Control/Monad/Representable/State.hs
+formatted       090896034199  adjunctions-4.4.4/src/Control/Monad/Trans/Adjoint.hs
+formatted       e1817af58b0a  adjunctions-4.4.4/src/Control/Monad/Trans/Contravariant/Adjoint.hs
+formatted       e1065b4a8220  adjunctions-4.4.4/src/Control/Monad/Trans/Conts.hs
+formatted       a9be4a7e726b  adjunctions-4.4.4/src/Data/Functor/Adjunction.hs
+formatted       191e78a8f894  adjunctions-4.4.4/src/Data/Functor/Contravariant/Adjunction.hs
+formatted       573a1fcd59fd  adjunctions-4.4.4/src/Data/Functor/Contravariant/Rep.hs
+formatted       28caf428004b  adjunctions-4.4.4/src/Data/Functor/Rep.hs
+formatted       885922fbbfe0  adjunctions-4.4.4/tests/GenericsSpec.hs
+formatted       2fbd14b119a4  adjunctions-4.4.4/tests/Spec.hs
+formatted       7bbf4758e5ad  aeson-2.3.1.0/src/Data/Aeson.hs
+formatted       e884d6813fc6  aeson-2.3.1.0/src/Data/Aeson/Decoding.hs
+formatted       93bdee10e02a  aeson-2.3.1.0/src/Data/Aeson/Decoding/ByteString.hs
+formatted       635321399aa4  aeson-2.3.1.0/src/Data/Aeson/Decoding/ByteString/Lazy.hs
+formatted       1d3a54288c25  aeson-2.3.1.0/src/Data/Aeson/Decoding/Conversion.hs
+formatted       f1f142fef403  aeson-2.3.1.0/src/Data/Aeson/Decoding/Internal.hs
+formatted       e972ebea468c  aeson-2.3.1.0/src/Data/Aeson/Decoding/Text.hs
+formatted       709b71ada144  aeson-2.3.1.0/src/Data/Aeson/Decoding/Tokens.hs
+formatted       c6cf8dff7aea  aeson-2.3.1.0/src/Data/Aeson/Encoding.hs
+formatted       96d4e6121b81  aeson-2.3.1.0/src/Data/Aeson/Encoding/Builder.hs
+formatted       32e6990c1aad  aeson-2.3.1.0/src/Data/Aeson/Encoding/Internal.hs
+formatted       d7002010fdc9  aeson-2.3.1.0/src/Data/Aeson/Internal/ByteString.hs
+formatted       7ff60392d6c3  aeson-2.3.1.0/src/Data/Aeson/Internal/Functions.hs
+formatted       e048ffa25767  aeson-2.3.1.0/src/Data/Aeson/Internal/Prelude.hs
+formatted       57e28222c296  aeson-2.3.1.0/src/Data/Aeson/Internal/Scientific.hs
+formatted       6bb6b5229c29  aeson-2.3.1.0/src/Data/Aeson/Internal/TH.hs
+formatted       b61b87ef28b1  aeson-2.3.1.0/src/Data/Aeson/Internal/Text.hs
+formatted       e83337edc6e6  aeson-2.3.1.0/src/Data/Aeson/Internal/Unescape.hs
+formatted       20257ed727b2  aeson-2.3.1.0/src/Data/Aeson/Internal/UnescapeFromText.hs
+formatted       1052e9d7d311  aeson-2.3.1.0/src/Data/Aeson/Key.hs
+formatted       cae25a09a08c  aeson-2.3.1.0/src/Data/Aeson/KeyMap.hs
+formatted       a8f98f92bb33  aeson-2.3.1.0/src/Data/Aeson/Parser/Time.hs
+formatted       34673c7e3119  aeson-2.3.1.0/src/Data/Aeson/QQ/Simple.hs
+formatted       8c47510bfe90  aeson-2.3.1.0/src/Data/Aeson/RFC8785.hs
+formatted       f60561be7302  aeson-2.3.1.0/src/Data/Aeson/TH.hs
+formatted       12a0132d4a2c  aeson-2.3.1.0/src/Data/Aeson/Text.hs
+formatted       d929af4e0687  aeson-2.3.1.0/src/Data/Aeson/Types.hs
+formatted       e11d9a90b593  aeson-2.3.1.0/src/Data/Aeson/Types/Class.hs
+formatted       36f39e5a3dd4  aeson-2.3.1.0/src/Data/Aeson/Types/FromJSON.hs
+formatted       af543197c845  aeson-2.3.1.0/src/Data/Aeson/Types/Generic.hs
+formatted       9fc1ad97795b  aeson-2.3.1.0/src/Data/Aeson/Types/Internal.hs
+formatted       36a7e779b4fc  aeson-2.3.1.0/src/Data/Aeson/Types/ToJSON.hs
+formatted       4a92c519c2c4  aeson-2.3.1.0/tests/CastFloat.hs
+formatted       bad3a5065737  aeson-2.3.1.0/tests/DataFamilies/Encoders.hs
+formatted       0d864147e795  aeson-2.3.1.0/tests/DataFamilies/Instances.hs
+formatted       91fe7aa4d3dc  aeson-2.3.1.0/tests/DataFamilies/Properties.hs
+formatted       4d002c77704c  aeson-2.3.1.0/tests/DataFamilies/Types.hs
+formatted       18d45630b0f4  aeson-2.3.1.0/tests/DoubleToScientific.hs
+formatted       659a9357b588  aeson-2.3.1.0/tests/Encoders.hs
+formatted       30150da5a855  aeson-2.3.1.0/tests/ErrorMessages.hs
+formatted       72fb423455c1  aeson-2.3.1.0/tests/Functions.hs
+formatted       45b065b98a94  aeson-2.3.1.0/tests/Instances.hs
+formatted       38b7096d53c4  aeson-2.3.1.0/tests/JSONTestSuite.hs
+formatted       82f27586e194  aeson-2.3.1.0/tests/Options.hs
+formatted       269fd896fd74  aeson-2.3.1.0/tests/PropUtils.hs
+formatted       5c7e1bcf3dd6  aeson-2.3.1.0/tests/Properties.hs
+formatted       47a934388051  aeson-2.3.1.0/tests/PropertyGeneric.hs
+formatted       109d7fb52b5b  aeson-2.3.1.0/tests/PropertyKeys.hs
+formatted       0d9df9d04cba  aeson-2.3.1.0/tests/PropertyQC.hs
+formatted       a2e378d49eb8  aeson-2.3.1.0/tests/PropertyRTFunctors.hs
+formatted       d54279308532  aeson-2.3.1.0/tests/PropertyRoundTrip.hs
+formatted       1c47871a8c20  aeson-2.3.1.0/tests/PropertyTH.hs
+formatted       816e57772780  aeson-2.3.1.0/tests/RFC8785.hs
+formatted       378b97660503  aeson-2.3.1.0/tests/Regression/Issue1138.hs
+formatted       1cfcacdcaf11  aeson-2.3.1.0/tests/Regression/Issue351.hs
+formatted       f000e9c51f1a  aeson-2.3.1.0/tests/Regression/Issue571.hs
+formatted       650ac09bee0a  aeson-2.3.1.0/tests/Regression/Issue687.hs
+formatted       e5c541d1465a  aeson-2.3.1.0/tests/Regression/Issue967.hs
+formatted       f9a4bb5a21f0  aeson-2.3.1.0/tests/SerializationFormatSpec.hs
+formatted       8eaa36c16021  aeson-2.3.1.0/tests/Tests.hs
+formatted       c88e88732cfd  aeson-2.3.1.0/tests/Types.hs
+formatted       ac8b6651c5ec  aeson-2.3.1.0/tests/UnitTests.hs
+formatted       f18689008d86  aeson-2.3.1.0/tests/UnitTests/FromJSONKey.hs
+formatted       8fa12a214cda  aeson-2.3.1.0/tests/UnitTests/Hashable.hs
+formatted       2e6e13a2b307  aeson-2.3.1.0/tests/UnitTests/KeyMapInsertWith.hs
+formatted       fc462ed61e50  aeson-2.3.1.0/tests/UnitTests/MonadFix.hs
+formatted       657449faeb93  aeson-2.3.1.0/tests/UnitTests/NoThunks.hs
+formatted       31a111ec64d8  aeson-2.3.1.0/tests/UnitTests/NullaryConstructors.hs
+formatted       21ebc1b4f9c4  aeson-2.3.1.0/tests/UnitTests/OmitNothingFieldsNote.hs
+formatted       11d14533f820  aeson-2.3.1.0/tests/UnitTests/OptionalFields.hs
+formatted       699f022c0cb2  aeson-2.3.1.0/tests/UnitTests/OptionalFields/Common.hs
+formatted       d8f208687b90  aeson-2.3.1.0/tests/UnitTests/OptionalFields/Generics.hs
+formatted       0bea65848d96  aeson-2.3.1.0/tests/UnitTests/OptionalFields/Manual.hs
+formatted       4a6ecc95787f  aeson-2.3.1.0/tests/UnitTests/OptionalFields/TH.hs
+formatted       e93203961852  aeson-2.3.1.0/tests/UnitTests/UTCTime.hs
+formatted       e865ae48f11b  ansi-terminal-1.1.5/Setup.hs
+formatted       444d34793bf4  ansi-terminal-1.1.5/app/Example.hs
+formatted       64edb10877a8  ansi-terminal-1.1.5/src/System/Console/ANSI.hs
+formatted       0cc59e71668d  ansi-terminal-1.1.5/unix/System/Console/ANSI/Internal.hs
+formatted       2ee987b3a95a  ansi-terminal-1.1.5/win/System/Console/ANSI/Internal.hs
+broken          5c7d30c5b6fe  ansi-terminal-1.1.5/win/System/Console/ANSI/Windows/Foreign.hs
+formatted       70161e33d5f6  ansi-terminal-1.1.5/win/System/Console/ANSI/Windows/Win32/Types.hs
+formatted       9e25d9947df5  async-2.2.6/Control/Concurrent/Async.hs
+partly-checked  3a3b893cb914  async-2.2.6/Control/Concurrent/Async/Internal.hs
+formatted       68777666410b  async-2.2.6/Control/Concurrent/Async/Warden.hs
+formatted       a0f5a7bd29cb  async-2.2.6/Control/Concurrent/Stream.hs
+formatted       e865ae48f11b  async-2.2.6/Setup.hs
+formatted       7f1489b412a3  async-2.2.6/bench/concasync.hs
+formatted       947eb9e17a7c  async-2.2.6/bench/conccancel.hs
+formatted       6fd907018c80  async-2.2.6/bench/race.hs
+formatted       4db35c37a9a6  async-2.2.6/test/test-async.hs
+formatted       9f3238148609  attoparsec-0.14.4/Data/Attoparsec.hs
+formatted       7d88b33f4399  attoparsec-0.14.4/Data/Attoparsec/ByteString.hs
+formatted       4ba03080e749  attoparsec-0.14.4/Data/Attoparsec/ByteString/Char8.hs
+formatted       0e47afce0362  attoparsec-0.14.4/Data/Attoparsec/ByteString/Internal.hs
+formatted       fcc23ffbbc3d  attoparsec-0.14.4/Data/Attoparsec/ByteString/Lazy.hs
+formatted       220f76f3ce4e  attoparsec-0.14.4/Data/Attoparsec/Char8.hs
+formatted       90be588fbc3a  attoparsec-0.14.4/Data/Attoparsec/Combinator.hs
+formatted       4b9154d41c2a  attoparsec-0.14.4/Data/Attoparsec/Internal.hs
+formatted       dbeb97f732d5  attoparsec-0.14.4/Data/Attoparsec/Internal/Types.hs
+formatted       ea3b710a875e  attoparsec-0.14.4/Data/Attoparsec/Lazy.hs
+formatted       3d8057d5d688  attoparsec-0.14.4/Data/Attoparsec/Number.hs
+formatted       45050bdb0a87  attoparsec-0.14.4/Data/Attoparsec/Text.hs
+formatted       8419b057d5a4  attoparsec-0.14.4/Data/Attoparsec/Text/Internal.hs
+formatted       b1c4021729a8  attoparsec-0.14.4/Data/Attoparsec/Text/Lazy.hs
+formatted       63d322215a87  attoparsec-0.14.4/Data/Attoparsec/Types.hs
+formatted       8ab300fd67b0  attoparsec-0.14.4/Data/Attoparsec/Zepto.hs
+formatted       53b0400e60aa  attoparsec-0.14.4/benchmarks/Aeson.hs
+formatted       b151a3ed3e1a  attoparsec-0.14.4/benchmarks/Benchmarks.hs
+formatted       bd0309211105  attoparsec-0.14.4/benchmarks/Common.hs
+formatted       baa4df75c7d8  attoparsec-0.14.4/benchmarks/Genome.hs
+formatted       3f8483fc03da  attoparsec-0.14.4/benchmarks/HeadersByteString.hs
+formatted       bb42606c4a8a  attoparsec-0.14.4/benchmarks/HeadersByteString/Atto.hs
+formatted       5a57c6aaa740  attoparsec-0.14.4/benchmarks/HeadersText.hs
+formatted       8fa6e462f95f  attoparsec-0.14.4/benchmarks/Links.hs
+formatted       f582abe3e244  attoparsec-0.14.4/benchmarks/Numbers.hs
+formatted       696be472825c  attoparsec-0.14.4/benchmarks/Sets.hs
+formatted       0d64d700acb4  attoparsec-0.14.4/benchmarks/TextFastSet.hs
+formatted       2b16e18cd8c0  attoparsec-0.14.4/benchmarks/Warp.hs
+formatted       5aab92534568  attoparsec-0.14.4/benchmarks/warp-3.0.1.1/Network/Wai/Handler/Warp/ReadInt.hs
+formatted       1f7d3a417fb5  attoparsec-0.14.4/benchmarks/warp-3.0.1.1/Network/Wai/Handler/Warp/RequestHeader.hs
+formatted       0d3565bef090  attoparsec-0.14.4/examples/Atto_RFC2616.hs
+formatted       b6861e7aadf8  attoparsec-0.14.4/examples/Parsec_RFC2616.hs
+formatted       af7fdd1013cc  attoparsec-0.14.4/examples/RFC2616.hs
+formatted       ef93830525fb  attoparsec-0.14.4/internal/Data/Attoparsec/ByteString/Buffer.hs
+formatted       f351843a1420  attoparsec-0.14.4/internal/Data/Attoparsec/ByteString/FastSet.hs
+formatted       f21e47830b1f  attoparsec-0.14.4/internal/Data/Attoparsec/Internal/Compat.hs
+formatted       4498fcbfa61f  attoparsec-0.14.4/internal/Data/Attoparsec/Internal/Fhthagn.hs
+formatted       bc12b2ada3b5  attoparsec-0.14.4/internal/Data/Attoparsec/Text/Buffer.hs
+formatted       b2e14e3c02d3  attoparsec-0.14.4/internal/Data/Attoparsec/Text/FastSet.hs
+formatted       ccaeb87485db  attoparsec-0.14.4/tests/QC.hs
+formatted       c4481214d6c0  attoparsec-0.14.4/tests/QC/Buffer.hs
+formatted       ae7fa7b38a4b  attoparsec-0.14.4/tests/QC/ByteString.hs
+formatted       455e4866502a  attoparsec-0.14.4/tests/QC/Combinator.hs
+formatted       2bd326ae7162  attoparsec-0.14.4/tests/QC/Common.hs
+formatted       7558d60104bb  attoparsec-0.14.4/tests/QC/IPv6/Internal.hs
+formatted       0692feda416d  attoparsec-0.14.4/tests/QC/IPv6/Types.hs
+formatted       08452f3d9508  attoparsec-0.14.4/tests/QC/Rechunked.hs
+formatted       0bab40e54197  attoparsec-0.14.4/tests/QC/Simple.hs
+formatted       f610227583f7  attoparsec-0.14.4/tests/QC/Text.hs
+formatted       930b366b3b68  attoparsec-0.14.4/tests/QC/Text/FastSet.hs
+formatted       ed6a9f21b67c  attoparsec-0.14.4/tests/QC/Text/Regressions.hs
+formatted       7710b806795e  aws-0.25.3/Aws.hs
+formatted       a0ce75039c94  aws-0.25.3/Aws/Aws.hs
+formatted       905ef20b8b35  aws-0.25.3/Aws/Core.hs
+formatted       526f7494fea1  aws-0.25.3/Aws/DynamoDb.hs
+formatted       11c5a36e6111  aws-0.25.3/Aws/DynamoDb/Commands.hs
+formatted       233aad0bb1ed  aws-0.25.3/Aws/DynamoDb/Commands/BatchGetItem.hs
+formatted       d1bdb0d1df58  aws-0.25.3/Aws/DynamoDb/Commands/BatchWriteItem.hs
+formatted       80eee4eebfe0  aws-0.25.3/Aws/DynamoDb/Commands/DeleteItem.hs
+formatted       3feb28aee701  aws-0.25.3/Aws/DynamoDb/Commands/GetItem.hs
+formatted       7c5a72d0256b  aws-0.25.3/Aws/DynamoDb/Commands/PutItem.hs
+formatted       0e5d2def9d4d  aws-0.25.3/Aws/DynamoDb/Commands/Query.hs
+formatted       826249cb5bbc  aws-0.25.3/Aws/DynamoDb/Commands/Scan.hs
+formatted       9bea9ff7b1ae  aws-0.25.3/Aws/DynamoDb/Commands/Table.hs
+formatted       3081d5cd4a3b  aws-0.25.3/Aws/DynamoDb/Commands/UpdateItem.hs
+formatted       b92828b82a58  aws-0.25.3/Aws/DynamoDb/Core.hs
+formatted       7da30757579d  aws-0.25.3/Aws/Ec2/InstanceMetadata.hs
+formatted       64524ea72e53  aws-0.25.3/Aws/Iam.hs
+formatted       749eee8b56a6  aws-0.25.3/Aws/Iam/Commands.hs
+formatted       ad79f5d57197  aws-0.25.3/Aws/Iam/Commands/AddUserToGroup.hs
+formatted       915fd6e3db63  aws-0.25.3/Aws/Iam/Commands/CreateAccessKey.hs
+formatted       bde533108084  aws-0.25.3/Aws/Iam/Commands/CreateGroup.hs
+formatted       71878d688298  aws-0.25.3/Aws/Iam/Commands/CreateUser.hs
+formatted       9e5113cbceb2  aws-0.25.3/Aws/Iam/Commands/DeleteAccessKey.hs
+formatted       69f808dacd5c  aws-0.25.3/Aws/Iam/Commands/DeleteGroup.hs
+formatted       8e3043dbd167  aws-0.25.3/Aws/Iam/Commands/DeleteGroupPolicy.hs
+formatted       7214274b0a75  aws-0.25.3/Aws/Iam/Commands/DeleteUser.hs
+formatted       f49416222f95  aws-0.25.3/Aws/Iam/Commands/DeleteUserPolicy.hs
+formatted       1b4517924917  aws-0.25.3/Aws/Iam/Commands/GetGroupPolicy.hs
+formatted       512be8c8f03d  aws-0.25.3/Aws/Iam/Commands/GetUser.hs
+formatted       52a399c24ce2  aws-0.25.3/Aws/Iam/Commands/GetUserPolicy.hs
+formatted       76b52f1c10e6  aws-0.25.3/Aws/Iam/Commands/ListAccessKeys.hs
+formatted       f147cb58a827  aws-0.25.3/Aws/Iam/Commands/ListGroupPolicies.hs
+formatted       9055a8593cb5  aws-0.25.3/Aws/Iam/Commands/ListGroups.hs
+formatted       d4d566b0d162  aws-0.25.3/Aws/Iam/Commands/ListMfaDevices.hs
+formatted       c2765a268c08  aws-0.25.3/Aws/Iam/Commands/ListUserPolicies.hs
+formatted       81792beec6f5  aws-0.25.3/Aws/Iam/Commands/ListUsers.hs
+formatted       12e4d06eee79  aws-0.25.3/Aws/Iam/Commands/PutGroupPolicy.hs
+formatted       f35205957f88  aws-0.25.3/Aws/Iam/Commands/PutUserPolicy.hs
+formatted       73390f7341bb  aws-0.25.3/Aws/Iam/Commands/RemoveUserFromGroup.hs
+formatted       6471d441fd65  aws-0.25.3/Aws/Iam/Commands/UpdateAccessKey.hs
+formatted       1df52130a26f  aws-0.25.3/Aws/Iam/Commands/UpdateGroup.hs
+formatted       9d554d7c5663  aws-0.25.3/Aws/Iam/Commands/UpdateUser.hs
+formatted       7f6159798a1d  aws-0.25.3/Aws/Iam/Core.hs
+formatted       feab396b426b  aws-0.25.3/Aws/Iam/Internal.hs
+formatted       48b677d290e9  aws-0.25.3/Aws/Network.hs
+formatted       ce77812a32a4  aws-0.25.3/Aws/S3.hs
+formatted       468614525265  aws-0.25.3/Aws/S3/Commands.hs
+formatted       2646f70fe9fa  aws-0.25.3/Aws/S3/Commands/CopyObject.hs
+formatted       679fbc8ba590  aws-0.25.3/Aws/S3/Commands/DeleteBucket.hs
+formatted       dc00b880ff44  aws-0.25.3/Aws/S3/Commands/DeleteObject.hs
+formatted       15d5415d448a  aws-0.25.3/Aws/S3/Commands/DeleteObjectVersion.hs
+formatted       a7835a797996  aws-0.25.3/Aws/S3/Commands/DeleteObjects.hs
+formatted       9a5f4d5ab8cb  aws-0.25.3/Aws/S3/Commands/GetBucket.hs
+formatted       fd9ef9806007  aws-0.25.3/Aws/S3/Commands/GetBucketLocation.hs
+formatted       8892058ce5a8  aws-0.25.3/Aws/S3/Commands/GetBucketObjectVersions.hs
+formatted       77560acf62f4  aws-0.25.3/Aws/S3/Commands/GetBucketVersioning.hs
+formatted       89fc0e4e1542  aws-0.25.3/Aws/S3/Commands/GetObject.hs
+formatted       b2f36afa32e0  aws-0.25.3/Aws/S3/Commands/GetService.hs
+formatted       a771521a31ae  aws-0.25.3/Aws/S3/Commands/HeadObject.hs
+formatted       be81d8b96bcb  aws-0.25.3/Aws/S3/Commands/Multipart.hs
+formatted       311a84a6ddb3  aws-0.25.3/Aws/S3/Commands/PutBucket.hs
+formatted       2428bf962e66  aws-0.25.3/Aws/S3/Commands/PutBucketVersioning.hs
+formatted       ed3a2453d1ee  aws-0.25.3/Aws/S3/Commands/PutObject.hs
+formatted       bc50203fa9d6  aws-0.25.3/Aws/S3/Commands/RestoreObject.hs
+formatted       691e7d45ad83  aws-0.25.3/Aws/S3/Core.hs
+formatted       e59133632c71  aws-0.25.3/Aws/Ses.hs
+formatted       98906d812790  aws-0.25.3/Aws/Ses/Commands.hs
+formatted       d82f6af0c772  aws-0.25.3/Aws/Ses/Commands/DeleteIdentity.hs
+formatted       81e7c8056065  aws-0.25.3/Aws/Ses/Commands/GetIdentityDkimAttributes.hs
+formatted       ea5078ceaf94  aws-0.25.3/Aws/Ses/Commands/GetIdentityNotificationAttributes.hs
+formatted       d96fd6a7f13d  aws-0.25.3/Aws/Ses/Commands/GetIdentityVerificationAttributes.hs
+formatted       3b484cb8347e  aws-0.25.3/Aws/Ses/Commands/ListIdentities.hs
+formatted       147fb92b671d  aws-0.25.3/Aws/Ses/Commands/SendRawEmail.hs
+formatted       c04b0e5d6ba3  aws-0.25.3/Aws/Ses/Commands/SetIdentityDkimEnabled.hs
+formatted       a32e25c2dc37  aws-0.25.3/Aws/Ses/Commands/SetIdentityFeedbackForwardingEnabled.hs
+formatted       b262146aced4  aws-0.25.3/Aws/Ses/Commands/SetIdentityNotificationTopic.hs
+formatted       2ef608635aeb  aws-0.25.3/Aws/Ses/Commands/VerifyDomainDkim.hs
+formatted       ffb19c08b235  aws-0.25.3/Aws/Ses/Commands/VerifyDomainIdentity.hs
+formatted       de43062d4755  aws-0.25.3/Aws/Ses/Commands/VerifyEmailIdentity.hs
+formatted       93d2568d042f  aws-0.25.3/Aws/Ses/Core.hs
+formatted       4115c76b6f3d  aws-0.25.3/Aws/SimpleDb.hs
+formatted       0b6040677d6d  aws-0.25.3/Aws/SimpleDb/Commands.hs
+formatted       30e4762ca046  aws-0.25.3/Aws/SimpleDb/Commands/Attributes.hs
+formatted       66e68309ec36  aws-0.25.3/Aws/SimpleDb/Commands/Domain.hs
+formatted       d6accda5efc3  aws-0.25.3/Aws/SimpleDb/Commands/Select.hs
+formatted       75d5726cf334  aws-0.25.3/Aws/SimpleDb/Core.hs
+formatted       412e7ea774c8  aws-0.25.3/Aws/Sqs.hs
+formatted       346f822a2760  aws-0.25.3/Aws/Sqs/Commands.hs
+formatted       a5744e9dccb8  aws-0.25.3/Aws/Sqs/Commands/Message.hs
+formatted       cf945609c0a3  aws-0.25.3/Aws/Sqs/Commands/Permission.hs
+formatted       a63871aa35df  aws-0.25.3/Aws/Sqs/Commands/Queue.hs
+formatted       6fbdfbc403cf  aws-0.25.3/Aws/Sqs/Commands/QueueAttributes.hs
+formatted       ffc8850066c4  aws-0.25.3/Aws/Sqs/Core.hs
+formatted       edf61ab9d90d  aws-0.25.3/Examples/DynamoDb.hs
+formatted       aa1fdefebee6  aws-0.25.3/Examples/GetObject.hs
+formatted       6a4e3eea6653  aws-0.25.3/Examples/GetObjectGoogle.hs
+formatted       94c0a4242cce  aws-0.25.3/Examples/GetObjectV4.hs
+formatted       5762e0f1fddf  aws-0.25.3/Examples/MultipartTransfer.hs
+formatted       c09c03a39390  aws-0.25.3/Examples/MultipartUpload.hs
+formatted       f8163e1e4473  aws-0.25.3/Examples/NukeBucket.hs
+formatted       34698069cedb  aws-0.25.3/Examples/PutBucketNearLine.hs
+formatted       9ad36fcdaae7  aws-0.25.3/Examples/SimpleDb.hs
+formatted       c31e8b7adbf5  aws-0.25.3/Examples/Sqs.hs
+formatted       e865ae48f11b  aws-0.25.3/Setup.hs
+formatted       354bb309a68c  aws-0.25.3/tests/DynamoDb/Main.hs
+formatted       75daea597c6a  aws-0.25.3/tests/DynamoDb/Utils.hs
+formatted       5886bbdd46c9  aws-0.25.3/tests/S3/Main.hs
+formatted       44336eea1e26  aws-0.25.3/tests/Sqs/Main.hs
+formatted       001f1d1eb163  aws-0.25.3/tests/Utils.hs
+formatted       c4588035d2e2  base64-bytestring-1.2.1.0/Data/ByteString/Base64.hs
+formatted       2897fc80ce31  base64-bytestring-1.2.1.0/Data/ByteString/Base64/Internal.hs
+formatted       dae9abac8bd0  base64-bytestring-1.2.1.0/Data/ByteString/Base64/Lazy.hs
+formatted       f0e7d8a34f4b  base64-bytestring-1.2.1.0/Data/ByteString/Base64/URL.hs
+formatted       0d8bf6b77f56  base64-bytestring-1.2.1.0/Data/ByteString/Base64/URL/Lazy.hs
+formatted       e865ae48f11b  base64-bytestring-1.2.1.0/Setup.hs
+formatted       0328dc0c3c7c  base64-bytestring-1.2.1.0/benchmarks/BM.hs
+formatted       e856b328c01f  base64-bytestring-1.2.1.0/tests/Tests.hs
+formatted       d41a83550f57  base64-bytestring-1.2.1.0/utils/Transcode.hs
+formatted       a696585f6bb3  bifunctors-5.6.3/src/Data/Biapplicative.hs
+formatted       463448893cde  bifunctors-5.6.3/src/Data/Bifunctor/Biap.hs
+formatted       9705f6a45db6  bifunctors-5.6.3/src/Data/Bifunctor/Biff.hs
+formatted       738f47d063bd  bifunctors-5.6.3/src/Data/Bifunctor/Clown.hs
+formatted       6d43dacbcc13  bifunctors-5.6.3/src/Data/Bifunctor/Fix.hs
+formatted       a1ca106ac715  bifunctors-5.6.3/src/Data/Bifunctor/Flip.hs
+formatted       3ac44f1c96ed  bifunctors-5.6.3/src/Data/Bifunctor/Functor.hs
+formatted       33b8fe550adc  bifunctors-5.6.3/src/Data/Bifunctor/Join.hs
+formatted       bc37198ad9bd  bifunctors-5.6.3/src/Data/Bifunctor/Joker.hs
+formatted       d60de274f1df  bifunctors-5.6.3/src/Data/Bifunctor/Product.hs
+formatted       a4989781f0a5  bifunctors-5.6.3/src/Data/Bifunctor/Sum.hs
+formatted       288f57b835fa  bifunctors-5.6.3/src/Data/Bifunctor/TH.hs
+formatted       73cfe6b7a060  bifunctors-5.6.3/src/Data/Bifunctor/TH/Internal.hs
+formatted       4a12830ba36a  bifunctors-5.6.3/src/Data/Bifunctor/Tannen.hs
+formatted       34520394097f  bifunctors-5.6.3/src/Data/Bifunctor/Wrapped.hs
+formatted       04a6a496b2b6  bifunctors-5.6.3/tests/BifunctorSpec.hs
+formatted       2fbd14b119a4  bifunctors-5.6.3/tests/Spec.hs
+formatted       6fd640c12d5f  bifunctors-5.6.3/tests/T89Spec.hs
+formatted       e865ae48f11b  blaze-html-0.9.2.0/Setup.hs
+formatted       59b1e28dc18c  blaze-html-0.9.2.0/src/Text/Blaze/Html.hs
+formatted       1ceaed7998ed  blaze-html-0.9.2.0/src/Text/Blaze/Html/Renderer/Pretty.hs
+formatted       a5a8080ce8a3  blaze-html-0.9.2.0/src/Text/Blaze/Html/Renderer/String.hs
+formatted       850270b61be0  blaze-html-0.9.2.0/src/Text/Blaze/Html/Renderer/Text.hs
+formatted       4dbd824fb533  blaze-html-0.9.2.0/src/Text/Blaze/Html/Renderer/Utf8.hs
+formatted       193787aa6e82  blaze-html-0.9.2.0/src/Text/Blaze/Html4/FrameSet.hs
+formatted       311d6a242cd1  blaze-html-0.9.2.0/src/Text/Blaze/Html4/FrameSet/Attributes.hs
+formatted       980072ab3333  blaze-html-0.9.2.0/src/Text/Blaze/Html4/Strict.hs
+formatted       6d96fbabc526  blaze-html-0.9.2.0/src/Text/Blaze/Html4/Strict/Attributes.hs
+formatted       4c6ce53fa6c0  blaze-html-0.9.2.0/src/Text/Blaze/Html4/Transitional.hs
+formatted       d39d423c9274  blaze-html-0.9.2.0/src/Text/Blaze/Html4/Transitional/Attributes.hs
+formatted       6593178d8914  blaze-html-0.9.2.0/src/Text/Blaze/Html5.hs
+formatted       a51b4ec4c88c  blaze-html-0.9.2.0/src/Text/Blaze/Html5/Attributes.hs
+formatted       a3131475444c  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/FrameSet.hs
+formatted       b11110851d4d  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/FrameSet/Attributes.hs
+formatted       326a6b8007f4  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/Strict.hs
+formatted       614d1d8b8758  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/Strict/Attributes.hs
+formatted       f18debc4b04a  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/Transitional.hs
+formatted       b02420bd150d  blaze-html-0.9.2.0/src/Text/Blaze/XHtml1/Transitional/Attributes.hs
+formatted       19fcd3fe0b2a  blaze-html-0.9.2.0/src/Text/Blaze/XHtml5.hs
+formatted       e7349ea7b26e  blaze-html-0.9.2.0/src/Text/Blaze/XHtml5/Attributes.hs
+formatted       6a3eeb3e9d8b  blaze-html-0.9.2.0/src/Util/GenerateHtmlCombinators.hs
+formatted       c350d72adcf6  blaze-html-0.9.2.0/src/Util/Sanitize.hs
+formatted       3b0e5b5fbcb0  blaze-html-0.9.2.0/tests/TestSuite.hs
+formatted       e2943235e42d  blaze-html-0.9.2.0/tests/Text/Blaze/Html/Tests.hs
+formatted       9dae0554f33d  blaze-html-0.9.2.0/tests/Text/Blaze/Html/Tests/Util.hs
+formatted       c858d7e158e9  blaze-html-0.9.2.0/tests/Util/Tests.hs
+formatted       e865ae48f11b  blaze-markup-0.8.3.0/Setup.hs
+formatted       a414efd123bb  blaze-markup-0.8.3.0/src/Text/Blaze.hs
+formatted       88904daa5374  blaze-markup-0.8.3.0/src/Text/Blaze/Internal.hs
+formatted       4846f41adc9e  blaze-markup-0.8.3.0/src/Text/Blaze/Renderer/Pretty.hs
+formatted       2e54745ce84a  blaze-markup-0.8.3.0/src/Text/Blaze/Renderer/String.hs
+formatted       8bb5a6b40341  blaze-markup-0.8.3.0/src/Text/Blaze/Renderer/Text.hs
+formatted       c0f54cd6a8ef  blaze-markup-0.8.3.0/src/Text/Blaze/Renderer/Utf8.hs
+formatted       c7292f26d075  blaze-markup-0.8.3.0/tests/TestSuite.hs
+formatted       efa997a477e9  blaze-markup-0.8.3.0/tests/Text/Blaze/Tests.hs
+formatted       e6ac9555645c  blaze-markup-0.8.3.0/tests/Text/Blaze/Tests/Util.hs
+formatted       e865ae48f11b  brick-2.13/Setup.hs
+formatted       2eb9ed1b5eff  brick-2.13/programs/AnimationDemo.hs
+formatted       5d807c6bfef9  brick-2.13/programs/AttrDemo.hs
+formatted       efff9829e309  brick-2.13/programs/BorderDemo.hs
+formatted       aef958fe74cd  brick-2.13/programs/CacheDemo.hs
+formatted       095e55ce36f6  brick-2.13/programs/CroppingDemo.hs
+formatted       2bd41626b7f1  brick-2.13/programs/CustomEventDemo.hs
+formatted       74968af52af2  brick-2.13/programs/CustomKeybindingDemo.hs
+formatted       8438ad4ac269  brick-2.13/programs/DialogDemo.hs
+formatted       70a751a6fa70  brick-2.13/programs/DynamicBorderDemo.hs
+formatted       464ea19b0d91  brick-2.13/programs/EditDemo.hs
+formatted       4cce67dc7675  brick-2.13/programs/EditorLineNumbersDemo.hs
+formatted       cb441c25368f  brick-2.13/programs/FileBrowserDemo.hs
+formatted       f42c468e824d  brick-2.13/programs/FillDemo.hs
+formatted       c4c35fd7ec81  brick-2.13/programs/FormDemo.hs
+formatted       ccec85b0d210  brick-2.13/programs/HelloWorldDemo.hs
+formatted       df3c26970095  brick-2.13/programs/LayerDemo.hs
+formatted       f010e64931de  brick-2.13/programs/ListDemo.hs
+formatted       72b3c637e7a9  brick-2.13/programs/ListViDemo.hs
+formatted       79a27a0bcb66  brick-2.13/programs/MouseDemo.hs
+formatted       07bae652c697  brick-2.13/programs/PaddingDemo.hs
+formatted       004a2e91363a  brick-2.13/programs/ProgressBarDemo.hs
+formatted       663c2424c9c5  brick-2.13/programs/ReadmeDemo.hs
+formatted       ae2bca4be4b6  brick-2.13/programs/SuspendAndResumeDemo.hs
+formatted       da922e788566  brick-2.13/programs/TableDemo.hs
+formatted       4475181f29de  brick-2.13/programs/TabularListDemo.hs
+formatted       b7e39f0a8d19  brick-2.13/programs/TailDemo.hs
+formatted       3b76b7057152  brick-2.13/programs/TextWrapDemo.hs
+formatted       4539be6276d5  brick-2.13/programs/ThemeDemo.hs
+formatted       2c64cf0649ba  brick-2.13/programs/ViewportScrollDemo.hs
+formatted       c72281d04a63  brick-2.13/programs/ViewportScrollbarsDemo.hs
+formatted       e2bd645f4c8a  brick-2.13/programs/VisibilityDemo.hs
+formatted       0abc07286e47  brick-2.13/src/Brick.hs
+formatted       0b61e5fb53be  brick-2.13/src/Brick/Animation.hs
+formatted       deb1866c9333  brick-2.13/src/Brick/Animation/Clock.hs
+formatted       91b158ee4b8a  brick-2.13/src/Brick/AttrMap.hs
+formatted       13c109f25eb8  brick-2.13/src/Brick/BChan.hs
+formatted       571007a8c984  brick-2.13/src/Brick/BorderMap.hs
+formatted       7aa4818185b3  brick-2.13/src/Brick/Focus.hs
+formatted       625bef2068d0  brick-2.13/src/Brick/Forms.hs
+formatted       d6c2a2e1b0a0  brick-2.13/src/Brick/Keybindings.hs
+formatted       f2e06c7c9f62  brick-2.13/src/Brick/Keybindings/KeyConfig.hs
+formatted       0d7739277f36  brick-2.13/src/Brick/Keybindings/KeyDispatcher.hs
+formatted       10682f468a33  brick-2.13/src/Brick/Keybindings/KeyEvents.hs
+formatted       20d38a2fef1c  brick-2.13/src/Brick/Keybindings/Normalize.hs
+formatted       422ce68b006b  brick-2.13/src/Brick/Keybindings/Parse.hs
+formatted       500582ecf6a0  brick-2.13/src/Brick/Keybindings/Pretty.hs
+formatted       03d2579eec1e  brick-2.13/src/Brick/Main.hs
+formatted       74d114b85be0  brick-2.13/src/Brick/Themes.hs
+formatted       af2489bd5835  brick-2.13/src/Brick/Types.hs
+formatted       e45b8d9f62c9  brick-2.13/src/Brick/Types/Common.hs
+formatted       1053ffe4d321  brick-2.13/src/Brick/Types/EventM.hs
+formatted       680c7fc4c12b  brick-2.13/src/Brick/Types/Internal.hs
+formatted       81c674829568  brick-2.13/src/Brick/Types/TH.hs
+formatted       02b0e53f451c  brick-2.13/src/Brick/Util.hs
+formatted       cba7b18b8f68  brick-2.13/src/Brick/Widgets/Border.hs
+formatted       89894b08f498  brick-2.13/src/Brick/Widgets/Border/Style.hs
+formatted       e3b47970aba1  brick-2.13/src/Brick/Widgets/Center.hs
+formatted       d864d6f5529c  brick-2.13/src/Brick/Widgets/Core.hs
+formatted       2da08c79b932  brick-2.13/src/Brick/Widgets/Dialog.hs
+formatted       c71ef0bf6ec5  brick-2.13/src/Brick/Widgets/Edit.hs
+formatted       b718a3a76032  brick-2.13/src/Brick/Widgets/FileBrowser.hs
+formatted       d879be7d89bd  brick-2.13/src/Brick/Widgets/Internal.hs
+formatted       f35028306876  brick-2.13/src/Brick/Widgets/List.hs
+formatted       45273510047b  brick-2.13/src/Brick/Widgets/ProgressBar.hs
+formatted       891b88a55449  brick-2.13/src/Brick/Widgets/Table.hs
+formatted       4c3f2bfed619  brick-2.13/src/Data/IMap.hs
+formatted       15733bb95234  brick-2.13/tests/List.hs
+formatted       2e6ed8d0e976  brick-2.13/tests/Main.hs
+formatted       073f01c2462e  brick-2.13/tests/Render.hs
+formatted       e0fa5e2b222c  brittany-0.14.0.2/data/Test1.hs
+formatted       a7fed1125f29  brittany-0.14.0.2/data/Test10.hs
+formatted       dd2db552d155  brittany-0.14.0.2/data/Test100.hs
+formatted       3ebccae4d2bf  brittany-0.14.0.2/data/Test101.hs
+formatted       000b618097d0  brittany-0.14.0.2/data/Test102.hs
+formatted       26845ab84f6a  brittany-0.14.0.2/data/Test103.hs
+formatted       25cf4c76ed6b  brittany-0.14.0.2/data/Test104.hs
+formatted       bac120fe0092  brittany-0.14.0.2/data/Test105.hs
+formatted       e29d7ffca93f  brittany-0.14.0.2/data/Test106.hs
+formatted       0b6e06bf2c23  brittany-0.14.0.2/data/Test107.hs
+formatted       eda42fe4d65b  brittany-0.14.0.2/data/Test108.hs
+formatted       9ce1b7bc7832  brittany-0.14.0.2/data/Test109.hs
+formatted       c7d09069af77  brittany-0.14.0.2/data/Test11.hs
+formatted       61661f795457  brittany-0.14.0.2/data/Test110.hs
+formatted       37d78f5961ec  brittany-0.14.0.2/data/Test111.hs
+formatted       1e4bb8275bfb  brittany-0.14.0.2/data/Test112.hs
+formatted       8cda89e87702  brittany-0.14.0.2/data/Test113.hs
+formatted       751bfd56bc69  brittany-0.14.0.2/data/Test114.hs
+formatted       5078888fc5d2  brittany-0.14.0.2/data/Test115.hs
+formatted       3fdf3b074d25  brittany-0.14.0.2/data/Test116.hs
+formatted       15ad0c63e705  brittany-0.14.0.2/data/Test117.hs
+formatted       77f7ec9848cd  brittany-0.14.0.2/data/Test118.hs
+formatted       2a994aca8970  brittany-0.14.0.2/data/Test119.hs
+formatted       624becd3f674  brittany-0.14.0.2/data/Test12.hs
+formatted       5bbfe94a03d4  brittany-0.14.0.2/data/Test120.hs
+formatted       01ac88bcab1a  brittany-0.14.0.2/data/Test121.hs
+formatted       057f0ce3ffb0  brittany-0.14.0.2/data/Test122.hs
+formatted       661f6da49632  brittany-0.14.0.2/data/Test123.hs
+formatted       86c1caf3eee5  brittany-0.14.0.2/data/Test124.hs
+formatted       c6ffbf389d8d  brittany-0.14.0.2/data/Test125.hs
+formatted       1b2ef1cfadaa  brittany-0.14.0.2/data/Test126.hs
+formatted       058f31d7f6cc  brittany-0.14.0.2/data/Test127.hs
+formatted       bec0f8aa554d  brittany-0.14.0.2/data/Test128.hs
+formatted       f712d9c961eb  brittany-0.14.0.2/data/Test129.hs
+formatted       79735ec00a3d  brittany-0.14.0.2/data/Test13.hs
+formatted       f808d5477ba7  brittany-0.14.0.2/data/Test130.hs
+formatted       2372bf2e1670  brittany-0.14.0.2/data/Test131.hs
+formatted       c6526aabb3c3  brittany-0.14.0.2/data/Test132.hs
+formatted       5287afc100b5  brittany-0.14.0.2/data/Test133.hs
+formatted       cbf28cc3de46  brittany-0.14.0.2/data/Test134.hs
+formatted       e9f15a2df4fd  brittany-0.14.0.2/data/Test135.hs
+formatted       d40ccadec39d  brittany-0.14.0.2/data/Test136.hs
+formatted       e8b4564e3bfa  brittany-0.14.0.2/data/Test137.hs
+formatted       ddbd7b880898  brittany-0.14.0.2/data/Test138.hs
+formatted       4ce9b0b36ac2  brittany-0.14.0.2/data/Test139.hs
+formatted       bb31ea72e15c  brittany-0.14.0.2/data/Test14.hs
+formatted       f04daeaa79e9  brittany-0.14.0.2/data/Test140.hs
+formatted       3f2c0367c6f9  brittany-0.14.0.2/data/Test141.hs
+formatted       edb875329172  brittany-0.14.0.2/data/Test142.hs
+formatted       fa53ce7f455d  brittany-0.14.0.2/data/Test143.hs
+formatted       1c5e166b5b3c  brittany-0.14.0.2/data/Test144.hs
+formatted       412dc562e63e  brittany-0.14.0.2/data/Test145.hs
+formatted       6594ac0ac89d  brittany-0.14.0.2/data/Test146.hs
+formatted       0132945dc887  brittany-0.14.0.2/data/Test147.hs
+formatted       0277bb5ca795  brittany-0.14.0.2/data/Test148.hs
+formatted       cbbb9e8ddafa  brittany-0.14.0.2/data/Test149.hs
+formatted       9db344b52a25  brittany-0.14.0.2/data/Test15.hs
+formatted       d29a46b01b30  brittany-0.14.0.2/data/Test150.hs
+formatted       d4d803460298  brittany-0.14.0.2/data/Test151.hs
+formatted       a36d7b2912f5  brittany-0.14.0.2/data/Test152.hs
+formatted       ea0b611491be  brittany-0.14.0.2/data/Test153.hs
+formatted       6607ab7d8924  brittany-0.14.0.2/data/Test154.hs
+formatted       66cbd556135d  brittany-0.14.0.2/data/Test155.hs
+formatted       2913f4f1ea6b  brittany-0.14.0.2/data/Test156.hs
+formatted       57f3fe7514c4  brittany-0.14.0.2/data/Test157.hs
+formatted       7cff7b0ac651  brittany-0.14.0.2/data/Test158.hs
+formatted       d8fde995e15b  brittany-0.14.0.2/data/Test159.hs
+formatted       b65a3702395c  brittany-0.14.0.2/data/Test16.hs
+formatted       8f083a4a74fc  brittany-0.14.0.2/data/Test160.hs
+formatted       756b8d709d75  brittany-0.14.0.2/data/Test161.hs
+formatted       fb931ccfd1e4  brittany-0.14.0.2/data/Test162.hs
+formatted       30ebe5ac65f1  brittany-0.14.0.2/data/Test163.hs
+formatted       729a285d4963  brittany-0.14.0.2/data/Test164.hs
+formatted       1d7b340799de  brittany-0.14.0.2/data/Test165.hs
+formatted       660e2a8d17c4  brittany-0.14.0.2/data/Test166.hs
+formatted       9034e094d375  brittany-0.14.0.2/data/Test167.hs
+formatted       d8056c8b2928  brittany-0.14.0.2/data/Test168.hs
+formatted       cd8fce2bda23  brittany-0.14.0.2/data/Test169.hs
+formatted       bce8e4d3c9ba  brittany-0.14.0.2/data/Test17.hs
+formatted       b9c1ba677274  brittany-0.14.0.2/data/Test170.hs
+formatted       81fa7c381707  brittany-0.14.0.2/data/Test171.hs
+formatted       ac4339e3794f  brittany-0.14.0.2/data/Test172.hs
+formatted       c651a0d78d61  brittany-0.14.0.2/data/Test173.hs
+formatted       893e9047ccc9  brittany-0.14.0.2/data/Test174.hs
+formatted       44a807f3c420  brittany-0.14.0.2/data/Test175.hs
+formatted       feac3083c99d  brittany-0.14.0.2/data/Test176.hs
+formatted       2cc15cb26130  brittany-0.14.0.2/data/Test177.hs
+formatted       47771349ee44  brittany-0.14.0.2/data/Test178.hs
+formatted       fe3c3245408d  brittany-0.14.0.2/data/Test179.hs
+formatted       674dab4fdbcb  brittany-0.14.0.2/data/Test18.hs
+formatted       c68cfb31f575  brittany-0.14.0.2/data/Test180.hs
+formatted       e6325e11af38  brittany-0.14.0.2/data/Test181.hs
+formatted       42d9bc7fc2ce  brittany-0.14.0.2/data/Test182.hs
+formatted       a1e86d78ee32  brittany-0.14.0.2/data/Test183.hs
+formatted       88ddfc17a44e  brittany-0.14.0.2/data/Test184.hs
+formatted       f6c7f8ad0585  brittany-0.14.0.2/data/Test185.hs
+formatted       5016aa65eeae  brittany-0.14.0.2/data/Test186.hs
+formatted       1f6812c3d99f  brittany-0.14.0.2/data/Test187.hs
+formatted       a063a95ec0b5  brittany-0.14.0.2/data/Test188.hs
+formatted       67c40f7b42e6  brittany-0.14.0.2/data/Test189.hs
+formatted       1b68494e9013  brittany-0.14.0.2/data/Test19.hs
+formatted       96f1ef06a2f4  brittany-0.14.0.2/data/Test190.hs
+formatted       a063a95ec0b5  brittany-0.14.0.2/data/Test191.hs
+formatted       dc32174d8f9d  brittany-0.14.0.2/data/Test192.hs
+formatted       b35395abfd05  brittany-0.14.0.2/data/Test193.hs
+formatted       4d5ddfd8aaab  brittany-0.14.0.2/data/Test194.hs
+formatted       8bb98e83f59e  brittany-0.14.0.2/data/Test195.hs
+formatted       45232601b2c3  brittany-0.14.0.2/data/Test196.hs
+formatted       bdc233fea9ba  brittany-0.14.0.2/data/Test197.hs
+formatted       9ce65738e093  brittany-0.14.0.2/data/Test198.hs
+formatted       eec0cab9f980  brittany-0.14.0.2/data/Test199.hs
+formatted       31b2046f8a67  brittany-0.14.0.2/data/Test2.hs
+formatted       a7a0e1c03060  brittany-0.14.0.2/data/Test20.hs
+formatted       d2a7653b9ba4  brittany-0.14.0.2/data/Test200.hs
+formatted       585cd696f310  brittany-0.14.0.2/data/Test201.hs
+formatted       8bba3630cd88  brittany-0.14.0.2/data/Test202.hs
+formatted       3e4e79b5a82a  brittany-0.14.0.2/data/Test203.hs
+formatted       4ce40055a31c  brittany-0.14.0.2/data/Test204.hs
+formatted       be6b7a8883f5  brittany-0.14.0.2/data/Test205.hs
+formatted       8e7d7929e338  brittany-0.14.0.2/data/Test206.hs
+formatted       3e6a91618060  brittany-0.14.0.2/data/Test207.hs
+formatted       59f9efb3349d  brittany-0.14.0.2/data/Test208.hs
+formatted       79081f0fe37d  brittany-0.14.0.2/data/Test209.hs
+formatted       b383b15d82f0  brittany-0.14.0.2/data/Test21.hs
+formatted       4f8c82f9b51b  brittany-0.14.0.2/data/Test210.hs
+formatted       210d2b918c18  brittany-0.14.0.2/data/Test211.hs
+formatted       d8fb0486ae8c  brittany-0.14.0.2/data/Test212.hs
+formatted       e75e1dd08970  brittany-0.14.0.2/data/Test213.hs
+formatted       43a86c48e3e0  brittany-0.14.0.2/data/Test214.hs
+formatted       ccd8170ddd1c  brittany-0.14.0.2/data/Test215.hs
+formatted       d9d08f97d6ce  brittany-0.14.0.2/data/Test216.hs
+formatted       ee242f311cec  brittany-0.14.0.2/data/Test217.hs
+formatted       2c1a4f8388c7  brittany-0.14.0.2/data/Test218.hs
+formatted       77521cf0255b  brittany-0.14.0.2/data/Test219.hs
+formatted       df6920225c3e  brittany-0.14.0.2/data/Test22.hs
+formatted       6912b515f3d4  brittany-0.14.0.2/data/Test220.hs
+formatted       7e87f164cb90  brittany-0.14.0.2/data/Test221.hs
+formatted       d7e0783e5c83  brittany-0.14.0.2/data/Test222.hs
+formatted       ac59786a0059  brittany-0.14.0.2/data/Test223.hs
+formatted       f4b2c131b776  brittany-0.14.0.2/data/Test224.hs
+formatted       fc2a39383602  brittany-0.14.0.2/data/Test225.hs
+formatted       0a2523228f93  brittany-0.14.0.2/data/Test226.hs
+formatted       228fee2942c2  brittany-0.14.0.2/data/Test227.hs
+formatted       911d30954d07  brittany-0.14.0.2/data/Test228.hs
+formatted       2f660f4ac662  brittany-0.14.0.2/data/Test229.hs
+formatted       fbc349a18ac2  brittany-0.14.0.2/data/Test23.hs
+formatted       a7a3d4cdb042  brittany-0.14.0.2/data/Test230.hs
+formatted       8213e25c0010  brittany-0.14.0.2/data/Test231.hs
+formatted       cf2c7ac7b851  brittany-0.14.0.2/data/Test232.hs
+formatted       60e66feea926  brittany-0.14.0.2/data/Test233.hs
+formatted       b6113299b5da  brittany-0.14.0.2/data/Test234.hs
+formatted       661c1fe894fb  brittany-0.14.0.2/data/Test235.hs
+formatted       57f09569ac82  brittany-0.14.0.2/data/Test236.hs
+formatted       0dfd55915ad3  brittany-0.14.0.2/data/Test237.hs
+formatted       4bc18bfc8664  brittany-0.14.0.2/data/Test238.hs
+formatted       f1066c5f9396  brittany-0.14.0.2/data/Test239.hs
+formatted       d0c0b62e11ea  brittany-0.14.0.2/data/Test24.hs
+formatted       a51ff778ca0c  brittany-0.14.0.2/data/Test240.hs
+formatted       6f66ff6e7884  brittany-0.14.0.2/data/Test241.hs
+formatted       7526d4749124  brittany-0.14.0.2/data/Test242.hs
+formatted       d600bfded86f  brittany-0.14.0.2/data/Test243.hs
+formatted       19618fd51fab  brittany-0.14.0.2/data/Test244.hs
+formatted       03cd50abedcb  brittany-0.14.0.2/data/Test245.hs
+formatted       676a58886eb0  brittany-0.14.0.2/data/Test246.hs
+formatted       86d72bb559bc  brittany-0.14.0.2/data/Test247.hs
+formatted       15d8e562989b  brittany-0.14.0.2/data/Test248.hs
+formatted       95a821921e97  brittany-0.14.0.2/data/Test249.hs
+formatted       372e384be5d9  brittany-0.14.0.2/data/Test25.hs
+formatted       c8b79c319e1b  brittany-0.14.0.2/data/Test250.hs
+formatted       9e983a1c88d0  brittany-0.14.0.2/data/Test251.hs
+formatted       e25fa77a311d  brittany-0.14.0.2/data/Test252.hs
+formatted       2abc462210d7  brittany-0.14.0.2/data/Test253.hs
+formatted       3dab93bb6c11  brittany-0.14.0.2/data/Test254.hs
+formatted       ded4f913ac25  brittany-0.14.0.2/data/Test255.hs
+formatted       7072c13a95c7  brittany-0.14.0.2/data/Test256.hs
+formatted       f79f249e0890  brittany-0.14.0.2/data/Test257.hs
+formatted       a9cbb8a905a0  brittany-0.14.0.2/data/Test258.hs
+formatted       7c0c18756066  brittany-0.14.0.2/data/Test259.hs
+formatted       a9993e322f84  brittany-0.14.0.2/data/Test26.hs
+formatted       bd4ad74e5ad1  brittany-0.14.0.2/data/Test260.hs
+formatted       40147eb0ec0f  brittany-0.14.0.2/data/Test261.hs
+formatted       3821b5d35161  brittany-0.14.0.2/data/Test262.hs
+formatted       fd9a1453387e  brittany-0.14.0.2/data/Test263.hs
+formatted       b7281c5fb795  brittany-0.14.0.2/data/Test264.hs
+formatted       d815db72d171  brittany-0.14.0.2/data/Test265.hs
+formatted       e1e74708d396  brittany-0.14.0.2/data/Test266.hs
+formatted       7a35a02bb934  brittany-0.14.0.2/data/Test267.hs
+formatted       0ca543b36b5d  brittany-0.14.0.2/data/Test268.hs
+formatted       93850bc1adc9  brittany-0.14.0.2/data/Test269.hs
+formatted       b82004f9b520  brittany-0.14.0.2/data/Test27.hs
+formatted       0465690dd788  brittany-0.14.0.2/data/Test270.hs
+formatted       8da0ed8508b1  brittany-0.14.0.2/data/Test271.hs
+formatted       059cb60e3ffb  brittany-0.14.0.2/data/Test272.hs
+formatted       ce7c5a9f7346  brittany-0.14.0.2/data/Test273.hs
+formatted       cf3d3b9f17a4  brittany-0.14.0.2/data/Test274.hs
+formatted       5687e1c0c469  brittany-0.14.0.2/data/Test275.hs
+formatted       f54d68eb932d  brittany-0.14.0.2/data/Test276.hs
+formatted       5280a70aa08d  brittany-0.14.0.2/data/Test277.hs
+formatted       42b39ee183e6  brittany-0.14.0.2/data/Test278.hs
+formatted       9a6ca39add52  brittany-0.14.0.2/data/Test279.hs
+formatted       35c64cf444f0  brittany-0.14.0.2/data/Test28.hs
+formatted       2c62cf845c15  brittany-0.14.0.2/data/Test280.hs
+formatted       6582acde6803  brittany-0.14.0.2/data/Test281.hs
+formatted       d69c5a291173  brittany-0.14.0.2/data/Test282.hs
+formatted       dad1fa89cc7b  brittany-0.14.0.2/data/Test283.hs
+formatted       61ba8c0a1014  brittany-0.14.0.2/data/Test284.hs
+formatted       dc5e12a45407  brittany-0.14.0.2/data/Test285.hs
+formatted       dc5e12a45407  brittany-0.14.0.2/data/Test286.hs
+formatted       e73001f7bfd5  brittany-0.14.0.2/data/Test287.hs
+formatted       3fdaf4d18a7c  brittany-0.14.0.2/data/Test288.hs
+formatted       8472b4d5d119  brittany-0.14.0.2/data/Test289.hs
+formatted       4b4297a0f4c5  brittany-0.14.0.2/data/Test29.hs
+formatted       af881940fba6  brittany-0.14.0.2/data/Test290.hs
+formatted       6b8b53cb8029  brittany-0.14.0.2/data/Test291.hs
+formatted       afd400f5f5ca  brittany-0.14.0.2/data/Test292.hs
+formatted       dbd53f969525  brittany-0.14.0.2/data/Test293.hs
+formatted       8e4e40c43066  brittany-0.14.0.2/data/Test294.hs
+formatted       5378d8225be8  brittany-0.14.0.2/data/Test295.hs
+formatted       efa089fba7ce  brittany-0.14.0.2/data/Test296.hs
+formatted       f2528253489c  brittany-0.14.0.2/data/Test297.hs
+formatted       a71313de7a74  brittany-0.14.0.2/data/Test298.hs
+formatted       9c7a3513d329  brittany-0.14.0.2/data/Test299.hs
+formatted       e430aa9e3dac  brittany-0.14.0.2/data/Test3.hs
+formatted       b786e0a045c4  brittany-0.14.0.2/data/Test30.hs
+formatted       82411c11ab17  brittany-0.14.0.2/data/Test300.hs
+formatted       6578a96b238b  brittany-0.14.0.2/data/Test301.hs
+formatted       8cee95f91f47  brittany-0.14.0.2/data/Test302.hs
+formatted       01d16f13bc99  brittany-0.14.0.2/data/Test303.hs
+formatted       2f37bef49ce1  brittany-0.14.0.2/data/Test304.hs
+formatted       9d3e8b7bf639  brittany-0.14.0.2/data/Test305.hs
+formatted       20c63b9ecba6  brittany-0.14.0.2/data/Test306.hs
+formatted       348106878578  brittany-0.14.0.2/data/Test307.hs
+formatted       017f020a856d  brittany-0.14.0.2/data/Test308.hs
+formatted       980708cbb4c4  brittany-0.14.0.2/data/Test309.hs
+formatted       b7f73c7d2a34  brittany-0.14.0.2/data/Test31.hs
+formatted       3c2cc10d169b  brittany-0.14.0.2/data/Test310.hs
+formatted       66fcc75686ea  brittany-0.14.0.2/data/Test311.hs
+formatted       611a32da9261  brittany-0.14.0.2/data/Test312.hs
+formatted       e63f0b07266f  brittany-0.14.0.2/data/Test313.hs
+formatted       1801f39045ac  brittany-0.14.0.2/data/Test314.hs
+formatted       3e5aa0cbbf8d  brittany-0.14.0.2/data/Test315.hs
+formatted       77220193f4fd  brittany-0.14.0.2/data/Test316.hs
+formatted       681c70c26bdd  brittany-0.14.0.2/data/Test317.hs
+formatted       c9b19f55338f  brittany-0.14.0.2/data/Test318.hs
+formatted       fa83330d01a6  brittany-0.14.0.2/data/Test319.hs
+formatted       310b7bac3014  brittany-0.14.0.2/data/Test32.hs
+formatted       d911bbdfeb7f  brittany-0.14.0.2/data/Test320.hs
+formatted       1275e28eeb82  brittany-0.14.0.2/data/Test321.hs
+formatted       d51414b5c108  brittany-0.14.0.2/data/Test322.hs
+formatted       e318ac8aa564  brittany-0.14.0.2/data/Test323.hs
+formatted       f018e148e8d5  brittany-0.14.0.2/data/Test324.hs
+formatted       1d0af944da7b  brittany-0.14.0.2/data/Test325.hs
+formatted       5798a680c21f  brittany-0.14.0.2/data/Test326.hs
+formatted       023057e5ea2c  brittany-0.14.0.2/data/Test327.hs
+formatted       2341d88441d5  brittany-0.14.0.2/data/Test328.hs
+formatted       947d63282515  brittany-0.14.0.2/data/Test329.hs
+formatted       786cf111bdad  brittany-0.14.0.2/data/Test33.hs
+formatted       9dd64349f3ea  brittany-0.14.0.2/data/Test330.hs
+formatted       15292e5353c7  brittany-0.14.0.2/data/Test331.hs
+formatted       909ea0b219f8  brittany-0.14.0.2/data/Test332.hs
+formatted       2ad0ebe6ebb0  brittany-0.14.0.2/data/Test333.hs
+formatted       9b7204f946d7  brittany-0.14.0.2/data/Test334.hs
+formatted       10c6d64e6811  brittany-0.14.0.2/data/Test335.hs
+formatted       b2addef5d712  brittany-0.14.0.2/data/Test336.hs
+formatted       571c3cac2376  brittany-0.14.0.2/data/Test337.hs
+formatted       7ab714dc2fd3  brittany-0.14.0.2/data/Test338.hs
+formatted       0b6993151fe2  brittany-0.14.0.2/data/Test339.hs
+formatted       7056ebf6bcea  brittany-0.14.0.2/data/Test34.hs
+formatted       aed8c9d9f03b  brittany-0.14.0.2/data/Test340.hs
+formatted       c93ad9724528  brittany-0.14.0.2/data/Test341.hs
+formatted       1a162378043c  brittany-0.14.0.2/data/Test342.hs
+formatted       237c79a35514  brittany-0.14.0.2/data/Test343.hs
+formatted       5af677fa0a9b  brittany-0.14.0.2/data/Test344.hs
+formatted       abe1b659b346  brittany-0.14.0.2/data/Test345.hs
+formatted       3c1f80fba7f5  brittany-0.14.0.2/data/Test346.hs
+formatted       7f12720f2600  brittany-0.14.0.2/data/Test347.hs
+formatted       264cc0e7cf96  brittany-0.14.0.2/data/Test348.hs
+formatted       03a3efa0a75e  brittany-0.14.0.2/data/Test349.hs
+formatted       b7f73c7d2a34  brittany-0.14.0.2/data/Test35.hs
+formatted       726069a13358  brittany-0.14.0.2/data/Test350.hs
+formatted       a50f8646bfb1  brittany-0.14.0.2/data/Test351.hs
+formatted       849dab5ec39d  brittany-0.14.0.2/data/Test352.hs
+formatted       baedf91b8ccd  brittany-0.14.0.2/data/Test353.hs
+formatted       fcae903dc453  brittany-0.14.0.2/data/Test354.hs
+formatted       2637fe2659d5  brittany-0.14.0.2/data/Test355.hs
+formatted       65798192c40d  brittany-0.14.0.2/data/Test356.hs
+formatted       2cdb94cbf551  brittany-0.14.0.2/data/Test357.hs
+formatted       501e5f69073e  brittany-0.14.0.2/data/Test358.hs
+formatted       86bec0344083  brittany-0.14.0.2/data/Test359.hs
+formatted       987603d032ac  brittany-0.14.0.2/data/Test36.hs
+formatted       15308dc2dd01  brittany-0.14.0.2/data/Test360.hs
+formatted       0b2ad491920b  brittany-0.14.0.2/data/Test361.hs
+formatted       d9da88c7cdef  brittany-0.14.0.2/data/Test362.hs
+formatted       d9831cd6816b  brittany-0.14.0.2/data/Test363.hs
+formatted       1ae4a98bcc4a  brittany-0.14.0.2/data/Test364.hs
+formatted       ce4109a16e55  brittany-0.14.0.2/data/Test365.hs
+formatted       d16eae4aad20  brittany-0.14.0.2/data/Test366.hs
+formatted       b07954dfc9bf  brittany-0.14.0.2/data/Test367.hs
+formatted       45eeef287ee4  brittany-0.14.0.2/data/Test368.hs
+formatted       e61e587a6843  brittany-0.14.0.2/data/Test369.hs
+formatted       f500b3d5f559  brittany-0.14.0.2/data/Test37.hs
+formatted       08718fefbaf6  brittany-0.14.0.2/data/Test370.hs
+formatted       2fc71603e098  brittany-0.14.0.2/data/Test371.hs
+formatted       34177b9d84e3  brittany-0.14.0.2/data/Test372.hs
+formatted       5fa71c232724  brittany-0.14.0.2/data/Test373.hs
+formatted       f5fca966196b  brittany-0.14.0.2/data/Test374.hs
+formatted       a4d64bf7587b  brittany-0.14.0.2/data/Test375.hs
+formatted       14e2ed1f0f63  brittany-0.14.0.2/data/Test376.hs
+formatted       f5a4e0c1e34f  brittany-0.14.0.2/data/Test377.hs
+formatted       bddefc49765b  brittany-0.14.0.2/data/Test378.hs
+formatted       ea19c516bcbf  brittany-0.14.0.2/data/Test379.hs
+formatted       7335e7ca5bd3  brittany-0.14.0.2/data/Test38.hs
+formatted       d2ee555751f5  brittany-0.14.0.2/data/Test380.hs
+formatted       3823e3c2d919  brittany-0.14.0.2/data/Test381.hs
+formatted       80271da1e835  brittany-0.14.0.2/data/Test382.hs
+formatted       ed5f4e8c4709  brittany-0.14.0.2/data/Test383.hs
+formatted       d4963535df46  brittany-0.14.0.2/data/Test384.hs
+formatted       6ced47de66db  brittany-0.14.0.2/data/Test385.hs
+formatted       1570d72029b7  brittany-0.14.0.2/data/Test386.hs
+formatted       1416aa178cdb  brittany-0.14.0.2/data/Test387.hs
+formatted       edfafa8fb3e5  brittany-0.14.0.2/data/Test388.hs
+formatted       4e122b4b2697  brittany-0.14.0.2/data/Test389.hs
+formatted       6c58063d3fab  brittany-0.14.0.2/data/Test39.hs
+formatted       fac1b1c7f0c1  brittany-0.14.0.2/data/Test390.hs
+formatted       edfafa8fb3e5  brittany-0.14.0.2/data/Test391.hs
+formatted       b0d3ee7240ad  brittany-0.14.0.2/data/Test392.hs
+formatted       3742d5df31d3  brittany-0.14.0.2/data/Test393.hs
+formatted       28dd7a32aa13  brittany-0.14.0.2/data/Test394.hs
+formatted       91de5c22d799  brittany-0.14.0.2/data/Test395.hs
+formatted       15521d568177  brittany-0.14.0.2/data/Test396.hs
+formatted       bc632756e066  brittany-0.14.0.2/data/Test397.hs
+formatted       fc2de0dfca48  brittany-0.14.0.2/data/Test398.hs
+formatted       8294327ebf8b  brittany-0.14.0.2/data/Test399.hs
+formatted       c3cdd2cbcecc  brittany-0.14.0.2/data/Test4.hs
+formatted       c8a00284c5f4  brittany-0.14.0.2/data/Test40.hs
+formatted       e55074dcd689  brittany-0.14.0.2/data/Test400.hs
+formatted       4da9e5870180  brittany-0.14.0.2/data/Test401.hs
+formatted       74396290a673  brittany-0.14.0.2/data/Test402.hs
+formatted       d2fafd899e89  brittany-0.14.0.2/data/Test403.hs
+formatted       dede30d772d6  brittany-0.14.0.2/data/Test404.hs
+formatted       899e8af490d3  brittany-0.14.0.2/data/Test405.hs
+formatted       6a318c357310  brittany-0.14.0.2/data/Test406.hs
+formatted       183f062112e1  brittany-0.14.0.2/data/Test407.hs
+formatted       55c58dc8cf59  brittany-0.14.0.2/data/Test408.hs
+formatted       a04dc9525882  brittany-0.14.0.2/data/Test409.hs
+formatted       cdc2db1c8449  brittany-0.14.0.2/data/Test41.hs
+formatted       a59bda637fa1  brittany-0.14.0.2/data/Test410.hs
+formatted       c65e5f1f3ba5  brittany-0.14.0.2/data/Test411.hs
+formatted       462efbd02872  brittany-0.14.0.2/data/Test412.hs
+formatted       4fc4ab30dcc3  brittany-0.14.0.2/data/Test413.hs
+formatted       d9eab58246aa  brittany-0.14.0.2/data/Test414.hs
+formatted       3d11263d426e  brittany-0.14.0.2/data/Test415.hs
+formatted       dbbe7b5f2b24  brittany-0.14.0.2/data/Test416.hs
+formatted       099959230be5  brittany-0.14.0.2/data/Test417.hs
+formatted       056c3c85e1ce  brittany-0.14.0.2/data/Test418.hs
+formatted       bd3660de0717  brittany-0.14.0.2/data/Test419.hs
+formatted       e3f087db5440  brittany-0.14.0.2/data/Test42.hs
+formatted       821fd8910ac5  brittany-0.14.0.2/data/Test420.hs
+formatted       d9b47c23fec6  brittany-0.14.0.2/data/Test421.hs
+formatted       15fe8b3f5a9e  brittany-0.14.0.2/data/Test422.hs
+formatted       cafda87f90a6  brittany-0.14.0.2/data/Test423.hs
+formatted       7fa298da41f9  brittany-0.14.0.2/data/Test424.hs
+formatted       acddf7b49624  brittany-0.14.0.2/data/Test425.hs
+formatted       84cfb756f2f4  brittany-0.14.0.2/data/Test426.hs
+formatted       33c641a7a072  brittany-0.14.0.2/data/Test427.hs
+formatted       19772ef1090c  brittany-0.14.0.2/data/Test428.hs
+formatted       07a30e1c142f  brittany-0.14.0.2/data/Test429.hs
+formatted       6aa1c5a0086b  brittany-0.14.0.2/data/Test43.hs
+formatted       f5d76f5634f5  brittany-0.14.0.2/data/Test430.hs
+formatted       9aae587a1706  brittany-0.14.0.2/data/Test431.hs
+formatted       cab5eb48ea87  brittany-0.14.0.2/data/Test432.hs
+formatted       035c19e15e23  brittany-0.14.0.2/data/Test433.hs
+formatted       54c8c833912d  brittany-0.14.0.2/data/Test434.hs
+formatted       4b85517ecc64  brittany-0.14.0.2/data/Test435.hs
+formatted       ab4c449d67c6  brittany-0.14.0.2/data/Test436.hs
+formatted       9e0a9c4de4a7  brittany-0.14.0.2/data/Test437.hs
+formatted       22f3bbfaab9e  brittany-0.14.0.2/data/Test438.hs
+formatted       27ee3c3a9f1d  brittany-0.14.0.2/data/Test439.hs
+formatted       2369814e00a3  brittany-0.14.0.2/data/Test44.hs
+formatted       f114f80afa88  brittany-0.14.0.2/data/Test440.hs
+formatted       91959f72bf42  brittany-0.14.0.2/data/Test441.hs
+formatted       e100c133e0a6  brittany-0.14.0.2/data/Test442.hs
+formatted       a447fa310286  brittany-0.14.0.2/data/Test443.hs
+formatted       afb74691ba25  brittany-0.14.0.2/data/Test444.hs
+formatted       b04dcb13770d  brittany-0.14.0.2/data/Test445.hs
+formatted       005984004c81  brittany-0.14.0.2/data/Test446.hs
+formatted       519cfd48a90e  brittany-0.14.0.2/data/Test447.hs
+formatted       245fb4545054  brittany-0.14.0.2/data/Test448.hs
+formatted       036f126597a1  brittany-0.14.0.2/data/Test449.hs
+formatted       914e8892ce9f  brittany-0.14.0.2/data/Test45.hs
+formatted       dfae62440755  brittany-0.14.0.2/data/Test450.hs
+formatted       3d8e022d4ea8  brittany-0.14.0.2/data/Test451.hs
+formatted       204a8f956d01  brittany-0.14.0.2/data/Test452.hs
+formatted       3ae152eef9f8  brittany-0.14.0.2/data/Test453.hs
+formatted       dd5c2ba000d9  brittany-0.14.0.2/data/Test454.hs
+formatted       255bf40fcf81  brittany-0.14.0.2/data/Test455.hs
+formatted       186aedf45b55  brittany-0.14.0.2/data/Test456.hs
+formatted       00342a85f4ce  brittany-0.14.0.2/data/Test457.hs
+formatted       4d9ccb4d6155  brittany-0.14.0.2/data/Test458.hs
+formatted       33f453ac627f  brittany-0.14.0.2/data/Test459.hs
+formatted       65a9efd49258  brittany-0.14.0.2/data/Test46.hs
+formatted       dbfa4f771264  brittany-0.14.0.2/data/Test460.hs
+formatted       75bf53838e5c  brittany-0.14.0.2/data/Test461.hs
+formatted       5fde28db6063  brittany-0.14.0.2/data/Test462.hs
+formatted       ff5bcd3737f2  brittany-0.14.0.2/data/Test463.hs
+formatted       e30c0ff394dd  brittany-0.14.0.2/data/Test464.hs
+formatted       82f7c7fb716e  brittany-0.14.0.2/data/Test465.hs
+formatted       f59579bd97ca  brittany-0.14.0.2/data/Test466.hs
+formatted       5909971846f9  brittany-0.14.0.2/data/Test467.hs
+formatted       fe8bf0d3f053  brittany-0.14.0.2/data/Test468.hs
+formatted       79dd70b7320f  brittany-0.14.0.2/data/Test469.hs
+formatted       1983a10a25f3  brittany-0.14.0.2/data/Test47.hs
+formatted       271132ce279b  brittany-0.14.0.2/data/Test470.hs
+formatted       14a056182567  brittany-0.14.0.2/data/Test471.hs
+formatted       cbe652ef0cbb  brittany-0.14.0.2/data/Test472.hs
+formatted       3bf39beb5bf7  brittany-0.14.0.2/data/Test473.hs
+formatted       ac6e5e3c9b28  brittany-0.14.0.2/data/Test474.hs
+formatted       7752938de9c6  brittany-0.14.0.2/data/Test475.hs
+formatted       756e0e0edd8b  brittany-0.14.0.2/data/Test476.hs
+formatted       a87acb3bdeb3  brittany-0.14.0.2/data/Test477.hs
+formatted       d489d082ed14  brittany-0.14.0.2/data/Test478.hs
+formatted       dca2bbac2e81  brittany-0.14.0.2/data/Test479.hs
+formatted       00909af2b184  brittany-0.14.0.2/data/Test48.hs
+formatted       0150b83ded52  brittany-0.14.0.2/data/Test480.hs
+formatted       9fd1038ae87c  brittany-0.14.0.2/data/Test481.hs
+formatted       99e73c09fd8f  brittany-0.14.0.2/data/Test482.hs
+formatted       b6e0c157ec82  brittany-0.14.0.2/data/Test483.hs
+formatted       5308cabef2dd  brittany-0.14.0.2/data/Test484.hs
+formatted       3b0850dd8d8d  brittany-0.14.0.2/data/Test485.hs
+formatted       3a14007e64e3  brittany-0.14.0.2/data/Test486.hs
+formatted       e28b3f6dc92a  brittany-0.14.0.2/data/Test487.hs
+formatted       d7ac2e728ca4  brittany-0.14.0.2/data/Test488.hs
+formatted       3455b362a4d8  brittany-0.14.0.2/data/Test489.hs
+formatted       379cdfc91569  brittany-0.14.0.2/data/Test49.hs
+formatted       d2c2b5b45546  brittany-0.14.0.2/data/Test490.hs
+formatted       964f39f9fdd1  brittany-0.14.0.2/data/Test491.hs
+formatted       d469e1b3965b  brittany-0.14.0.2/data/Test492.hs
+formatted       d469e1b3965b  brittany-0.14.0.2/data/Test493.hs
+formatted       1eddc3503b32  brittany-0.14.0.2/data/Test494.hs
+formatted       196d9b015a57  brittany-0.14.0.2/data/Test495.hs
+formatted       00e8a8e9cc86  brittany-0.14.0.2/data/Test496.hs
+formatted       cbeb80fac007  brittany-0.14.0.2/data/Test497.hs
+formatted       326e5653c262  brittany-0.14.0.2/data/Test498.hs
+formatted       46d0f48bc543  brittany-0.14.0.2/data/Test499.hs
+formatted       3bb5ad04d6c9  brittany-0.14.0.2/data/Test5.hs
+formatted       30d139cbecdf  brittany-0.14.0.2/data/Test50.hs
+formatted       bb1de50ba61a  brittany-0.14.0.2/data/Test500.hs
+formatted       46987cddeeb1  brittany-0.14.0.2/data/Test501.hs
+formatted       a26bb5e5e289  brittany-0.14.0.2/data/Test502.hs
+formatted       608441a45ea2  brittany-0.14.0.2/data/Test503.hs
+formatted       088a029a2027  brittany-0.14.0.2/data/Test504.hs
+formatted       b8d19bd75331  brittany-0.14.0.2/data/Test505.hs
+formatted       7aafe7248e10  brittany-0.14.0.2/data/Test506.hs
+formatted       283db15defde  brittany-0.14.0.2/data/Test507.hs
+formatted       a017d7235dda  brittany-0.14.0.2/data/Test508.hs
+formatted       525ac73a7645  brittany-0.14.0.2/data/Test509.hs
+formatted       bdb9309b69ef  brittany-0.14.0.2/data/Test51.hs
+formatted       be3e1e21b3e7  brittany-0.14.0.2/data/Test510.hs
+formatted       386680696e97  brittany-0.14.0.2/data/Test511.hs
+formatted       c74bbb4b17cf  brittany-0.14.0.2/data/Test512.hs
+formatted       bb9ffbc270ba  brittany-0.14.0.2/data/Test513.hs
+formatted       4babc1db968e  brittany-0.14.0.2/data/Test514.hs
+formatted       4babc1db968e  brittany-0.14.0.2/data/Test515.hs
+formatted       4ded8e9531d5  brittany-0.14.0.2/data/Test516.hs
+formatted       9cdba405b7be  brittany-0.14.0.2/data/Test517.hs
+formatted       6192bf9c4318  brittany-0.14.0.2/data/Test518.hs
+formatted       438975b07785  brittany-0.14.0.2/data/Test519.hs
+formatted       3e9fb57fe53f  brittany-0.14.0.2/data/Test52.hs
+formatted       e0922f030820  brittany-0.14.0.2/data/Test520.hs
+formatted       7a6eceaa78bc  brittany-0.14.0.2/data/Test521.hs
+formatted       cd889668f531  brittany-0.14.0.2/data/Test522.hs
+formatted       5eae819cfab2  brittany-0.14.0.2/data/Test523.hs
+formatted       cdd55a113657  brittany-0.14.0.2/data/Test524.hs
+formatted       948aab2f7cf9  brittany-0.14.0.2/data/Test525.hs
+formatted       74dd57f3e6b2  brittany-0.14.0.2/data/Test526.hs
+formatted       ebc6624271d5  brittany-0.14.0.2/data/Test527.hs
+formatted       6d566659bc06  brittany-0.14.0.2/data/Test528.hs
+formatted       86bb82b0ae12  brittany-0.14.0.2/data/Test529.hs
+formatted       113cb843c235  brittany-0.14.0.2/data/Test53.hs
+formatted       c77ad7418bdb  brittany-0.14.0.2/data/Test530.hs
+formatted       e82e4a69ecaf  brittany-0.14.0.2/data/Test531.hs
+formatted       98d38ba919b8  brittany-0.14.0.2/data/Test532.hs
+formatted       93f0725e6f33  brittany-0.14.0.2/data/Test533.hs
+formatted       2f3eea919721  brittany-0.14.0.2/data/Test534.hs
+formatted       4dfe442efa9f  brittany-0.14.0.2/data/Test535.hs
+formatted       083e49e545b1  brittany-0.14.0.2/data/Test536.hs
+formatted       a93167132f4b  brittany-0.14.0.2/data/Test537.hs
+formatted       76a9d8390ac0  brittany-0.14.0.2/data/Test538.hs
+formatted       cb52a4163a3d  brittany-0.14.0.2/data/Test539.hs
+formatted       3206388ca862  brittany-0.14.0.2/data/Test54.hs
+formatted       32bac85b1c99  brittany-0.14.0.2/data/Test540.hs
+formatted       c1076b4718f2  brittany-0.14.0.2/data/Test55.hs
+formatted       5b5da4a27041  brittany-0.14.0.2/data/Test56.hs
+formatted       7d48cd742ee9  brittany-0.14.0.2/data/Test57.hs
+formatted       09a9442047e7  brittany-0.14.0.2/data/Test58.hs
+formatted       007b3f5499fb  brittany-0.14.0.2/data/Test59.hs
+formatted       d9ed4ebe21ed  brittany-0.14.0.2/data/Test6.hs
+formatted       87e8860858b2  brittany-0.14.0.2/data/Test60.hs
+formatted       7bba808f3304  brittany-0.14.0.2/data/Test61.hs
+formatted       7e7c53e8f5f9  brittany-0.14.0.2/data/Test62.hs
+formatted       38957227fb18  brittany-0.14.0.2/data/Test63.hs
+formatted       d1d477cbcd19  brittany-0.14.0.2/data/Test64.hs
+formatted       abec5eceeaf7  brittany-0.14.0.2/data/Test65.hs
+formatted       7e83cb328466  brittany-0.14.0.2/data/Test66.hs
+formatted       08c924dc75db  brittany-0.14.0.2/data/Test67.hs
+formatted       534f9f24c4c4  brittany-0.14.0.2/data/Test68.hs
+formatted       0edc4bf88879  brittany-0.14.0.2/data/Test69.hs
+formatted       6e4a80a16587  brittany-0.14.0.2/data/Test7.hs
+formatted       c26c8d4af0d4  brittany-0.14.0.2/data/Test70.hs
+formatted       7f9b2bb1df69  brittany-0.14.0.2/data/Test71.hs
+formatted       9d549df4742d  brittany-0.14.0.2/data/Test72.hs
+formatted       05ed72d9e760  brittany-0.14.0.2/data/Test73.hs
+formatted       a54128f146c1  brittany-0.14.0.2/data/Test74.hs
+formatted       29302a244e5c  brittany-0.14.0.2/data/Test75.hs
+formatted       89a2a63deffe  brittany-0.14.0.2/data/Test76.hs
+formatted       7a3ad7569e3d  brittany-0.14.0.2/data/Test77.hs
+formatted       286a50a0eb22  brittany-0.14.0.2/data/Test78.hs
+formatted       bc99bdbbbb1e  brittany-0.14.0.2/data/Test79.hs
+formatted       0a8cec799b2a  brittany-0.14.0.2/data/Test8.hs
+formatted       2f2e96416d6d  brittany-0.14.0.2/data/Test80.hs
+formatted       d1d172867e08  brittany-0.14.0.2/data/Test81.hs
+formatted       f66f9b2381e3  brittany-0.14.0.2/data/Test82.hs
+formatted       4fe035cf193a  brittany-0.14.0.2/data/Test83.hs
+formatted       43e925441c75  brittany-0.14.0.2/data/Test84.hs
+formatted       dddcd81d8e89  brittany-0.14.0.2/data/Test85.hs
+formatted       b34676f3162a  brittany-0.14.0.2/data/Test86.hs
+formatted       847e26a48a11  brittany-0.14.0.2/data/Test87.hs
+formatted       d37afb2bca9c  brittany-0.14.0.2/data/Test88.hs
+formatted       870cc6003dc1  brittany-0.14.0.2/data/Test89.hs
+formatted       cd000b5a236a  brittany-0.14.0.2/data/Test9.hs
+formatted       14a1a4f54ceb  brittany-0.14.0.2/data/Test90.hs
+formatted       583f169ace4c  brittany-0.14.0.2/data/Test91.hs
+formatted       1d30d5458df2  brittany-0.14.0.2/data/Test92.hs
+formatted       21ca73bf65e9  brittany-0.14.0.2/data/Test93.hs
+formatted       2640ff7299cc  brittany-0.14.0.2/data/Test94.hs
+formatted       139f17bd37c8  brittany-0.14.0.2/data/Test95.hs
+formatted       3f35ed17b5d4  brittany-0.14.0.2/data/Test96.hs
+formatted       54dbf9915298  brittany-0.14.0.2/data/Test97.hs
+formatted       25178db879d4  brittany-0.14.0.2/data/Test98.hs
+formatted       52caf5793d73  brittany-0.14.0.2/data/Test99.hs
+formatted       7a5d0ee67b99  brittany-0.14.0.2/source/executable/Main.hs
+formatted       f006bb65ddb6  brittany-0.14.0.2/source/library/Language/Haskell/Brittany.hs
+formatted       1cf8df647dcd  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal.hs
+formatted       1b40549c94dc  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Backend.hs
+formatted       45a3ccbf1f6b  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/BackendUtils.hs
+formatted       4db6008c162f  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Config.hs
+formatted       4387eb5344c3  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Config/Types.hs
+formatted       e13b5e1cf845  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Config/Types/Instances.hs
+formatted       3a7e4e0507b6  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/ExactPrintUtils.hs
+formatted       5d4339023e83  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/LayouterBasics.hs
+formatted       5d4ba42810fc  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/DataDecl.hs
+formatted       ee47e6ccde82  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Decl.hs
+formatted       09c403355abb  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Expr.hs
+formatted       63ac93aa854f  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Expr.hs-boot
+formatted       f730e71a6728  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/IE.hs
+formatted       ba5e2c3aa9ff  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Import.hs
+formatted       2724197a64a5  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Module.hs
+formatted       7acd5afe90f4  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Pattern.hs
+formatted       d46ed5a9675b  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Stmt.hs
+formatted       08c3e5d27dd4  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Stmt.hs-boot
+formatted       f89ce9912b0a  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Layouters/Type.hs
+formatted       8d7327e29615  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Obfuscation.hs
+formatted       0dc2352f4480  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/ParseModule.hs
+formatted       79e767ee3e91  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Prelude.hs
+formatted       1a8db66fd521  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/PreludeUtils.hs
+formatted       8a5b5275ee15  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Transformations/Alt.hs
+formatted       c6217dd1471b  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Transformations/Columns.hs
+formatted       f558625f25b7  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Transformations/Floating.hs
+formatted       7d95cc82a77f  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Transformations/Indent.hs
+formatted       c84030401f3e  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Transformations/Par.hs
+formatted       db1436f9e84c  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Types.hs
+formatted       203fcf60dae6  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Internal/Utils.hs
+formatted       359d70ea598f  brittany-0.14.0.2/source/library/Language/Haskell/Brittany/Main.hs
+formatted       e425ebfb8e97  brittany-0.14.0.2/source/test-suite/Main.hs
+formatted       e865ae48f11b  capability-0.5.0.1/Setup.hs
+formatted       6772160dec0c  capability-0.5.0.1/examples/CountLog.hs
+formatted       2eb939764385  capability-0.5.0.1/examples/Error.hs
+formatted       c878dfd98c1c  capability-0.5.0.1/examples/Reader.hs
+formatted       cf7788db327f  capability-0.5.0.1/examples/Reflection.hs
+formatted       4ca78b40a428  capability-0.5.0.1/examples/Sink.hs
+formatted       4bd9f1f5ce20  capability-0.5.0.1/examples/State.hs
+formatted       de729285889f  capability-0.5.0.1/examples/Test.hs
+formatted       bc483d61ffa2  capability-0.5.0.1/examples/Test/Common.hs
+formatted       7e4f90ed485c  capability-0.5.0.1/examples/WordCount.hs
+formatted       9a2c6692cf10  capability-0.5.0.1/examples/Writer.hs
+formatted       c7634b7f4e60  capability-0.5.0.1/src/Capability.hs
+formatted       83447b7b7ea5  capability-0.5.0.1/src/Capability/Accessors.hs
+formatted       8d8d36f3f008  capability-0.5.0.1/src/Capability/Constraints.hs
+formatted       f8fc4a2aaee2  capability-0.5.0.1/src/Capability/Derive.hs
+formatted       3c4efc286c22  capability-0.5.0.1/src/Capability/Error.hs
+formatted       97515747424b  capability-0.5.0.1/src/Capability/Reader.hs
+formatted       89877e765220  capability-0.5.0.1/src/Capability/Reader/Internal/Class.hs
+formatted       007089e89b2a  capability-0.5.0.1/src/Capability/Reader/Internal/Strategies.hs
+formatted       cdf1d99e626f  capability-0.5.0.1/src/Capability/Reflection.hs
+formatted       42f2a624abd3  capability-0.5.0.1/src/Capability/Sink.hs
+formatted       8e57397c62e4  capability-0.5.0.1/src/Capability/Sink/Internal/Class.hs
+formatted       074cd292b8a7  capability-0.5.0.1/src/Capability/Sink/Internal/Strategies.hs
+formatted       d6a811b81394  capability-0.5.0.1/src/Capability/Source.hs
+formatted       b2d52c4c15ca  capability-0.5.0.1/src/Capability/Source/Internal/Class.hs
+formatted       b718392f90a6  capability-0.5.0.1/src/Capability/Source/Internal/Strategies.hs
+formatted       e288db1d616d  capability-0.5.0.1/src/Capability/State.hs
+formatted       9d0280d2e19e  capability-0.5.0.1/src/Capability/State/Internal/Class.hs
+formatted       77e19ee12ef0  capability-0.5.0.1/src/Capability/State/Internal/Strategies.hs
+formatted       e0fc7f2c44f9  capability-0.5.0.1/src/Capability/State/Internal/Strategies/Common.hs
+formatted       dca34ed58cfd  capability-0.5.0.1/src/Capability/Stream.hs
+formatted       6cd51b2d63f1  capability-0.5.0.1/src/Capability/TypeOf.hs
+formatted       9a266b123a93  capability-0.5.0.1/src/Capability/Writer.hs
+formatted       e865ae48f11b  cassava-0.5.5.0/Setup.hs
+formatted       f8de97e1c58a  cassava-0.5.5.0/examples/IncrementalIndexedBasedDecode.hs
+formatted       b9e7e3d9a0fb  cassava-0.5.5.0/examples/IncrementalNamedBasedEncode.hs
+formatted       a004028b7dc3  cassava-0.5.5.0/examples/IndexBasedDecode.hs
+formatted       03830830ed9e  cassava-0.5.5.0/examples/IndexBasedGeneric.hs
+formatted       f4fb7ce7564b  cassava-0.5.5.0/examples/NamedBasedDecode.hs
+formatted       ecf9a4c54a67  cassava-0.5.5.0/examples/NamedBasedExplicitDecode.hs
+formatted       d51604b7e89f  cassava-0.5.5.0/examples/NamedBasedGeneric.hs
+formatted       9612391bd37b  cassava-0.5.5.0/examples/StreamingIndexBasedDecode.hs
+formatted       efc1fe9896ec  cassava-0.5.5.0/src/Data/Csv.hs
+formatted       817b8cca8d06  cassava-0.5.5.0/src/Data/Csv/Builder.hs
+formatted       38c7c4badf0a  cassava-0.5.5.0/src/Data/Csv/Conversion.hs
+formatted       a4c56813cba7  cassava-0.5.5.0/src/Data/Csv/Conversion/Internal.hs
+formatted       5906452b290a  cassava-0.5.5.0/src/Data/Csv/Encoding.hs
+formatted       32c60ff1a4fd  cassava-0.5.5.0/src/Data/Csv/Incremental.hs
+formatted       be1c60df3b34  cassava-0.5.5.0/src/Data/Csv/Parser.hs
+formatted       014bb9b262b9  cassava-0.5.5.0/src/Data/Csv/Streaming.hs
+formatted       20f42a736b97  cassava-0.5.5.0/src/Data/Csv/Types.hs
+formatted       4a5a0e1a51c9  cassava-0.5.5.0/src/Data/Csv/Util.hs
+formatted       61c26773c418  cassava-0.5.5.0/tests/UnitTests.hs
+formatted       b77256b69093  comonad-5.0.10/examples/History.hs
+formatted       9e72148ec524  comonad-5.0.10/src/Control/Comonad.hs
+formatted       d084cf5c7fa7  comonad-5.0.10/src/Control/Comonad/Env.hs
+formatted       3b8ec012a04c  comonad-5.0.10/src/Control/Comonad/Env/Class.hs
+formatted       0dcf633542eb  comonad-5.0.10/src/Control/Comonad/Hoist/Class.hs
+formatted       4bfafba3ce3b  comonad-5.0.10/src/Control/Comonad/Identity.hs
+formatted       49b438747b63  comonad-5.0.10/src/Control/Comonad/Store.hs
+formatted       cf408da422ba  comonad-5.0.10/src/Control/Comonad/Store/Class.hs
+formatted       2c72a397c339  comonad-5.0.10/src/Control/Comonad/Traced.hs
+formatted       da617308f9a3  comonad-5.0.10/src/Control/Comonad/Traced/Class.hs
+formatted       adbd6d7e0f72  comonad-5.0.10/src/Control/Comonad/Trans/Class.hs
+formatted       871b9e0bc5cd  comonad-5.0.10/src/Control/Comonad/Trans/Env.hs
+formatted       c405a550608b  comonad-5.0.10/src/Control/Comonad/Trans/Identity.hs
+formatted       6b990e80a8eb  comonad-5.0.10/src/Control/Comonad/Trans/Store.hs
+formatted       314d93d6a1d8  comonad-5.0.10/src/Control/Comonad/Trans/Traced.hs
+formatted       34f425eff98b  comonad-5.0.10/src/Data/Functor/Composition.hs
+formatted       be111de01001  conduit-1.3.6.1/benchmarks/optimize-201408.hs
+formatted       f70f6155e62a  conduit-1.3.6.1/benchmarks/unfused.hs
+formatted       20fad0c5aecd  conduit-1.3.6.1/src/Conduit.hs
+formatted       bf88ceabad43  conduit-1.3.6.1/src/Data/Conduit.hs
+formatted       6fba99ab1b1b  conduit-1.3.6.1/src/Data/Conduit/Combinators.hs
+formatted       9e46f7ab29ac  conduit-1.3.6.1/src/Data/Conduit/Combinators/Stream.hs
+formatted       1290e9b983f1  conduit-1.3.6.1/src/Data/Conduit/Combinators/Unqualified.hs
+formatted       8e861a915c2f  conduit-1.3.6.1/src/Data/Conduit/Internal.hs
+formatted       27c68c4604b4  conduit-1.3.6.1/src/Data/Conduit/Internal/Conduit.hs
+formatted       bbfd28e5b98b  conduit-1.3.6.1/src/Data/Conduit/Internal/Fusion.hs
+formatted       54120af8edce  conduit-1.3.6.1/src/Data/Conduit/Internal/List/Stream.hs
+formatted       2fe8b1b7e798  conduit-1.3.6.1/src/Data/Conduit/Internal/Pipe.hs
+formatted       4a4c14b72249  conduit-1.3.6.1/src/Data/Conduit/Lift.hs
+formatted       15e5ac8a2cb1  conduit-1.3.6.1/src/Data/Conduit/List.hs
+formatted       55a50272f6a7  conduit-1.3.6.1/src/Data/Streaming/FileRead.hs
+formatted       71e1c3bf7039  conduit-1.3.6.1/src/Data/Streaming/Filesystem.hs
+formatted       d9e8dbaa2534  conduit-1.3.6.1/test/Data/Conduit/Extra/ZipConduitSpec.hs
+formatted       3df81ded6599  conduit-1.3.6.1/test/Data/Conduit/StreamSpec.hs
+formatted       cf41359a6248  conduit-1.3.6.1/test/Spec.hs
+formatted       18f42fad75a6  conduit-1.3.6.1/test/StreamSpec.hs
+formatted       db2295b8113a  conduit-1.3.6.1/test/doctests.hs
+formatted       a21201eaf0ea  conduit-1.3.6.1/test/main.hs
+formatted       cf30290b0c41  contravariant-1.5.6/old-src/Data/Functor/Contravariant.hs
+formatted       4ddb460640d4  contravariant-1.5.6/src/Data/Functor/Contravariant/Compose.hs
+formatted       ca6ed6c2a277  contravariant-1.5.6/src/Data/Functor/Contravariant/Divisible.hs
+formatted       c83d2c04f4ed  contravariant-1.5.6/src/Data/Functor/Contravariant/Generic.hs
+formatted       2841bd16822b  criterion-1.6.5.0/Criterion.hs
+formatted       417b9eafad2d  criterion-1.6.5.0/Criterion/Analysis.hs
+formatted       c039ba5918a9  criterion-1.6.5.0/Criterion/EmbeddedData.hs
+formatted       f07714df2d3d  criterion-1.6.5.0/Criterion/IO.hs
+formatted       9cbbe0381e04  criterion-1.6.5.0/Criterion/IO/Printf.hs
+formatted       7f06470ac8f8  criterion-1.6.5.0/Criterion/Internal.hs
+formatted       61563e5b80e1  criterion-1.6.5.0/Criterion/Main.hs
+formatted       a7ae79817c1c  criterion-1.6.5.0/Criterion/Main/Options.hs
+formatted       aab23b74a86d  criterion-1.6.5.0/Criterion/Monad.hs
+formatted       344969265c26  criterion-1.6.5.0/Criterion/Monad/Internal.hs
+formatted       68661ef87043  criterion-1.6.5.0/Criterion/Report.hs
+formatted       ef0e89d5813d  criterion-1.6.5.0/Criterion/Types.hs
+formatted       fb8e29343d89  criterion-1.6.5.0/app/Options.hs
+formatted       1c316429bc18  criterion-1.6.5.0/app/Report.hs
+formatted       a437ea93f53e  criterion-1.6.5.0/examples/BadReadFile.hs
+formatted       bfb4844251ca  criterion-1.6.5.0/examples/Comparison.hs
+formatted       f54fba36e069  criterion-1.6.5.0/examples/ConduitVsPipes.hs
+formatted       a4f8cda29d3c  criterion-1.6.5.0/examples/ExtensibleCLI.hs
+formatted       8f4df570ff4e  criterion-1.6.5.0/examples/Fibber.hs
+formatted       9196e3f4c3d7  criterion-1.6.5.0/examples/GoodReadFile.hs
+formatted       e85b2e0c3354  criterion-1.6.5.0/examples/Judy.hs
+formatted       7d1ede331f1f  criterion-1.6.5.0/examples/Maps.hs
+formatted       f396bcf9c829  criterion-1.6.5.0/examples/Overhead.hs
+formatted       3a50edf5477c  criterion-1.6.5.0/examples/Quotes.hs
+formatted       e88811d40513  criterion-1.6.5.0/tests/Cleanup.hs
+formatted       78253dc00e1a  criterion-1.6.5.0/tests/Properties.hs
+formatted       a99e4edb542c  criterion-1.6.5.0/tests/Sanity.hs
+formatted       f8a8d8f2c4ae  criterion-1.6.5.0/tests/Tests.hs
+formatted       44af498375d5  cryptonite-0.30/Crypto/Cipher/AES.hs
+formatted       2240267dad51  cryptonite-0.30/Crypto/Cipher/AES/Primitive.hs
+formatted       5694da9617bf  cryptonite-0.30/Crypto/Cipher/AESGCMSIV.hs
+formatted       ab05e6ed96e9  cryptonite-0.30/Crypto/Cipher/Blowfish.hs
+formatted       98e1845904ad  cryptonite-0.30/Crypto/Cipher/Blowfish/Box.hs
+formatted       23c195272bfd  cryptonite-0.30/Crypto/Cipher/Blowfish/Primitive.hs
+formatted       7ece5bd42232  cryptonite-0.30/Crypto/Cipher/CAST5.hs
+formatted       d0210ba9a96f  cryptonite-0.30/Crypto/Cipher/CAST5/Primitive.hs
+formatted       c818f5ccfd4a  cryptonite-0.30/Crypto/Cipher/Camellia.hs
+formatted       f429b69d6156  cryptonite-0.30/Crypto/Cipher/Camellia/Primitive.hs
+formatted       dbd216d2f0aa  cryptonite-0.30/Crypto/Cipher/ChaCha.hs
+formatted       bcadafa03089  cryptonite-0.30/Crypto/Cipher/ChaChaPoly1305.hs
+formatted       092e6bcae818  cryptonite-0.30/Crypto/Cipher/DES.hs
+formatted       b66fa5163d3f  cryptonite-0.30/Crypto/Cipher/DES/Primitive.hs
+formatted       bc58b513348e  cryptonite-0.30/Crypto/Cipher/RC4.hs
+formatted       d59fa1e97895  cryptonite-0.30/Crypto/Cipher/Salsa.hs
+formatted       58b5729d32db  cryptonite-0.30/Crypto/Cipher/TripleDES.hs
+formatted       8aafca6b830e  cryptonite-0.30/Crypto/Cipher/Twofish.hs
+formatted       6b6428c6bd37  cryptonite-0.30/Crypto/Cipher/Twofish/Primitive.hs
+formatted       54afbb146e5c  cryptonite-0.30/Crypto/Cipher/Types.hs
+formatted       9872fb82a680  cryptonite-0.30/Crypto/Cipher/Types/AEAD.hs
+formatted       ea04a762895f  cryptonite-0.30/Crypto/Cipher/Types/Base.hs
+formatted       e02385d86f90  cryptonite-0.30/Crypto/Cipher/Types/Block.hs
+formatted       7c2782316618  cryptonite-0.30/Crypto/Cipher/Types/GF.hs
+formatted       17ceaf6e3360  cryptonite-0.30/Crypto/Cipher/Types/Stream.hs
+formatted       6cdb1c7bd28d  cryptonite-0.30/Crypto/Cipher/Types/Utils.hs
+formatted       f1893d3edfa7  cryptonite-0.30/Crypto/Cipher/Utils.hs
+formatted       20107f92349f  cryptonite-0.30/Crypto/Cipher/XSalsa.hs
+formatted       117e7ce7c967  cryptonite-0.30/Crypto/ConstructHash/MiyaguchiPreneel.hs
+formatted       4f15b3874982  cryptonite-0.30/Crypto/Data/AFIS.hs
+formatted       37c60fc95ef2  cryptonite-0.30/Crypto/Data/Padding.hs
+formatted       2ba3cd2f51b9  cryptonite-0.30/Crypto/ECC.hs
+formatted       951ccc172449  cryptonite-0.30/Crypto/ECC/Edwards25519.hs
+formatted       26c0fcc08733  cryptonite-0.30/Crypto/ECC/Simple/Prim.hs
+formatted       64fc04cd74ae  cryptonite-0.30/Crypto/ECC/Simple/Types.hs
+formatted       3560b9821c3b  cryptonite-0.30/Crypto/Error.hs
+formatted       0caeb40058f2  cryptonite-0.30/Crypto/Error/Types.hs
+formatted       bcc2e2a5ecac  cryptonite-0.30/Crypto/Hash.hs
+formatted       514502d73233  cryptonite-0.30/Crypto/Hash/Algorithms.hs
+formatted       a83eee5ae7b0  cryptonite-0.30/Crypto/Hash/Blake2.hs
+formatted       f99040e35232  cryptonite-0.30/Crypto/Hash/Blake2b.hs
+formatted       9fc6dd4195c9  cryptonite-0.30/Crypto/Hash/Blake2bp.hs
+formatted       aa6fb8816478  cryptonite-0.30/Crypto/Hash/Blake2s.hs
+formatted       5987b76d2285  cryptonite-0.30/Crypto/Hash/Blake2sp.hs
+formatted       36d330a27ffe  cryptonite-0.30/Crypto/Hash/IO.hs
+formatted       527ac917164f  cryptonite-0.30/Crypto/Hash/Keccak.hs
+formatted       988960beff03  cryptonite-0.30/Crypto/Hash/MD2.hs
+formatted       643fd2f5f7f2  cryptonite-0.30/Crypto/Hash/MD4.hs
+formatted       0176320f82f4  cryptonite-0.30/Crypto/Hash/MD5.hs
+formatted       54c369b13f00  cryptonite-0.30/Crypto/Hash/RIPEMD160.hs
+formatted       0cf990ecd2cd  cryptonite-0.30/Crypto/Hash/SHA1.hs
+formatted       6b15758ab087  cryptonite-0.30/Crypto/Hash/SHA224.hs
+formatted       a5a52f418404  cryptonite-0.30/Crypto/Hash/SHA256.hs
+formatted       05629720d732  cryptonite-0.30/Crypto/Hash/SHA3.hs
+formatted       076c9d704bf2  cryptonite-0.30/Crypto/Hash/SHA384.hs
+formatted       d65edf0aeac8  cryptonite-0.30/Crypto/Hash/SHA512.hs
+formatted       94400683916e  cryptonite-0.30/Crypto/Hash/SHA512t.hs
+formatted       9b214034fb00  cryptonite-0.30/Crypto/Hash/SHAKE.hs
+formatted       506e64c190a2  cryptonite-0.30/Crypto/Hash/Skein256.hs
+formatted       da70bee9980a  cryptonite-0.30/Crypto/Hash/Skein512.hs
+formatted       2f8832cc95bb  cryptonite-0.30/Crypto/Hash/Tiger.hs
+formatted       f7994b599588  cryptonite-0.30/Crypto/Hash/Types.hs
+formatted       4ea25e04f5c1  cryptonite-0.30/Crypto/Hash/Whirlpool.hs
+formatted       f70544b8e5f8  cryptonite-0.30/Crypto/Internal/Builder.hs
+formatted       98a5de0267ed  cryptonite-0.30/Crypto/Internal/ByteArray.hs
+formatted       f801f423094d  cryptonite-0.30/Crypto/Internal/Compat.hs
+formatted       54db2fce0fcc  cryptonite-0.30/Crypto/Internal/CompatPrim.hs
+formatted       d4435b068486  cryptonite-0.30/Crypto/Internal/DeepSeq.hs
+formatted       4646f54cc944  cryptonite-0.30/Crypto/Internal/Imports.hs
+formatted       4878b8fb8411  cryptonite-0.30/Crypto/Internal/Nat.hs
+formatted       483861a9b72d  cryptonite-0.30/Crypto/Internal/WordArray.hs
+formatted       5786998be3b3  cryptonite-0.30/Crypto/Internal/Words.hs
+formatted       0434f24b7a9f  cryptonite-0.30/Crypto/KDF/Argon2.hs
+formatted       9725e47b1b66  cryptonite-0.30/Crypto/KDF/BCrypt.hs
+formatted       28be07832b83  cryptonite-0.30/Crypto/KDF/BCryptPBKDF.hs
+formatted       7c78160cd13d  cryptonite-0.30/Crypto/KDF/HKDF.hs
+formatted       f25d68c357c2  cryptonite-0.30/Crypto/KDF/PBKDF2.hs
+formatted       3307468c4b5d  cryptonite-0.30/Crypto/KDF/Scrypt.hs
+formatted       8f3891401559  cryptonite-0.30/Crypto/MAC/CMAC.hs
+formatted       9dff2956cdea  cryptonite-0.30/Crypto/MAC/HMAC.hs
+formatted       859812024323  cryptonite-0.30/Crypto/MAC/KMAC.hs
+formatted       a54d3189768c  cryptonite-0.30/Crypto/MAC/Poly1305.hs
+formatted       c065c0ae8804  cryptonite-0.30/Crypto/Number/Basic.hs
+partly-checked  27ebb2f56bcc  cryptonite-0.30/Crypto/Number/Compat.hs
+formatted       d8e4da3cf8c5  cryptonite-0.30/Crypto/Number/F2m.hs
+formatted       7b62d9f0185b  cryptonite-0.30/Crypto/Number/Generate.hs
+formatted       53fbd1bf4d6c  cryptonite-0.30/Crypto/Number/ModArithmetic.hs
+formatted       3887ba3c7c43  cryptonite-0.30/Crypto/Number/Nat.hs
+formatted       930fa05c486f  cryptonite-0.30/Crypto/Number/Prime.hs
+formatted       3be1d9c43e52  cryptonite-0.30/Crypto/Number/Serialize.hs
+formatted       cfe6a456efe7  cryptonite-0.30/Crypto/Number/Serialize/Internal.hs
+formatted       8f181f9bc069  cryptonite-0.30/Crypto/Number/Serialize/Internal/LE.hs
+formatted       c21267dc7970  cryptonite-0.30/Crypto/Number/Serialize/LE.hs
+formatted       306914497f38  cryptonite-0.30/Crypto/OTP.hs
+formatted       47ac3109be1c  cryptonite-0.30/Crypto/PubKey/Curve25519.hs
+formatted       ff1bad4fe0ae  cryptonite-0.30/Crypto/PubKey/Curve448.hs
+formatted       7279b7fc32ee  cryptonite-0.30/Crypto/PubKey/DH.hs
+formatted       61fc8cd02023  cryptonite-0.30/Crypto/PubKey/DSA.hs
+formatted       9671d669d9fb  cryptonite-0.30/Crypto/PubKey/ECC/DH.hs
+formatted       face3da85363  cryptonite-0.30/Crypto/PubKey/ECC/ECDSA.hs
+formatted       97c5eb3f0754  cryptonite-0.30/Crypto/PubKey/ECC/Generate.hs
+formatted       d4527eb98a84  cryptonite-0.30/Crypto/PubKey/ECC/P256.hs
+formatted       421cbae47c83  cryptonite-0.30/Crypto/PubKey/ECC/Prim.hs
+formatted       65081a388743  cryptonite-0.30/Crypto/PubKey/ECC/Types.hs
+formatted       dae44ef68546  cryptonite-0.30/Crypto/PubKey/ECDSA.hs
+formatted       04ef544fcbc1  cryptonite-0.30/Crypto/PubKey/ECIES.hs
+formatted       ca8ec46db323  cryptonite-0.30/Crypto/PubKey/Ed25519.hs
+formatted       dba822ca565e  cryptonite-0.30/Crypto/PubKey/Ed448.hs
+formatted       365814eb2b58  cryptonite-0.30/Crypto/PubKey/EdDSA.hs
+formatted       e083f4a748a3  cryptonite-0.30/Crypto/PubKey/ElGamal.hs
+formatted       5a0517dd2399  cryptonite-0.30/Crypto/PubKey/Internal.hs
+formatted       83e024783092  cryptonite-0.30/Crypto/PubKey/MaskGenFunction.hs
+formatted       aaafa0f20f26  cryptonite-0.30/Crypto/PubKey/RSA.hs
+formatted       c12317773f47  cryptonite-0.30/Crypto/PubKey/RSA/OAEP.hs
+formatted       b777939c6984  cryptonite-0.30/Crypto/PubKey/RSA/PKCS15.hs
+formatted       9255a1c6fd3d  cryptonite-0.30/Crypto/PubKey/RSA/PSS.hs
+formatted       8643b6ddea84  cryptonite-0.30/Crypto/PubKey/RSA/Prim.hs
+formatted       7ab3ae862f55  cryptonite-0.30/Crypto/PubKey/RSA/Types.hs
+formatted       a97d7fbec7cf  cryptonite-0.30/Crypto/PubKey/Rabin/Basic.hs
+formatted       3e0ac8c999c0  cryptonite-0.30/Crypto/PubKey/Rabin/Modified.hs
+formatted       a53ee7c1c1a5  cryptonite-0.30/Crypto/PubKey/Rabin/OAEP.hs
+formatted       b578b97afc3e  cryptonite-0.30/Crypto/PubKey/Rabin/RW.hs
+formatted       c0eae64dcf68  cryptonite-0.30/Crypto/PubKey/Rabin/Types.hs
+formatted       1854f69b3828  cryptonite-0.30/Crypto/Random.hs
+formatted       f3902d2c9c96  cryptonite-0.30/Crypto/Random/ChaChaDRG.hs
+formatted       8b31b5a87af9  cryptonite-0.30/Crypto/Random/Entropy.hs
+formatted       f8afb2ba19cc  cryptonite-0.30/Crypto/Random/Entropy/Backend.hs
+formatted       9b0c8653e10a  cryptonite-0.30/Crypto/Random/Entropy/RDRand.hs
+formatted       0c206170779c  cryptonite-0.30/Crypto/Random/Entropy/Source.hs
+formatted       75121bc8d581  cryptonite-0.30/Crypto/Random/Entropy/Unix.hs
+formatted       2b02d2fc4203  cryptonite-0.30/Crypto/Random/Entropy/Unsafe.hs
+declined        -             cryptonite-0.30/Crypto/Random/Entropy/Windows.hs
+formatted       4f4ac464c6e9  cryptonite-0.30/Crypto/Random/EntropyPool.hs
+formatted       762f30275eb4  cryptonite-0.30/Crypto/Random/Probabilistic.hs
+formatted       dd360e4a76e6  cryptonite-0.30/Crypto/Random/SystemDRG.hs
+formatted       3613df3a0846  cryptonite-0.30/Crypto/Random/Types.hs
+formatted       b12c43b64866  cryptonite-0.30/Crypto/System/CPU.hs
+formatted       3f10131f3add  cryptonite-0.30/Crypto/Tutorial.hs
+formatted       e865ae48f11b  cryptonite-0.30/Setup.hs
+formatted       ac276403f523  cryptonite-0.30/benchs/Bench.hs
+formatted       772fcb717c67  cryptonite-0.30/benchs/Number/F2m.hs
+formatted       57d09cf26ff7  cryptonite-0.30/tests/BCrypt.hs
+formatted       e0a9d879663a  cryptonite-0.30/tests/BCryptPBKDF.hs
+formatted       1fb7875ac9b3  cryptonite-0.30/tests/BlockCipher.hs
+formatted       ae1da1712bf7  cryptonite-0.30/tests/ChaCha.hs
+formatted       2ff39a30e968  cryptonite-0.30/tests/ChaChaPoly1305.hs
+formatted       c628564c97aa  cryptonite-0.30/tests/ECC.hs
+formatted       5d886e661761  cryptonite-0.30/tests/ECC/Edwards25519.hs
+formatted       e8de6edaf6ac  cryptonite-0.30/tests/ECDSA.hs
+formatted       27ce811073c1  cryptonite-0.30/tests/Hash.hs
+formatted       e00752436aeb  cryptonite-0.30/tests/Imports.hs
+formatted       beecfeaa8fb1  cryptonite-0.30/tests/KAT_AES.hs
+formatted       810d48314931  cryptonite-0.30/tests/KAT_AES/KATCBC.hs
+formatted       18eaacc22a0b  cryptonite-0.30/tests/KAT_AES/KATCCM.hs
+formatted       44fe15b7084a  cryptonite-0.30/tests/KAT_AES/KATECB.hs
+formatted       82fa19f7ce7a  cryptonite-0.30/tests/KAT_AES/KATGCM.hs
+formatted       615d3d0c3896  cryptonite-0.30/tests/KAT_AES/KATOCB3.hs
+formatted       7ab1f2d998b8  cryptonite-0.30/tests/KAT_AES/KATXTS.hs
+formatted       1e2edc23eab4  cryptonite-0.30/tests/KAT_AESGCMSIV.hs
+formatted       5f71c9d0489d  cryptonite-0.30/tests/KAT_AFIS.hs
+formatted       a29f1f177a83  cryptonite-0.30/tests/KAT_Argon2.hs
+formatted       8415bc362f2c  cryptonite-0.30/tests/KAT_Blowfish.hs
+formatted       05a7dbeb9005  cryptonite-0.30/tests/KAT_CAST5.hs
+formatted       a3584b1b317f  cryptonite-0.30/tests/KAT_CMAC.hs
+formatted       c4f1dbee51d6  cryptonite-0.30/tests/KAT_Camellia.hs
+formatted       6afe12fcf4eb  cryptonite-0.30/tests/KAT_Curve25519.hs
+formatted       6093259a5aa9  cryptonite-0.30/tests/KAT_Curve448.hs
+formatted       8e0eac40b9d6  cryptonite-0.30/tests/KAT_DES.hs
+formatted       3a7902b73bd8  cryptonite-0.30/tests/KAT_Ed25519.hs
+formatted       bbf6a21d5f18  cryptonite-0.30/tests/KAT_Ed448.hs
+formatted       b59a87e7f1e5  cryptonite-0.30/tests/KAT_EdDSA.hs
+formatted       0fa0afdb302b  cryptonite-0.30/tests/KAT_HKDF.hs
+formatted       f0b45b263f2a  cryptonite-0.30/tests/KAT_HMAC.hs
+formatted       ee17a2d47a67  cryptonite-0.30/tests/KAT_KMAC.hs
+formatted       66cf41c37e13  cryptonite-0.30/tests/KAT_MiyaguchiPreneel.hs
+formatted       5161823955d7  cryptonite-0.30/tests/KAT_OTP.hs
+formatted       e23a8a363aff  cryptonite-0.30/tests/KAT_PBKDF2.hs
+formatted       1f0d2812b0a5  cryptonite-0.30/tests/KAT_PubKey.hs
+formatted       c92369374dbb  cryptonite-0.30/tests/KAT_PubKey/DSA.hs
+formatted       743790d1c893  cryptonite-0.30/tests/KAT_PubKey/ECC.hs
+formatted       72827abb8090  cryptonite-0.30/tests/KAT_PubKey/ECDSA.hs
+formatted       0a8edec8bb84  cryptonite-0.30/tests/KAT_PubKey/OAEP.hs
+formatted       6ba37e5828ed  cryptonite-0.30/tests/KAT_PubKey/P256.hs
+formatted       93c9f8d40494  cryptonite-0.30/tests/KAT_PubKey/PSS.hs
+formatted       bba8cd12072c  cryptonite-0.30/tests/KAT_PubKey/RSA.hs
+formatted       cd527ad025c4  cryptonite-0.30/tests/KAT_PubKey/Rabin.hs
+formatted       fa1389bb8af8  cryptonite-0.30/tests/KAT_RC4.hs
+formatted       6c174475decc  cryptonite-0.30/tests/KAT_Scrypt.hs
+formatted       36380d994c1c  cryptonite-0.30/tests/KAT_TripleDES.hs
+formatted       88dd0eef74a1  cryptonite-0.30/tests/KAT_Twofish.hs
+formatted       d3ffb4dd724c  cryptonite-0.30/tests/Number.hs
+formatted       7da4a28c8580  cryptonite-0.30/tests/Number/F2m.hs
+formatted       153769199399  cryptonite-0.30/tests/Padding.hs
+formatted       e4b87212dc1f  cryptonite-0.30/tests/Poly1305.hs
+formatted       38c09837971d  cryptonite-0.30/tests/Salsa.hs
+formatted       54065ea7b3f2  cryptonite-0.30/tests/Tests.hs
+formatted       be766d438585  cryptonite-0.30/tests/Utils.hs
+formatted       f7ee48c90ce9  cryptonite-0.30/tests/XSalsa.hs
+formatted       e865ae48f11b  diagrams-core-1.5.1.2/Setup.hs
+formatted       390dfdff3fbc  diagrams-core-1.5.1.2/src/Diagrams/Core.hs
+formatted       5b9f4064740f  diagrams-core-1.5.1.2/src/Diagrams/Core/Compile.hs
+formatted       dcc0b6e7d82d  diagrams-core-1.5.1.2/src/Diagrams/Core/Envelope.hs
+formatted       c945af86b66d  diagrams-core-1.5.1.2/src/Diagrams/Core/HasOrigin.hs
+formatted       5e6397a73cbf  diagrams-core-1.5.1.2/src/Diagrams/Core/Juxtapose.hs
+formatted       0de67b81d340  diagrams-core-1.5.1.2/src/Diagrams/Core/Measure.hs
+formatted       3f232ced8cd3  diagrams-core-1.5.1.2/src/Diagrams/Core/Names.hs
+formatted       169fec80496d  diagrams-core-1.5.1.2/src/Diagrams/Core/Points.hs
+formatted       f005c45a7335  diagrams-core-1.5.1.2/src/Diagrams/Core/Query.hs
+formatted       c1f6572049e6  diagrams-core-1.5.1.2/src/Diagrams/Core/Style.hs
+formatted       0d93bb9387d4  diagrams-core-1.5.1.2/src/Diagrams/Core/Trace.hs
+formatted       ceb1829b99d5  diagrams-core-1.5.1.2/src/Diagrams/Core/Transform.hs
+formatted       053c9acdc8a3  diagrams-core-1.5.1.2/src/Diagrams/Core/Types.hs
+formatted       a9f71c9c75d0  diagrams-core-1.5.1.2/src/Diagrams/Core/V.hs
+formatted       5cabe7655bac  distributed-process-0.7.8/benchmarks/Channels.hs
+formatted       504953bb1387  distributed-process-0.7.8/benchmarks/Latency.hs
+formatted       e43130036e36  distributed-process-0.7.8/benchmarks/ProcessRing.hs
+formatted       c83a31f749c7  distributed-process-0.7.8/benchmarks/Spawns.hs
+formatted       54738fd746e9  distributed-process-0.7.8/benchmarks/Throughput.hs
+formatted       e7bfb48f27d1  distributed-process-0.7.8/src/Control/Distributed/Process.hs
+formatted       3f710068b83b  distributed-process-0.7.8/src/Control/Distributed/Process/Closure.hs
+formatted       9abdf121594b  distributed-process-0.7.8/src/Control/Distributed/Process/Debug.hs
+formatted       c98976ba0493  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/BiMultiMap.hs
+formatted       fe72c6f43347  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/CQueue.hs
+formatted       2946b3a11a2f  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Closure/BuiltIn.hs
+formatted       a950bf8d3ff9  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Closure/Explicit.hs
+formatted       8ab242465a6d  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Closure/TH.hs
+formatted       4f632ae95bca  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Messaging.hs
+formatted       cdbd1062f92e  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Primitives.hs
+formatted       e45882712088  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Spawn.hs
+formatted       cd3afabcd890  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/StrictContainerAccessors.hs
+formatted       8a9d9c67b86f  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/StrictList.hs
+formatted       b21182e8f9f2  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/StrictMVar.hs
+formatted       872f36ee90c9  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/Types.hs
+formatted       d8a70ea27555  distributed-process-0.7.8/src/Control/Distributed/Process/Internal/WeakTQueue.hs
+formatted       b54c3b7901fc  distributed-process-0.7.8/src/Control/Distributed/Process/Management.hs
+formatted       0fc21b015e4c  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Agent.hs
+formatted       39b50d32c5a6  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Bus.hs
+formatted       5e7aa53931dc  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Trace/Primitives.hs
+formatted       818907f11c3f  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Trace/Remote.hs
+formatted       b20da2c91302  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Trace/Tracer.hs
+formatted       2b21046051cd  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Trace/Types.hs
+formatted       07108d12c1fe  distributed-process-0.7.8/src/Control/Distributed/Process/Management/Internal/Types.hs
+formatted       b797d0b46d2e  distributed-process-0.7.8/src/Control/Distributed/Process/Node.hs
+formatted       6b86ee01b32a  distributed-process-0.7.8/src/Control/Distributed/Process/Serializable.hs
+formatted       daf3cd1d8b53  distributed-process-0.7.8/src/Control/Distributed/Process/UnsafePrimitives.hs
+broken          c7f3522faa0a  dlist-1.0/Data/DList.hs
+formatted       20c1dbe536f4  dlist-1.0/Data/DList/DNonEmpty.hs
+formatted       3d51b496abb0  dlist-1.0/Data/DList/DNonEmpty/Internal.hs
+declined        -             dlist-1.0/Data/DList/Internal.hs
+formatted       669ee89127ed  dlist-1.0/Data/DList/Unsafe.hs
+formatted       c7f9b52c6db5  dlist-1.0/tests/DListProperties.hs
+formatted       54f0c52fc06b  dlist-1.0/tests/DNonEmptyProperties.hs
+formatted       9471e1a867e9  dlist-1.0/tests/ImportUnsafe.hs
+formatted       977d78f79456  dlist-1.0/tests/Main.hs
+formatted       ff0ea90a2896  dlist-1.0/tests/OverloadedStrings.hs
+formatted       eda938831fc8  dlist-1.0/tests/QuickCheckUtil.hs
+formatted       e865ae48f11b  esqueleto-3.6.0.3/Setup.hs
+formatted       fb274a829f01  esqueleto-3.6.0.3/src/Database/Esqueleto.hs
+formatted       99a3554c79c4  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental.hs
+formatted       f39aad505f10  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/From.hs
+formatted       3dc85ea0c84f  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/From/CommonTableExpression.hs
+formatted       1c658ac7468e  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/From/Join.hs
+formatted       beecd102c083  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/From/SqlSetOperation.hs
+formatted       6bfe86eb6141  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/ToAlias.hs
+formatted       ed8893f41cd7  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/ToAliasReference.hs
+formatted       9f36875401e2  esqueleto-3.6.0.3/src/Database/Esqueleto/Experimental/ToMaybe.hs
+formatted       a736ace7f7d4  esqueleto-3.6.0.3/src/Database/Esqueleto/Internal/ExprParser.hs
+formatted       00efc44de803  esqueleto-3.6.0.3/src/Database/Esqueleto/Internal/Internal.hs
+formatted       8e8a8c378f2b  esqueleto-3.6.0.3/src/Database/Esqueleto/Internal/PersistentImport.hs
+formatted       23c62f207b2d  esqueleto-3.6.0.3/src/Database/Esqueleto/Legacy.hs
+formatted       9cd66d1b3ed2  esqueleto-3.6.0.3/src/Database/Esqueleto/MySQL.hs
+formatted       03e7cbed2cf8  esqueleto-3.6.0.3/src/Database/Esqueleto/PostgreSQL.hs
+formatted       c9c85bd4863e  esqueleto-3.6.0.3/src/Database/Esqueleto/PostgreSQL/JSON.hs
+formatted       df35c8f3b6bf  esqueleto-3.6.0.3/src/Database/Esqueleto/PostgreSQL/JSON/Instances.hs
+formatted       573ddd92ef4a  esqueleto-3.6.0.3/src/Database/Esqueleto/Record.hs
+formatted       167fa1cef38a  esqueleto-3.6.0.3/src/Database/Esqueleto/SQLite.hs
+formatted       791ffee464be  esqueleto-3.6.0.3/test/Common/Record.hs
+formatted       3d260d3951bd  esqueleto-3.6.0.3/test/Common/Test.hs
+formatted       07d3054c5606  esqueleto-3.6.0.3/test/Common/Test/CTE.hs
+formatted       1f83d04692e3  esqueleto-3.6.0.3/test/Common/Test/Import.hs
+formatted       2e16567983e5  esqueleto-3.6.0.3/test/Common/Test/Models.hs
+formatted       1e1af0ff65e2  esqueleto-3.6.0.3/test/Common/Test/Select.hs
+formatted       6c403a7dbfd3  esqueleto-3.6.0.3/test/MySQL/Test.hs
+formatted       649022fe6ecf  esqueleto-3.6.0.3/test/PostgreSQL/MigrateJSON.hs
+formatted       cbb4df3506fe  esqueleto-3.6.0.3/test/PostgreSQL/Test.hs
+formatted       0e0ef1763885  esqueleto-3.6.0.3/test/SQLite/Test.hs
+formatted       9c274d8e66c1  esqueleto-3.6.0.3/test/Spec.hs
+formatted       27965836c84d  exceptions-0.10.12/src/Control/Monad/Catch.hs
+formatted       2982a44f9995  exceptions-0.10.12/src/Control/Monad/Catch/Pure.hs
+formatted       da6b7265725b  exceptions-0.10.12/tests/Control/Monad/Catch/Tests.hs
+formatted       bba664ba2b8b  exceptions-0.10.12/tests/Tests.hs
+formatted       421394df9111  fay-0.24.2.0/Setup.hs
+formatted       ec9eeba0c6a1  fay-0.24.2.0/examples/CodeWorld.hs
+formatted       7cf91d63601f  fay-0.24.2.0/examples/CodeWorldMain.hs
+formatted       d34203032896  fay-0.24.2.0/examples/Cont.hs
+formatted       b5088332842e  fay-0.24.2.0/examples/D3TreeSample.hs
+formatted       45fa087c720a  fay-0.24.2.0/examples/FayFromJs.hs
+formatted       d4be2511948d  fay-0.24.2.0/examples/Separated.hs
+formatted       73cbc6340843  fay-0.24.2.0/examples/X.hs
+formatted       89a1e9058dc3  fay-0.24.2.0/examples/Y.hs
+formatted       55d7b8cf115f  fay-0.24.2.0/examples/alert.hs
+formatted       3563971c6bdb  fay-0.24.2.0/examples/calc.hs
+formatted       2d60fb67f2de  fay-0.24.2.0/examples/canvaswater.hs
+formatted       97df12f5dfa2  fay-0.24.2.0/examples/console.hs
+formatted       7608e18ca01c  fay-0.24.2.0/examples/data.hs
+formatted       57124dd1aa0e  fay-0.24.2.0/examples/dom.hs
+formatted       a017f7092550  fay-0.24.2.0/examples/jquery.hs
+formatted       19887dc6f70a  fay-0.24.2.0/examples/json.hs
+formatted       db1cb782ccc3  fay-0.24.2.0/examples/node.hs
+formatted       f3df3b020033  fay-0.24.2.0/examples/nqueens.hs
+formatted       615082642614  fay-0.24.2.0/examples/obj.hs
+formatted       a197f077306c  fay-0.24.2.0/examples/oscillator.hs
+formatted       c79a44579d85  fay-0.24.2.0/examples/pat.hs
+formatted       fa732b1a5e66  fay-0.24.2.0/examples/properties.hs
+formatted       7085b02d6471  fay-0.24.2.0/examples/ref.hs
+formatted       55fe2b9f624f  fay-0.24.2.0/examples/showExamples.hs
+formatted       884b6fbdaadc  fay-0.24.2.0/examples/tailrecursive.hs
+formatted       c2d5e370d7e2  fay-0.24.2.0/src/Fay.hs
+formatted       9a042d6a7ba9  fay-0.24.2.0/src/Fay/Compiler.hs
+formatted       727b9da5eeda  fay-0.24.2.0/src/Fay/Compiler/Decl.hs
+formatted       d4575500ee48  fay-0.24.2.0/src/Fay/Compiler/Defaults.hs
+formatted       891834d5aec2  fay-0.24.2.0/src/Fay/Compiler/Desugar.hs
+formatted       570ca805808c  fay-0.24.2.0/src/Fay/Compiler/Desugar/Name.hs
+formatted       fe53147a7e33  fay-0.24.2.0/src/Fay/Compiler/Desugar/Types.hs
+formatted       cd957c0884e8  fay-0.24.2.0/src/Fay/Compiler/Exp.hs
+formatted       cfc0f0f46b43  fay-0.24.2.0/src/Fay/Compiler/FFI.hs
+formatted       69fd6dd80a66  fay-0.24.2.0/src/Fay/Compiler/GADT.hs
+formatted       bcb9d437929e  fay-0.24.2.0/src/Fay/Compiler/Import.hs
+formatted       766c34ce53b0  fay-0.24.2.0/src/Fay/Compiler/InitialPass.hs
+formatted       c3937a070cdf  fay-0.24.2.0/src/Fay/Compiler/Misc.hs
+formatted       bce0992d570d  fay-0.24.2.0/src/Fay/Compiler/ModuleT.hs
+formatted       2fdd19da261b  fay-0.24.2.0/src/Fay/Compiler/Optimizer.hs
+formatted       ac32749d90ec  fay-0.24.2.0/src/Fay/Compiler/Packages.hs
+formatted       1798f425b036  fay-0.24.2.0/src/Fay/Compiler/Parse.hs
+formatted       46f343ccba7b  fay-0.24.2.0/src/Fay/Compiler/Pattern.hs
+formatted       7cca783f3fcd  fay-0.24.2.0/src/Fay/Compiler/Prelude.hs
+formatted       0fe3943a05fb  fay-0.24.2.0/src/Fay/Compiler/PrimOp.hs
+formatted       a55524f4b7fa  fay-0.24.2.0/src/Fay/Compiler/Print.hs
+formatted       da23ccb55970  fay-0.24.2.0/src/Fay/Compiler/QName.hs
+formatted       9fe2fbd3e360  fay-0.24.2.0/src/Fay/Compiler/State.hs
+formatted       fb1831a445cc  fay-0.24.2.0/src/Fay/Compiler/Typecheck.hs
+formatted       631cbd5cb454  fay-0.24.2.0/src/Fay/Config.hs
+formatted       15cd1e849d0e  fay-0.24.2.0/src/Fay/Convert.hs
+formatted       80d46083d774  fay-0.24.2.0/src/Fay/Exts.hs
+formatted       7ec6f093e0ca  fay-0.24.2.0/src/Fay/Exts/NoAnnotation.hs
+formatted       bd1f234d96c0  fay-0.24.2.0/src/Fay/Exts/Scoped.hs
+formatted       f7856f337bee  fay-0.24.2.0/src/Fay/FFI.hs
+formatted       7dd89da8a466  fay-0.24.2.0/src/Fay/Runtime.hs
+formatted       0ac5069cbf76  fay-0.24.2.0/src/Fay/Types.hs
+formatted       6654772d79a6  fay-0.24.2.0/src/Fay/Types/CompileError.hs
+formatted       4f7fdfee2a8f  fay-0.24.2.0/src/Fay/Types/CompileResult.hs
+formatted       f21a75633d68  fay-0.24.2.0/src/Fay/Types/FFI.hs
+formatted       16c62b3f8086  fay-0.24.2.0/src/Fay/Types/Js.hs
+formatted       1165cbb859cc  fay-0.24.2.0/src/Fay/Types/ModulePath.hs
+formatted       ed80698a7cd1  fay-0.24.2.0/src/Fay/Types/Printer.hs
+formatted       6593766b1d2e  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names.hs
+formatted       bfea4a051d5e  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Annotated.hs
+formatted       effa30f29551  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Exports.hs
+formatted       2c705aaf3085  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/GetBound.hs
+formatted       74e293075d13  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/GlobalSymbolTable.hs
+formatted       13662130820d  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/GlobalSymbolTable.hs-boot
+formatted       3346bfa56c31  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Imports.hs
+formatted       bda66c725ce4  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/LocalSymbolTable.hs
+formatted       c6c4acea37c3  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/ModuleSymbols.hs
+formatted       76ce45f69410  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Open/Base.hs
+formatted       b12db8ba5ce9  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Open/Derived.hs
+formatted       325536c28de7  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Open/Instances.hs
+formatted       deb2b656a1ad  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/RecordWildcards.hs
+formatted       80dec7fda3fb  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Recursive.hs
+formatted       006f3c334ab0  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/ScopeUtils.hs
+formatted       3dd4a51f2cc5  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/SyntaxUtils.hs
+formatted       2b1329bafe82  fay-0.24.2.0/src/haskell-names/Language/Haskell/Names/Types.hs
+formatted       a185a50b6e6a  fay-0.24.2.0/src/main/Main.hs
+formatted       b9c869a29067  fay-0.24.2.0/src/tests/Test/CommandLine.hs
+formatted       68c640b352e9  fay-0.24.2.0/src/tests/Test/Compile.hs
+formatted       6fdbf9951c76  fay-0.24.2.0/src/tests/Test/Convert.hs
+formatted       89d594b07db0  fay-0.24.2.0/src/tests/Test/Desugar.hs
+formatted       a3937c4d8bef  fay-0.24.2.0/src/tests/Test/Util.hs
+formatted       63cce78f9492  fay-0.24.2.0/src/tests/Tests.hs
+formatted       8114602da4c3  fay-0.24.2.0/tests/AllBaseModules.hs
+formatted       e78d25c5a73d  fay-0.24.2.0/tests/AutomaticList.hs
+formatted       779c72fbdb74  fay-0.24.2.0/tests/Bool.hs
+formatted       85b587f06e29  fay-0.24.2.0/tests/CPP.hs
+formatted       61e542a01350  fay-0.24.2.0/tests/Char.hs
+formatted       7badee2f20a7  fay-0.24.2.0/tests/Compile/CPPMultiLineStrings.hs
+formatted       a5ace073f2a3  fay-0.24.2.0/tests/Compile/CPPTypecheck.hs
+formatted       66d008a435ce  fay-0.24.2.0/tests/Compile/EnumChar.hs
+formatted       79a705007362  fay-0.24.2.0/tests/Compile/ImportRecords.hs
+formatted       ad7ecf9ee4fe  fay-0.24.2.0/tests/Compile/Records.hs
+formatted       9817e9c801a0  fay-0.24.2.0/tests/Compile/StrictWrapper.hs
+formatted       3f10c446d77e  fay-0.24.2.0/tests/Compile/pretty.hs
+formatted       3f10c446d77e  fay-0.24.2.0/tests/Compile/prettyOperators.hs
+formatted       3f10c446d77e  fay-0.24.2.0/tests/Compile/prettyThunks.hs
+formatted       7e5ba819c89a  fay-0.24.2.0/tests/Defined.hs
+formatted       933b5c75c95d  fay-0.24.2.0/tests/DesugarFFI.hs
+formatted       247bf5cdbba0  fay-0.24.2.0/tests/DoLet2.hs
+formatted       8e59e23cdef2  fay-0.24.2.0/tests/DoLet3.hs
+formatted       8506e48ae167  fay-0.24.2.0/tests/Double.hs
+formatted       555ed6125da8  fay-0.24.2.0/tests/Double2.hs
+formatted       940c2db0f038  fay-0.24.2.0/tests/Double3.hs
+formatted       ce51517b312e  fay-0.24.2.0/tests/Double4.hs
+formatted       e7d8f2571cb1  fay-0.24.2.0/tests/Either.hs
+formatted       f00c11dbed60  fay-0.24.2.0/tests/EmptyDataDeclArray.hs
+formatted       7c2bc66a86e6  fay-0.24.2.0/tests/Eq.hs
+formatted       25d8fd9d5d5a  fay-0.24.2.0/tests/ExportEThingAll.hs
+formatted       bea5851db3b4  fay-0.24.2.0/tests/ExportEThingAll_Export.hs
+formatted       b86ba0189dff  fay-0.24.2.0/tests/ExportEThingWith.hs
+formatted       6c639783702a  fay-0.24.2.0/tests/ExportList.hs
+formatted       c70d5951fda8  fay-0.24.2.0/tests/ExportList_A.hs
+formatted       eb351b1cfd3e  fay-0.24.2.0/tests/ExportList_B.hs
+formatted       4736c70718a7  fay-0.24.2.0/tests/ExportList_C.hs
+formatted       41c7f9eb857a  fay-0.24.2.0/tests/ExportList_D.hs
+formatted       b42dad751766  fay-0.24.2.0/tests/ExportQualified_Export.hs
+formatted       e08dc6f4e84b  fay-0.24.2.0/tests/ExportQualified_Import.hs
+formatted       e9617631d536  fay-0.24.2.0/tests/ExportType.hs
+formatted       ba54245a67ef  fay-0.24.2.0/tests/Floating.hs
+formatted       02165869295d  fay-0.24.2.0/tests/FromString.hs
+formatted       fc43945a5277  fay-0.24.2.0/tests/FromString/Dep.hs
+formatted       09e516e107ad  fay-0.24.2.0/tests/FromString/DepDep.hs
+formatted       a8e31b7f9068  fay-0.24.2.0/tests/FromString/FayText.hs
+formatted       3da43a919ebc  fay-0.24.2.0/tests/GADTs_without_records.hs
+formatted       102949714efb  fay-0.24.2.0/tests/GuardWhere.hs
+formatted       4c6803c7f169  fay-0.24.2.0/tests/HidePreludeImport.hs
+formatted       a1408d450caf  fay-0.24.2.0/tests/HidePreludeImport_Import.hs
+formatted       fa5b4cc76a44  fay-0.24.2.0/tests/Hierarchical/Export.hs
+formatted       102307416bcd  fay-0.24.2.0/tests/Hierarchical/RecordDefined.hs
+formatted       920c9acca3b5  fay-0.24.2.0/tests/HierarchicalImport.hs
+formatted       def230ba708f  fay-0.24.2.0/tests/ImplicitPrelude.hs
+formatted       c71809dd7876  fay-0.24.2.0/tests/ImportHiding.hs
+formatted       75f8ddda7df8  fay-0.24.2.0/tests/ImportIThingAll.hs
+formatted       b4c50a46461c  fay-0.24.2.0/tests/ImportList.hs
+formatted       87c5a69d1b76  fay-0.24.2.0/tests/ImportList1/A.hs
+formatted       a25b5782f91c  fay-0.24.2.0/tests/ImportList1/B.hs
+formatted       a9003116e1c9  fay-0.24.2.0/tests/ImportList1/C.hs
+formatted       b5cb6de55974  fay-0.24.2.0/tests/ImportListType.hs
+formatted       69bb47d76aef  fay-0.24.2.0/tests/ImportType.hs
+formatted       440bc41f78be  fay-0.24.2.0/tests/ImportType2.hs
+formatted       5ff8e931a567  fay-0.24.2.0/tests/ImportType2I/A.hs
+formatted       e15dbb9a2720  fay-0.24.2.0/tests/ImportType2I/B.hs
+formatted       9d4bcec16bd7  fay-0.24.2.0/tests/Integer.hs
+formatted       ed2b3650244f  fay-0.24.2.0/tests/Integral.hs
+formatted       dadef2b7cb03  fay-0.24.2.0/tests/Issue215/B.hs
+formatted       eeedb44973d0  fay-0.24.2.0/tests/Issue215A.hs
+formatted       b0a19078b259  fay-0.24.2.0/tests/Js2FayFunc.hs
+formatted       8592007d3db3  fay-0.24.2.0/tests/JsFunctionPassing.hs
+formatted       009642e56a6b  fay-0.24.2.0/tests/LambdaCase.hs
+formatted       47266926fa39  fay-0.24.2.0/tests/LazyOperators.hs
+formatted       ee291ee7e00e  fay-0.24.2.0/tests/List.hs
+formatted       c8021ca9ec3f  fay-0.24.2.0/tests/List2.hs
+formatted       a93b0ff4bcc5  fay-0.24.2.0/tests/ListEq.hs
+formatted       c3daafcf2461  fay-0.24.2.0/tests/MainThunk.hs
+formatted       350d9831d6f8  fay-0.24.2.0/tests/ModuleReExport/ExportsIdentifier.hs
+formatted       25cef8780cae  fay-0.24.2.0/tests/ModuleReExport/ExportsModule.hs
+formatted       9dfef0f7c129  fay-0.24.2.0/tests/ModuleReExports.hs
+formatted       c082d387d888  fay-0.24.2.0/tests/ModuleRecordClash.hs
+formatted       997782df97ba  fay-0.24.2.0/tests/ModuleRecordClash/R.hs
+formatted       53ea9782c8a3  fay-0.24.2.0/tests/ModuleRecordClash2.hs
+formatted       3f2cf09e81b7  fay-0.24.2.0/tests/ModuleRecordClash2_Hello.hs
+formatted       1a83fbebaaf8  fay-0.24.2.0/tests/Monad.hs
+formatted       b3f89d2ed36e  fay-0.24.2.0/tests/Monad2.hs
+formatted       0c9780229637  fay-0.24.2.0/tests/MultiWayIf.hs
+formatted       0e3845c048a2  fay-0.24.2.0/tests/NestedImporting.hs
+formatted       4b3a670722e0  fay-0.24.2.0/tests/NestedImporting/A.hs
+formatted       2a092a0c1f4c  fay-0.24.2.0/tests/NestedImporting2.hs
+formatted       19cbbffb80bc  fay-0.24.2.0/tests/NestedImporting2/A.hs
+formatted       17f211243d54  fay-0.24.2.0/tests/NewtypeImport_Export.hs
+formatted       34ed28dbd073  fay-0.24.2.0/tests/NewtypeImport_Import.hs
+formatted       ad07b3a0d755  fay-0.24.2.0/tests/Nullable.hs
+formatted       f01c35cc494d  fay-0.24.2.0/tests/Num.hs
+formatted       75ea0e91fb04  fay-0.24.2.0/tests/Ord.hs
+formatted       66e4369c7bda  fay-0.24.2.0/tests/PrefixOpPat.hs
+formatted       129023442df5  fay-0.24.2.0/tests/QualifiedImport.hs
+formatted       3298b9301836  fay-0.24.2.0/tests/QualifiedImport/X.hs
+formatted       391559feaa6f  fay-0.24.2.0/tests/QualifiedImport/Y.hs
+formatted       5a73215af899  fay-0.24.2.0/tests/Ratio.hs
+formatted       577c81fcbe39  fay-0.24.2.0/tests/ReExport1.hs
+formatted       97f273a7040d  fay-0.24.2.0/tests/ReExport2.hs
+formatted       9fb50fe15789  fay-0.24.2.0/tests/ReExport3.hs
+formatted       8b077416b2a2  fay-0.24.2.0/tests/ReExportGlobally.hs
+formatted       4b9cbdde2416  fay-0.24.2.0/tests/ReExportGlobally/A.hs
+formatted       b21d1616e152  fay-0.24.2.0/tests/ReExportGloballyExplicit.hs
+formatted       9315bbd88930  fay-0.24.2.0/tests/RealFrac.hs
+formatted       1a6a33c6ac9d  fay-0.24.2.0/tests/RecCon.hs
+formatted       986c34c1b565  fay-0.24.2.0/tests/RecDecl.hs
+formatted       bb55ab6798d0  fay-0.24.2.0/tests/RecordImport2_Export1.hs
+formatted       938433aeb8c8  fay-0.24.2.0/tests/RecordImport2_Export2.hs
+formatted       c044e70c8101  fay-0.24.2.0/tests/RecordImport2_Import.hs
+formatted       9ed1c0f11b4a  fay-0.24.2.0/tests/RecordImport_Export.hs
+formatted       7436f43b45cc  fay-0.24.2.0/tests/RecordImport_Import.hs
+formatted       227a87a9ae8b  fay-0.24.2.0/tests/Sink.hs
+formatted       0d52d0cd7e4b  fay-0.24.2.0/tests/SkipLetTypes.hs
+formatted       79a7eb241171  fay-0.24.2.0/tests/SkipWhereTypes.hs
+formatted       b2f90faa6d96  fay-0.24.2.0/tests/StringForcing.hs
+formatted       78f704c770c1  fay-0.24.2.0/tests/Strings.hs
+formatted       b23a6f00c551  fay-0.24.2.0/tests/T190.hs
+formatted       692f0dae5fb8  fay-0.24.2.0/tests/T190_A.hs
+formatted       8e73afc88ae8  fay-0.24.2.0/tests/T190_B.hs
+formatted       e68acdaf2dfe  fay-0.24.2.0/tests/T190_C.hs
+formatted       7bd1c4fd8478  fay-0.24.2.0/tests/TextOrd.hs
+formatted       f47544b81667  fay-0.24.2.0/tests/Trace.hs
+formatted       c578ce2acbf6  fay-0.24.2.0/tests/TupleCalls.hs
+formatted       d35a3f3c7245  fay-0.24.2.0/tests/TyVarSerialization.hs
+formatted       7d85fb13bd93  fay-0.24.2.0/tests/Var.hs
+formatted       7a2ffc1587f5  fay-0.24.2.0/tests/VarPtr.hs
+formatted       5bcb67338113  fay-0.24.2.0/tests/WhenUnlessRecursion.hs
+formatted       c767b8778a1d  fay-0.24.2.0/tests/asPatternMatch.hs
+formatted       aa05f8bd2bf0  fay-0.24.2.0/tests/automatic.hs
+formatted       83d1d385ae83  fay-0.24.2.0/tests/baseFixities.hs
+formatted       ce58f47bac04  fay-0.24.2.0/tests/basicFunctions.hs
+formatted       33b5a5453ff8  fay-0.24.2.0/tests/case.hs
+formatted       a51f036ac082  fay-0.24.2.0/tests/case2.hs
+formatted       4a4542652251  fay-0.24.2.0/tests/case3.hs
+formatted       e563419849e3  fay-0.24.2.0/tests/caseList.hs
+formatted       6f41ab7df8c9  fay-0.24.2.0/tests/caseWildcard.hs
+formatted       9437474fc565  fay-0.24.2.0/tests/circular.hs
+formatted       3ac360393116  fay-0.24.2.0/tests/curry.hs
+formatted       9bbe8cd8c749  fay-0.24.2.0/tests/cycle.hs
+formatted       d07827315b77  fay-0.24.2.0/tests/do.hs
+formatted       262e4e61e6b8  fay-0.24.2.0/tests/doAssingPatternMatch.hs
+formatted       ad5b707f664a  fay-0.24.2.0/tests/doBindAssign.hs
+formatted       e41cbdd7656a  fay-0.24.2.0/tests/doLet.hs
+formatted       9f8a8d10c1d3  fay-0.24.2.0/tests/emptyMain.hs
+formatted       380eff7dedb9  fay-0.24.2.0/tests/enumFrom.hs
+formatted       05834fe58432  fay-0.24.2.0/tests/error.hs
+formatted       f563902672cb  fay-0.24.2.0/tests/ffiExpr.hs
+formatted       73697f0c099c  fay-0.24.2.0/tests/ffimunging.hs
+formatted       dc67c504a097  fay-0.24.2.0/tests/fix.hs
+formatted       9267690ec8d2  fay-0.24.2.0/tests/fromInteger.hs
+formatted       73a7dce83bdd  fay-0.24.2.0/tests/fromIntegral.hs
+formatted       860a7aed8af3  fay-0.24.2.0/tests/guards.hs
+formatted       8ff7b7e5d80d  fay-0.24.2.0/tests/infixDataConst.hs
+formatted       99c963974ca0  fay-0.24.2.0/tests/ints.hs
+formatted       9ec2af24577b  fay-0.24.2.0/tests/linesAndWords.hs
+formatted       36a10a974013  fay-0.24.2.0/tests/listComprehensions.hs
+formatted       392b79e97d1d  fay-0.24.2.0/tests/listlen.hs
+formatted       9d98dc262b39  fay-0.24.2.0/tests/mutableReference.hs
+formatted       f983711e6f6b  fay-0.24.2.0/tests/nameGen.hs
+formatted       00499901b441  fay-0.24.2.0/tests/namedFieldPuns.hs
+formatted       68fcd666b331  fay-0.24.2.0/tests/negation.hs
+formatted       4c9cf35b4aee  fay-0.24.2.0/tests/newtype.hs
+formatted       36cf37d7cd68  fay-0.24.2.0/tests/newtypeIndirectApp.hs
+formatted       a587812e6602  fay-0.24.2.0/tests/numTheory.hs
+formatted       40bd883716b3  fay-0.24.2.0/tests/nums.hs
+formatted       c27df9670630  fay-0.24.2.0/tests/pats.hs
+formatted       b317cbb85f97  fay-0.24.2.0/tests/patternGuards.hs
+formatted       353e37b5a857  fay-0.24.2.0/tests/patternMatchFail.hs
+formatted       0e69935e45c9  fay-0.24.2.0/tests/patternMatchLet.hs
+formatted       f963663ae2cf  fay-0.24.2.0/tests/patternMatchingTuples.hs
+formatted       41871bce5735  fay-0.24.2.0/tests/recordFunctionPatternMatch.hs
+formatted       6010444abc75  fay-0.24.2.0/tests/recordPatternMatch.hs
+formatted       0dda5fc8df9d  fay-0.24.2.0/tests/recordPatternMatch2.hs
+formatted       63b9091a92a2  fay-0.24.2.0/tests/recordUseBeforeDefine.hs
+formatted       6000e445e696  fay-0.24.2.0/tests/recordWildCards.hs
+formatted       63a19682d7d9  fay-0.24.2.0/tests/records.hs
+formatted       a371f7d8d704  fay-0.24.2.0/tests/recursive.hs
+formatted       9797f8836f3b  fay-0.24.2.0/tests/reservedWords.hs
+formatted       3bdaf5d65328  fay-0.24.2.0/tests/sections.hs
+formatted       19e9c7c69db9  fay-0.24.2.0/tests/seq-fake.hs
+formatted       2ac1dc3c2516  fay-0.24.2.0/tests/seq.hs
+formatted       add7affcb8d6  fay-0.24.2.0/tests/serialization.hs
+formatted       e76961e79030  fay-0.24.2.0/tests/succPred.hs
+formatted       461d16ef4da1  fay-0.24.2.0/tests/tailRecursion.hs
+formatted       b29bc268b713  fay-0.24.2.0/tests/then.hs
+formatted       7b2a525c6d17  fay-0.24.2.0/tests/tupleCon.hs
+formatted       71a59816933e  fay-0.24.2.0/tests/tupleSec.hs
+formatted       c864de89b243  fay-0.24.2.0/tests/unit.hs
+formatted       cfb7dd15a745  fay-0.24.2.0/tests/utf8.hs
+formatted       68905bc32429  fay-0.24.2.0/tests/where.hs
+formatted       6ea0b301c8c4  fay-0.24.2.0/tests/whereBind.hs
+formatted       62b7dd25b5c9  fay-0.24.2.0/tests/whereBind2.hs
+formatted       dd52de0acf94  fay-0.24.2.0/tests/whereBind3.hs
+formatted       b3d258de0403  free-5.2/examples/PerfTH.hs
+formatted       24418bc38fac  free-5.2/examples/RetryTH.hs
+formatted       7641743d0c1f  free-5.2/examples/ValidationForm.hs
+formatted       9fcd1a6b4714  free-5.2/src/Control/Alternative/Free.hs
+formatted       6cdf81c21164  free-5.2/src/Control/Alternative/Free/Final.hs
+formatted       8b307bae43e5  free-5.2/src/Control/Applicative/Free.hs
+formatted       1593e637f12f  free-5.2/src/Control/Applicative/Free/Fast.hs
+formatted       f23f3f214be8  free-5.2/src/Control/Applicative/Free/Final.hs
+formatted       51e39ca09f78  free-5.2/src/Control/Applicative/Trans/Free.hs
+formatted       dd9069083e98  free-5.2/src/Control/Comonad/Cofree.hs
+formatted       9b0f6d5a4082  free-5.2/src/Control/Comonad/Cofree/Class.hs
+formatted       866a464a9f8d  free-5.2/src/Control/Comonad/Trans/Cofree.hs
+formatted       19144d43e9b1  free-5.2/src/Control/Comonad/Trans/Coiter.hs
+formatted       f6734128b306  free-5.2/src/Control/Monad/Free.hs
+formatted       92f9ffbc940f  free-5.2/src/Control/Monad/Free/Ap.hs
+formatted       93c96d44b956  free-5.2/src/Control/Monad/Free/Church.hs
+formatted       39bf4e33f6e2  free-5.2/src/Control/Monad/Free/Class.hs
+formatted       d6318fb07edb  free-5.2/src/Control/Monad/Free/TH.hs
+formatted       a51821c826a6  free-5.2/src/Control/Monad/Trans/Free.hs
+formatted       b9554e2bf6b2  free-5.2/src/Control/Monad/Trans/Free/Ap.hs
+formatted       91e1c571caac  free-5.2/src/Control/Monad/Trans/Free/Church.hs
+formatted       d881a98c4458  free-5.2/src/Control/Monad/Trans/Iter.hs
+formatted       e865ae48f11b  hakyll-4.17.0.0/Setup.hs
+formatted       0a3f98709f72  hakyll-4.17.0.0/data/example/site.hs
+formatted       116aaa72d476  hakyll-4.17.0.0/lib/Data/List/Extended.hs
+formatted       f638cd45236f  hakyll-4.17.0.0/lib/Data/Yaml/Extended.hs
+formatted       0fcae45b2ba9  hakyll-4.17.0.0/lib/Hakyll.hs
+formatted       26eb24c40060  hakyll-4.17.0.0/lib/Hakyll/Check.hs
+formatted       d16c4d72c9d4  hakyll-4.17.0.0/lib/Hakyll/Commands.hs
+formatted       dd7499d469a5  hakyll-4.17.0.0/lib/Hakyll/Core/Compiler.hs
+formatted       e9f89f339007  hakyll-4.17.0.0/lib/Hakyll/Core/Compiler/Internal.hs
+formatted       c7cfc530bd2a  hakyll-4.17.0.0/lib/Hakyll/Core/Compiler/Require.hs
+formatted       10bda89cbe6d  hakyll-4.17.0.0/lib/Hakyll/Core/Configuration.hs
+formatted       9ea9908950b2  hakyll-4.17.0.0/lib/Hakyll/Core/Dependencies.hs
+formatted       558f0d294954  hakyll-4.17.0.0/lib/Hakyll/Core/File.hs
+formatted       c3cd48ba4d35  hakyll-4.17.0.0/lib/Hakyll/Core/Identifier.hs
+formatted       02b568af6a14  hakyll-4.17.0.0/lib/Hakyll/Core/Identifier/Pattern.hs
+formatted       4da1703227de  hakyll-4.17.0.0/lib/Hakyll/Core/Identifier/Pattern/Internal.hs
+formatted       25bce39252d0  hakyll-4.17.0.0/lib/Hakyll/Core/Item.hs
+formatted       ea66b0f47f92  hakyll-4.17.0.0/lib/Hakyll/Core/Item/SomeItem.hs
+formatted       8d06795590b2  hakyll-4.17.0.0/lib/Hakyll/Core/Logger.hs
+formatted       06876ce9052c  hakyll-4.17.0.0/lib/Hakyll/Core/Metadata.hs
+formatted       6e39852547dc  hakyll-4.17.0.0/lib/Hakyll/Core/Provider.hs
+formatted       1de546a3cffb  hakyll-4.17.0.0/lib/Hakyll/Core/Provider/Internal.hs
+formatted       4380c86a9504  hakyll-4.17.0.0/lib/Hakyll/Core/Provider/Metadata.hs
+formatted       0cfbeb9b73ba  hakyll-4.17.0.0/lib/Hakyll/Core/Provider/MetadataCache.hs
+formatted       b66bbdf4a200  hakyll-4.17.0.0/lib/Hakyll/Core/Routes.hs
+formatted       1be73b780ecd  hakyll-4.17.0.0/lib/Hakyll/Core/Rules.hs
+formatted       a3472736a528  hakyll-4.17.0.0/lib/Hakyll/Core/Rules/Internal.hs
+formatted       f97472fe3373  hakyll-4.17.0.0/lib/Hakyll/Core/Runtime.hs
+formatted       df1c2bd7e8fb  hakyll-4.17.0.0/lib/Hakyll/Core/Store.hs
+formatted       69e4cf2a975a  hakyll-4.17.0.0/lib/Hakyll/Core/UnixFilter.hs
+formatted       acbb971a63bc  hakyll-4.17.0.0/lib/Hakyll/Core/Util/File.hs
+formatted       5cef0dfbc5f6  hakyll-4.17.0.0/lib/Hakyll/Core/Util/Parser.hs
+formatted       3f21bbf445b2  hakyll-4.17.0.0/lib/Hakyll/Core/Util/String.hs
+formatted       a3abc0522132  hakyll-4.17.0.0/lib/Hakyll/Core/Writable.hs
+formatted       3c8ce7fbc317  hakyll-4.17.0.0/lib/Hakyll/Main.hs
+formatted       6ed09594e890  hakyll-4.17.0.0/lib/Hakyll/Preview/Poll.hs
+formatted       d363dc04f1a7  hakyll-4.17.0.0/lib/Hakyll/Preview/Server.hs
+formatted       90f95798e3c7  hakyll-4.17.0.0/lib/Hakyll/Web/CompressCss.hs
+formatted       2fc0d8fdc6f4  hakyll-4.17.0.0/lib/Hakyll/Web/Feed.hs
+formatted       e50bf6641fdd  hakyll-4.17.0.0/lib/Hakyll/Web/Html.hs
+formatted       2c80bbb22db0  hakyll-4.17.0.0/lib/Hakyll/Web/Html/RelativizeUrls.hs
+formatted       0923e680c5d2  hakyll-4.17.0.0/lib/Hakyll/Web/Meta/JSONLD.hs
+formatted       a3dbe80d0b45  hakyll-4.17.0.0/lib/Hakyll/Web/Meta/OpenGraph.hs
+formatted       a3b6503b2c4a  hakyll-4.17.0.0/lib/Hakyll/Web/Meta/TwitterCard.hs
+formatted       47b99b2ffc3a  hakyll-4.17.0.0/lib/Hakyll/Web/Paginate.hs
+formatted       54df60c90d30  hakyll-4.17.0.0/lib/Hakyll/Web/Pandoc.hs
+formatted       c168dc9fdb41  hakyll-4.17.0.0/lib/Hakyll/Web/Pandoc/Biblio.hs
+formatted       63c711e3ed6f  hakyll-4.17.0.0/lib/Hakyll/Web/Pandoc/Binary.hs
+formatted       413e30365505  hakyll-4.17.0.0/lib/Hakyll/Web/Pandoc/FileType.hs
+formatted       d77258d3d120  hakyll-4.17.0.0/lib/Hakyll/Web/Redirect.hs
+formatted       89e848715da3  hakyll-4.17.0.0/lib/Hakyll/Web/Tags.hs
+formatted       0e9947c1a4f2  hakyll-4.17.0.0/lib/Hakyll/Web/Template.hs
+formatted       61c4714e9090  hakyll-4.17.0.0/lib/Hakyll/Web/Template/Context.hs
+formatted       46295fe0766a  hakyll-4.17.0.0/lib/Hakyll/Web/Template/Internal.hs
+formatted       1ba12838107a  hakyll-4.17.0.0/lib/Hakyll/Web/Template/Internal/Element.hs
+formatted       7741b1b5c63c  hakyll-4.17.0.0/lib/Hakyll/Web/Template/Internal/Trim.hs
+formatted       270fe0160883  hakyll-4.17.0.0/lib/Hakyll/Web/Template/List.hs
+formatted       73b58eb8d063  hakyll-4.17.0.0/src/Init.hs
+formatted       a98f565dc3bd  hakyll-4.17.0.0/tests/Hakyll/Core/Dependencies/Tests.hs
+formatted       178a4cbe186e  hakyll-4.17.0.0/tests/Hakyll/Core/Identifier/Tests.hs
+formatted       f8af7a73d467  hakyll-4.17.0.0/tests/Hakyll/Core/Provider/Metadata/Tests.hs
+formatted       7741f8e19a21  hakyll-4.17.0.0/tests/Hakyll/Core/Provider/Tests.hs
+formatted       0a6fac8a3fe5  hakyll-4.17.0.0/tests/Hakyll/Core/Routes/Tests.hs
+formatted       db910a6e5dc7  hakyll-4.17.0.0/tests/Hakyll/Core/Rules/Tests.hs
+formatted       82ed53ac9567  hakyll-4.17.0.0/tests/Hakyll/Core/Runtime/Tests.hs
+formatted       3a05a7e0bc33  hakyll-4.17.0.0/tests/Hakyll/Core/Store/Tests.hs
+formatted       7d940c89cef0  hakyll-4.17.0.0/tests/Hakyll/Core/UnixFilter/Tests.hs
+formatted       e736c3a104ec  hakyll-4.17.0.0/tests/Hakyll/Core/Util/String/Tests.hs
+formatted       0bb0c4e70b5a  hakyll-4.17.0.0/tests/Hakyll/Web/CompressCss/Tests.hs
+formatted       a15554f5d248  hakyll-4.17.0.0/tests/Hakyll/Web/Feed/Tests.hs
+formatted       e35e1039078b  hakyll-4.17.0.0/tests/Hakyll/Web/Html/RelativizeUrls/Tests.hs
+formatted       4744c78df9c5  hakyll-4.17.0.0/tests/Hakyll/Web/Html/Tests.hs
+formatted       c4bc526fff1a  hakyll-4.17.0.0/tests/Hakyll/Web/Pandoc/Biblio/Tests.hs
+formatted       6ca61c42770e  hakyll-4.17.0.0/tests/Hakyll/Web/Pandoc/FileType/Tests.hs
+formatted       84bc8e02e810  hakyll-4.17.0.0/tests/Hakyll/Web/Tags/Tests.hs
+formatted       22cdf7a972b8  hakyll-4.17.0.0/tests/Hakyll/Web/Template/Context/Tests.hs
+formatted       713b01148048  hakyll-4.17.0.0/tests/Hakyll/Web/Template/Tests.hs
+formatted       7638b562c2be  hakyll-4.17.0.0/tests/TestSuite.hs
+formatted       d0e8ca390798  hakyll-4.17.0.0/tests/TestSuite/Util.hs
+formatted       66153c16e099  hakyll-4.17.0.0/web/site.hs
+formatted       9226007b6541  hashable-1.5.1.0/Setup.hs
+formatted       ca97ac3a2690  hashable-1.5.1.0/examples/Main.hs
+formatted       eeae7da4f236  hashable-1.5.1.0/src/Data/Hashable.hs
+declined        -             hashable-1.5.1.0/src/Data/Hashable/Class.hs
+formatted       63527ee9cd6b  hashable-1.5.1.0/src/Data/Hashable/FFI.hs
+formatted       d2be5b809f2a  hashable-1.5.1.0/src/Data/Hashable/Generic.hs
+formatted       d0ab998f02db  hashable-1.5.1.0/src/Data/Hashable/Generic/Instances.hs
+formatted       c9c87bb00bc0  hashable-1.5.1.0/src/Data/Hashable/Imports.hs
+formatted       e6b4c010a36d  hashable-1.5.1.0/src/Data/Hashable/Lifted.hs
+formatted       710bda251742  hashable-1.5.1.0/src/Data/Hashable/LowLevel.hs
+formatted       228c88ef0843  hashable-1.5.1.0/src/Data/Hashable/Mix.hs
+formatted       bd7108c77ca4  hashable-1.5.1.0/src/Data/Hashable/XXH3.hs
+formatted       f74f5b618f9a  hashable-1.5.1.0/tests/Main.hs
+formatted       4b0bb45c43ac  hashable-1.5.1.0/tests/Properties.hs
+broken          42af08530ac7  hashable-1.5.1.0/tests/Regress.hs
+formatted       468c72120829  hashable-1.5.1.0/tests/xxhash-tests.hs
+formatted       867a035875ee  haxl-2.5.1.1/Haxl/Core.hs
+formatted       d1219c0fe211  haxl-2.5.1.1/Haxl/Core/CallGraph.hs
+formatted       0ae77138c17c  haxl-2.5.1.1/Haxl/Core/DataCache.hs
+formatted       87d5268c5c21  haxl-2.5.1.1/Haxl/Core/DataSource.hs
+formatted       5b1c04eff76f  haxl-2.5.1.1/Haxl/Core/Exception.hs
+formatted       d831d20c5b60  haxl-2.5.1.1/Haxl/Core/Fetch.hs
+formatted       b4afaa8d717d  haxl-2.5.1.1/Haxl/Core/Flags.hs
+formatted       05bc0ffa5edc  haxl-2.5.1.1/Haxl/Core/Memo.hs
+formatted       8dde76ebd719  haxl-2.5.1.1/Haxl/Core/Monad.hs
+formatted       59de6a1f9ba8  haxl-2.5.1.1/Haxl/Core/Parallel.hs
+formatted       0c9d4b9d05db  haxl-2.5.1.1/Haxl/Core/Profile.hs
+formatted       72749066756e  haxl-2.5.1.1/Haxl/Core/RequestStore.hs
+formatted       5a7f12165a3c  haxl-2.5.1.1/Haxl/Core/Run.hs
+formatted       a8e73c380c33  haxl-2.5.1.1/Haxl/Core/ShowP.hs
+formatted       f2cb25c4ae73  haxl-2.5.1.1/Haxl/Core/StateStore.hs
+formatted       fa6eb029c52a  haxl-2.5.1.1/Haxl/Core/Stats.hs
+formatted       bd368a5862fd  haxl-2.5.1.1/Haxl/Core/Util.hs
+formatted       4d201ce15d28  haxl-2.5.1.1/Haxl/DataSource/ConcurrentIO.hs
+formatted       cf38b55569d1  haxl-2.5.1.1/Haxl/Prelude.hs
+formatted       0bf115c25c25  haxl-2.5.1.1/Setup.hs
+formatted       5897e1a72e86  haxl-2.5.1.1/tests/AdoTests.hs
+formatted       7392cb2bf8df  haxl-2.5.1.1/tests/AllTests.hs
+formatted       29963bfcd43e  haxl-2.5.1.1/tests/BadDataSource.hs
+formatted       9869a85f8734  haxl-2.5.1.1/tests/BatchTests.hs
+formatted       a75656cc58b4  haxl-2.5.1.1/tests/Bench.hs
+formatted       6b4d75212e14  haxl-2.5.1.1/tests/CoreTests.hs
+formatted       46378c08a2d4  haxl-2.5.1.1/tests/DataCacheTest.hs
+formatted       8120f9ee1106  haxl-2.5.1.1/tests/DataSourceDispatchTests.hs
+formatted       33020c9fb8aa  haxl-2.5.1.1/tests/ExampleDataSource.hs
+formatted       fd091691f6be  haxl-2.5.1.1/tests/ExceptionStackTests.hs
+formatted       329e1c7e0fd4  haxl-2.5.1.1/tests/FullyAsyncTest.hs
+formatted       5b348a1f5fab  haxl-2.5.1.1/tests/LoadCache.hs
+formatted       4c9a496637db  haxl-2.5.1.1/tests/MemoizationTests.hs
+formatted       cd2dd7052af8  haxl-2.5.1.1/tests/MockTAO.hs
+formatted       679224c9d5e5  haxl-2.5.1.1/tests/MonadAsyncTest.hs
+formatted       08f288ec8741  haxl-2.5.1.1/tests/MonadBench.hs
+formatted       44fb28b20457  haxl-2.5.1.1/tests/OutgoneFetchesTests.hs
+formatted       f760bff6e190  haxl-2.5.1.1/tests/ParallelTests.hs
+formatted       643586a70ba2  haxl-2.5.1.1/tests/ProfileTests.hs
+formatted       478999c2d1bd  haxl-2.5.1.1/tests/SleepDataSource.hs
+formatted       23f293b1253d  haxl-2.5.1.1/tests/StatsTests.hs
+formatted       0deec7d41cb2  haxl-2.5.1.1/tests/TestBadDataSource.hs
+formatted       6270eac19e14  haxl-2.5.1.1/tests/TestExampleDataSource.hs
+formatted       33f33c2b6767  haxl-2.5.1.1/tests/TestMain.hs
+formatted       c0a01d1bb863  haxl-2.5.1.1/tests/TestTypes.hs
+formatted       0cdf14515138  haxl-2.5.1.1/tests/TestUtils.hs
+formatted       19781f6f8677  haxl-2.5.1.1/tests/WorkDataSource.hs
+formatted       b8be7bcaa06e  haxl-2.5.1.1/tests/WriteTests.hs
+formatted       39ae68a1e26c  hedgehog-1.7/src/Hedgehog.hs
+formatted       1c094fda6263  hedgehog-1.7/src/Hedgehog/Gen.hs
+formatted       c03c7c6e1080  hedgehog-1.7/src/Hedgehog/Internal/Barbie.hs
+formatted       d9db2ccb4bc7  hedgehog-1.7/src/Hedgehog/Internal/Config.hs
+formatted       7855a4bfe6fc  hedgehog-1.7/src/Hedgehog/Internal/Discovery.hs
+formatted       968088a89cf8  hedgehog-1.7/src/Hedgehog/Internal/Distributive.hs
+formatted       db3d79ebed8e  hedgehog-1.7/src/Hedgehog/Internal/Exception.hs
+formatted       9815c1a50552  hedgehog-1.7/src/Hedgehog/Internal/Gen.hs
+formatted       82bd44e46c74  hedgehog-1.7/src/Hedgehog/Internal/HTraversable.hs
+formatted       0b6e930c617c  hedgehog-1.7/src/Hedgehog/Internal/Opaque.hs
+formatted       0c41d0d4f087  hedgehog-1.7/src/Hedgehog/Internal/Prelude.hs
+formatted       b86df2643b9e  hedgehog-1.7/src/Hedgehog/Internal/Property.hs
+formatted       144a39866885  hedgehog-1.7/src/Hedgehog/Internal/Queue.hs
+formatted       9d14d12ad0b0  hedgehog-1.7/src/Hedgehog/Internal/Range.hs
+formatted       e83fa4c27743  hedgehog-1.7/src/Hedgehog/Internal/Region.hs
+formatted       b3790e6d22f8  hedgehog-1.7/src/Hedgehog/Internal/Report.hs
+formatted       f9b00a2731b7  hedgehog-1.7/src/Hedgehog/Internal/Runner.hs
+formatted       5c17cc008e95  hedgehog-1.7/src/Hedgehog/Internal/Seed.hs
+formatted       8b91f20c13a8  hedgehog-1.7/src/Hedgehog/Internal/Show.hs
+formatted       c446e4f9c366  hedgehog-1.7/src/Hedgehog/Internal/Shrink.hs
+formatted       c9e8e47ba6c5  hedgehog-1.7/src/Hedgehog/Internal/Source.hs
+formatted       274f471767dd  hedgehog-1.7/src/Hedgehog/Internal/State.hs
+formatted       6c94f06be1cf  hedgehog-1.7/src/Hedgehog/Internal/TH.hs
+formatted       8a627c0fefb1  hedgehog-1.7/src/Hedgehog/Internal/Tree.hs
+formatted       42e8fad71904  hedgehog-1.7/src/Hedgehog/Internal/Tripping.hs
+formatted       33c9141eeffd  hedgehog-1.7/src/Hedgehog/Main.hs
+formatted       d71772dad16c  hedgehog-1.7/src/Hedgehog/Range.hs
+formatted       e23ab85e9c05  hedgehog-1.7/test/Test/Hedgehog/Applicative.hs
+formatted       37e6a1383406  hedgehog-1.7/test/Test/Hedgehog/Confidence.hs
+formatted       937e5890d2b0  hedgehog-1.7/test/Test/Hedgehog/Filter.hs
+formatted       6e253dd6a871  hedgehog-1.7/test/Test/Hedgehog/Maybe.hs
+formatted       b90e9af1e67d  hedgehog-1.7/test/Test/Hedgehog/Seed.hs
+formatted       4edd92333a33  hedgehog-1.7/test/Test/Hedgehog/Skip.hs
+formatted       d20ec251ab72  hedgehog-1.7/test/Test/Hedgehog/Text.hs
+formatted       2d3b2e9d7168  hedgehog-1.7/test/Test/Hedgehog/Zip.hs
+formatted       df799f9ffb57  hedgehog-1.7/test/test.hs
+formatted       c7d7c0d944a8  hledger-1.52.1/Hledger/Cli.hs
+formatted       367c43f7a331  hledger-1.52.1/Hledger/Cli/Anchor.hs
+formatted       8da9d899b517  hledger-1.52.1/Hledger/Cli/Anon.hs
+formatted       4ff2914ca588  hledger-1.52.1/Hledger/Cli/CliOptions.hs
+formatted       9a8576f9b568  hledger-1.52.1/Hledger/Cli/Commands.hs
+formatted       2b1dfb85dfe1  hledger-1.52.1/Hledger/Cli/Commands/Accounts.hs
+formatted       17bf0339577c  hledger-1.52.1/Hledger/Cli/Commands/Activity.hs
+formatted       c68caf7ae7ab  hledger-1.52.1/Hledger/Cli/Commands/Add.hs
+formatted       8bc565ccfdc9  hledger-1.52.1/Hledger/Cli/Commands/Aregister.hs
+formatted       23d3572ab1c4  hledger-1.52.1/Hledger/Cli/Commands/Balance.hs
+formatted       df62b41123dc  hledger-1.52.1/Hledger/Cli/Commands/Balancesheet.hs
+formatted       2a8714e55f40  hledger-1.52.1/Hledger/Cli/Commands/Balancesheetequity.hs
+formatted       a74be8a824e5  hledger-1.52.1/Hledger/Cli/Commands/Cashflow.hs
+formatted       3d46f3fa2141  hledger-1.52.1/Hledger/Cli/Commands/Check.hs
+formatted       d72408ffa321  hledger-1.52.1/Hledger/Cli/Commands/Close.hs
+formatted       e9c489e0f01e  hledger-1.52.1/Hledger/Cli/Commands/Codes.hs
+formatted       075784a0845d  hledger-1.52.1/Hledger/Cli/Commands/Commodities.hs
+formatted       4441dcd70f80  hledger-1.52.1/Hledger/Cli/Commands/Demo.hs
+formatted       82dfab8a9677  hledger-1.52.1/Hledger/Cli/Commands/Descriptions.hs
+formatted       3999deea0979  hledger-1.52.1/Hledger/Cli/Commands/Diff.hs
+formatted       b51410797a83  hledger-1.52.1/Hledger/Cli/Commands/Files.hs
+formatted       15d50a6cb01a  hledger-1.52.1/Hledger/Cli/Commands/Help.hs
+formatted       6f60ce8d90d0  hledger-1.52.1/Hledger/Cli/Commands/Import.hs
+formatted       3fc4bde8aaae  hledger-1.52.1/Hledger/Cli/Commands/Incomestatement.hs
+formatted       e795242e76e2  hledger-1.52.1/Hledger/Cli/Commands/Notes.hs
+formatted       7868c26f6945  hledger-1.52.1/Hledger/Cli/Commands/Payees.hs
+formatted       74c42e16a7cb  hledger-1.52.1/Hledger/Cli/Commands/Prices.hs
+formatted       c1d1665ea336  hledger-1.52.1/Hledger/Cli/Commands/Print.hs
+formatted       b3664f32c410  hledger-1.52.1/Hledger/Cli/Commands/Register.hs
+formatted       fe57269eee06  hledger-1.52.1/Hledger/Cli/Commands/Rewrite.hs
+formatted       47c5a107dffd  hledger-1.52.1/Hledger/Cli/Commands/Roi.hs
+formatted       446ba4a560aa  hledger-1.52.1/Hledger/Cli/Commands/Run.hs
+formatted       518388ac79ba  hledger-1.52.1/Hledger/Cli/Commands/Setup.hs
+formatted       72882e775cf1  hledger-1.52.1/Hledger/Cli/Commands/Stats.hs
+formatted       c0d493d6d059  hledger-1.52.1/Hledger/Cli/Commands/Tags.hs
+formatted       8ca30544dcfc  hledger-1.52.1/Hledger/Cli/CompoundBalanceCommand.hs
+formatted       b20a3db0f839  hledger-1.52.1/Hledger/Cli/Conf.hs
+formatted       d2d28f0566d1  hledger-1.52.1/Hledger/Cli/DocFiles.hs
+formatted       060eef1f372e  hledger-1.52.1/Hledger/Cli/Script.hs
+formatted       3977570cbdad  hledger-1.52.1/Hledger/Cli/Utils.hs
+formatted       54a7475ed07e  hledger-1.52.1/Hledger/Cli/Version.hs
+formatted       e865ae48f11b  hledger-1.52.1/Setup.hs
+formatted       5f05220c744b  hledger-1.52.1/app/hledger-cli.hs
+formatted       f7397f99b8f6  hledger-1.52.1/bench/bench.hs
+formatted       770ce114d693  hledger-1.52.1/test/unittest.hs
+formatted       e865ae48f11b  hlint-3.10/Setup.hs
+formatted       0b9c394414b3  hlint-3.10/data/HLint_QuickCheck.hs
+declined        -             hlint-3.10/data/HLint_TypeCheck.hs
+formatted       7f62e2698706  hlint-3.10/data/Test.hs
+formatted       a3cf0d266650  hlint-3.10/src/Apply.hs
+formatted       8114bd9792d9  hlint-3.10/src/CC.hs
+formatted       0b9726856d3e  hlint-3.10/src/CmdLine.hs
+formatted       5ecebf30e886  hlint-3.10/src/Config/Compute.hs
+formatted       76a1b906c927  hlint-3.10/src/Config/Haskell.hs
+formatted       747182f5f5c1  hlint-3.10/src/Config/Read.hs
+formatted       36ef2b52eee9  hlint-3.10/src/Config/Type.hs
+declined        -             hlint-3.10/src/Config/Yaml.hs
+formatted       871e24292ba2  hlint-3.10/src/EmbedData.hs
+formatted       a0cce8b000d7  hlint-3.10/src/Extension.hs
+formatted       232c5ddbbb9b  hlint-3.10/src/Fixity.hs
+formatted       1c82631c3859  hlint-3.10/src/GHC/All.hs
+formatted       63d81c2c405a  hlint-3.10/src/GHC/Util.hs
+formatted       f8ab552f2009  hlint-3.10/src/GHC/Util/ApiAnnotation.hs
+formatted       c2680a511d29  hlint-3.10/src/GHC/Util/Brackets.hs
+formatted       8cff3984ef92  hlint-3.10/src/GHC/Util/DynFlags.hs
+formatted       7c1f93703a5a  hlint-3.10/src/GHC/Util/FreeVars.hs
+formatted       3d386a403912  hlint-3.10/src/GHC/Util/HsDecl.hs
+formatted       86e7bc3b5850  hlint-3.10/src/GHC/Util/HsExpr.hs
+formatted       e4c7dc5d6be8  hlint-3.10/src/GHC/Util/Scope.hs
+formatted       d8a06089d209  hlint-3.10/src/GHC/Util/SrcLoc.hs
+formatted       57a53e29344b  hlint-3.10/src/GHC/Util/Unify.hs
+formatted       b405492ce03f  hlint-3.10/src/GHC/Util/View.hs
+formatted       6a92057478ff  hlint-3.10/src/HLint.hs
+formatted       9c128d41e9da  hlint-3.10/src/Hint/All.hs
+formatted       92b62ac403c1  hlint-3.10/src/Hint/Bracket.hs
+formatted       e0953eb3c567  hlint-3.10/src/Hint/Comment.hs
+formatted       4a34094f4e91  hlint-3.10/src/Hint/Duplicate.hs
+formatted       63510e8bd4a6  hlint-3.10/src/Hint/Export.hs
+formatted       c3f23d24fb11  hlint-3.10/src/Hint/Extensions.hs
+formatted       8499a9dafb7a  hlint-3.10/src/Hint/Fixities.hs
+formatted       8fffda41f5e4  hlint-3.10/src/Hint/Import.hs
+formatted       e2ae13afdd01  hlint-3.10/src/Hint/Lambda.hs
+formatted       272b8222175a  hlint-3.10/src/Hint/List.hs
+formatted       bd27e035ec08  hlint-3.10/src/Hint/ListRec.hs
+formatted       3027b7686bbd  hlint-3.10/src/Hint/Match.hs
+formatted       7215f269ef89  hlint-3.10/src/Hint/Monad.hs
+formatted       4d078aac9ede  hlint-3.10/src/Hint/Naming.hs
+formatted       a1a5d9519cee  hlint-3.10/src/Hint/Negation.hs
+formatted       9bd70a7dc4ae  hlint-3.10/src/Hint/NewType.hs
+formatted       f6fa0661942d  hlint-3.10/src/Hint/NumLiteral.hs
+formatted       b961726611b0  hlint-3.10/src/Hint/Pattern.hs
+formatted       0076ccb5bd1c  hlint-3.10/src/Hint/Pragma.hs
+formatted       d6403b65887f  hlint-3.10/src/Hint/Restrict.hs
+formatted       b85945417175  hlint-3.10/src/Hint/Smell.hs
+formatted       3308ee100b88  hlint-3.10/src/Hint/Type.hs
+formatted       a7c7f90eb40c  hlint-3.10/src/Hint/Unsafe.hs
+formatted       48cd04ad2e02  hlint-3.10/src/HsColour.hs
+formatted       dd9801a47942  hlint-3.10/src/Idea.hs
+formatted       576b754ba5d4  hlint-3.10/src/Language/Haskell/HLint.hs
+formatted       7b8846cb4591  hlint-3.10/src/Main.hs
+formatted       fcdf50a5835c  hlint-3.10/src/Parallel.hs
+formatted       cddb107b52b7  hlint-3.10/src/Refact.hs
+formatted       97865215d682  hlint-3.10/src/Report.hs
+formatted       5752f0cb1c82  hlint-3.10/src/SARIF.hs
+formatted       3a554bc4caa1  hlint-3.10/src/Summary.hs
+formatted       3b64750323e1  hlint-3.10/src/Test/All.hs
+formatted       2dbc7a87e003  hlint-3.10/src/Test/Annotations.hs
+formatted       d9f760fed213  hlint-3.10/src/Test/InputOutput.hs
+formatted       265163b13605  hlint-3.10/src/Test/Util.hs
+formatted       0f5eb69b44dd  hlint-3.10/src/Timing.hs
+formatted       40bafe709540  hlint-3.10/src/Util.hs
+formatted       14f5f9f6c72a  hspec-core-2.11.17/src/GetOpt/Declarative.hs
+formatted       13b54fc56d9e  hspec-core-2.11.17/src/GetOpt/Declarative/Environment.hs
+formatted       ac874aa7540a  hspec-core-2.11.17/src/GetOpt/Declarative/Interpret.hs
+formatted       aed8c8d69571  hspec-core-2.11.17/src/GetOpt/Declarative/Types.hs
+formatted       7963314c7b2d  hspec-core-2.11.17/src/GetOpt/Declarative/Util.hs
+formatted       c59700aebda7  hspec-core-2.11.17/src/Test/Hspec/Core/Annotations.hs
+formatted       aaed3a708e2b  hspec-core-2.11.17/src/Test/Hspec/Core/Clock.hs
+broken          043159a88536  hspec-core-2.11.17/src/Test/Hspec/Core/Compat.hs
+formatted       f5ded9eab569  hspec-core-2.11.17/src/Test/Hspec/Core/Config.hs
+formatted       b9ed2689f1a4  hspec-core-2.11.17/src/Test/Hspec/Core/Config/Definition.hs
+formatted       2c2affbefb39  hspec-core-2.11.17/src/Test/Hspec/Core/Config/Options.hs
+formatted       d65135838a37  hspec-core-2.11.17/src/Test/Hspec/Core/Example.hs
+formatted       e124d4a06c47  hspec-core-2.11.17/src/Test/Hspec/Core/Example/Location.hs
+formatted       19c90134f072  hspec-core-2.11.17/src/Test/Hspec/Core/Extension.hs
+formatted       b5766e2580e3  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Config.hs
+formatted       b0c9672ff2ee  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Config/Type.hs
+formatted       dfaf22b9e266  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Item.hs
+formatted       61fffea8ad44  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Option.hs
+formatted       2c1d2b4038d2  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Spec.hs
+formatted       090871045b95  hspec-core-2.11.17/src/Test/Hspec/Core/Extension/Tree.hs
+formatted       9a4c4c61d167  hspec-core-2.11.17/src/Test/Hspec/Core/FailureReport.hs
+formatted       a49d2bd24295  hspec-core-2.11.17/src/Test/Hspec/Core/Format.hs
+formatted       b8b03afd38ee  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters.hs
+formatted       0f6c87760ec2  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/Diff.hs
+formatted       3cff8cbca823  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/Internal.hs
+formatted       7b21864b9eed  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/Pretty.hs
+formatted       71e26cb11ffa  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/Pretty/Parser.hs
+formatted       07264fb33ca8  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/Pretty/Unicode.hs
+formatted       32564aeda195  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/V1.hs
+formatted       f7f280a9eab8  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/V1/Free.hs
+formatted       be38872426b7  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/V1/Internal.hs
+formatted       94d88619a62f  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/V1/Monad.hs
+formatted       b83d7732b214  hspec-core-2.11.17/src/Test/Hspec/Core/Formatters/V2.hs
+formatted       f3ed1fa624ba  hspec-core-2.11.17/src/Test/Hspec/Core/Hooks.hs
+formatted       d7e33bec18c0  hspec-core-2.11.17/src/Test/Hspec/Core/QuickCheck.hs
+formatted       6285779479c8  hspec-core-2.11.17/src/Test/Hspec/Core/QuickCheck/Util.hs
+formatted       1be2d9c4a008  hspec-core-2.11.17/src/Test/Hspec/Core/Runner.hs
+formatted       559e8587e33c  hspec-core-2.11.17/src/Test/Hspec/Core/Runner/Eval.hs
+formatted       45d877a0b59c  hspec-core-2.11.17/src/Test/Hspec/Core/Runner/JobQueue.hs
+formatted       486c3e882e3e  hspec-core-2.11.17/src/Test/Hspec/Core/Runner/PrintSlowSpecItems.hs
+formatted       36777b3d173e  hspec-core-2.11.17/src/Test/Hspec/Core/Runner/Result.hs
+formatted       d699e2b567f5  hspec-core-2.11.17/src/Test/Hspec/Core/Shuffle.hs
+formatted       929d1248e847  hspec-core-2.11.17/src/Test/Hspec/Core/Spec.hs
+formatted       36dcfb961aa9  hspec-core-2.11.17/src/Test/Hspec/Core/Spec/Monad.hs
+formatted       1b327d112974  hspec-core-2.11.17/src/Test/Hspec/Core/Timer.hs
+formatted       32318dd91cf8  hspec-core-2.11.17/src/Test/Hspec/Core/Tree.hs
+formatted       80d2d2b8d380  hspec-core-2.11.17/src/Test/Hspec/Core/Util.hs
+formatted       e06b7cc46fd9  hspec-core-2.11.17/test/GetOpt/Declarative/EnvironmentSpec.hs
+formatted       6655e2e71bb3  hspec-core-2.11.17/test/GetOpt/Declarative/UtilSpec.hs
+formatted       aaa94a74898c  hspec-core-2.11.17/test/Helper.hs
+formatted       10aa2070ffb6  hspec-core-2.11.17/test/Mock.hs
+formatted       42263bafabb2  hspec-core-2.11.17/test/Spec.hs
+formatted       409fb8a0b5e3  hspec-core-2.11.17/test/SpecHook.hs
+formatted       ae9de2079048  hspec-core-2.11.17/test/Test/Hspec/Core/AnnotationsSpec.hs
+formatted       1157d1650ac3  hspec-core-2.11.17/test/Test/Hspec/Core/ClockSpec.hs
+formatted       819d29d3431f  hspec-core-2.11.17/test/Test/Hspec/Core/CompatSpec.hs
+formatted       e5db68e3c868  hspec-core-2.11.17/test/Test/Hspec/Core/Config/DefinitionSpec.hs
+formatted       105756fabf5e  hspec-core-2.11.17/test/Test/Hspec/Core/Config/OptionsSpec.hs
+formatted       edfe82f15e2d  hspec-core-2.11.17/test/Test/Hspec/Core/ConfigSpec.hs
+formatted       beef08e20fe4  hspec-core-2.11.17/test/Test/Hspec/Core/Example/LocationSpec.hs
+formatted       d51ddf803043  hspec-core-2.11.17/test/Test/Hspec/Core/ExampleSpec.hs
+formatted       1a45c62099d0  hspec-core-2.11.17/test/Test/Hspec/Core/FailureReportSpec.hs
+formatted       8992979a0121  hspec-core-2.11.17/test/Test/Hspec/Core/FormatSpec.hs
+formatted       c2d7791f1000  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/DiffSpec.hs
+formatted       cb3d38eb1461  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/InternalSpec.hs
+formatted       2ffb49f5a742  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/Pretty/ParserSpec.hs
+formatted       afa9ffaa3bf1  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/Pretty/UnicodeSpec.hs
+formatted       ac2da1dd4d6b  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/PrettySpec.hs
+formatted       2665482bea3b  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/V1Spec.hs
+formatted       fdce61371e6b  hspec-core-2.11.17/test/Test/Hspec/Core/Formatters/V2Spec.hs
+formatted       b43a06946394  hspec-core-2.11.17/test/Test/Hspec/Core/HooksSpec.hs
+formatted       788492850ef9  hspec-core-2.11.17/test/Test/Hspec/Core/QuickCheck/UtilSpec.hs
+formatted       775321ce08bf  hspec-core-2.11.17/test/Test/Hspec/Core/Runner/EvalSpec.hs
+formatted       1a7b81d688ce  hspec-core-2.11.17/test/Test/Hspec/Core/Runner/JobQueueSpec.hs
+formatted       a0e5092545a6  hspec-core-2.11.17/test/Test/Hspec/Core/Runner/PrintSlowSpecItemsSpec.hs
+formatted       2781ae88628b  hspec-core-2.11.17/test/Test/Hspec/Core/Runner/ResultSpec.hs
+formatted       f416fc0ebea5  hspec-core-2.11.17/test/Test/Hspec/Core/RunnerSpec.hs
+formatted       be08f1178641  hspec-core-2.11.17/test/Test/Hspec/Core/ShuffleSpec.hs
+formatted       6c250c13b42b  hspec-core-2.11.17/test/Test/Hspec/Core/SpecSpec.hs
+formatted       ccd964421c9d  hspec-core-2.11.17/test/Test/Hspec/Core/TimerSpec.hs
+formatted       ad44f3bb30b2  hspec-core-2.11.17/test/Test/Hspec/Core/TreeSpec.hs
+formatted       a46fa24d2bd0  hspec-core-2.11.17/test/Test/Hspec/Core/UtilSpec.hs
+formatted       e13927dd80dc  hspec-core-2.11.17/vendor/Data/Algorithm/Diff.hs
+partly-checked  f983214ae642  hspec-core-2.11.17/vendor/async-2.2.5/Control/Concurrent/Async.hs
+formatted       bea44982097a  hspec-core-2.11.17/vendor/stm-2.5.0.1/Control/Concurrent/STM/TMVar.hs
+formatted       b3d4964504e7  http-client-0.7.19/Data/KeyedPool.hs
+formatted       3e436f1b2afb  http-client-0.7.19/Network/HTTP/Client.hs
+formatted       547642efe2cc  http-client-0.7.19/Network/HTTP/Client/Body.hs
+formatted       d5454cf22a87  http-client-0.7.19/Network/HTTP/Client/Connection.hs
+formatted       b7a129091d84  http-client-0.7.19/Network/HTTP/Client/Cookies.hs
+formatted       d532447f828a  http-client-0.7.19/Network/HTTP/Client/Core.hs
+formatted       7a5aad8e01a5  http-client-0.7.19/Network/HTTP/Client/Headers.hs
+formatted       44b1ad27a89e  http-client-0.7.19/Network/HTTP/Client/Internal.hs
+formatted       e04e09593516  http-client-0.7.19/Network/HTTP/Client/Manager.hs
+formatted       91acc2df5de6  http-client-0.7.19/Network/HTTP/Client/MultipartFormData.hs
+formatted       c91e32be7257  http-client-0.7.19/Network/HTTP/Client/Request.hs
+formatted       cf2358330a5c  http-client-0.7.19/Network/HTTP/Client/Response.hs
+formatted       d48abdb1339e  http-client-0.7.19/Network/HTTP/Client/Types.hs
+formatted       ca6a48d5e983  http-client-0.7.19/Network/HTTP/Client/Util.hs
+formatted       824fcf5320e3  http-client-0.7.19/Network/HTTP/Proxy.hs
+formatted       e865ae48f11b  http-client-0.7.19/Setup.hs
+formatted       b1d3bc1d8679  http-client-0.7.19/publicsuffixlist/Network/PublicSuffixList/DataStructure.hs
+formatted       245d124b8415  http-client-0.7.19/publicsuffixlist/Network/PublicSuffixList/Lookup.hs
+formatted       765e07adf78d  http-client-0.7.19/publicsuffixlist/Network/PublicSuffixList/Serialize.hs
+formatted       a7f41d1b5ab1  http-client-0.7.19/publicsuffixlist/Network/PublicSuffixList/Types.hs
+formatted       5a31984d56fd  http-client-0.7.19/test-nonet/Network/HTTP/Client/BodySpec.hs
+formatted       329d7775ecfb  http-client-0.7.19/test-nonet/Network/HTTP/Client/ConnectionSpec.hs
+formatted       c152236f3c88  http-client-0.7.19/test-nonet/Network/HTTP/Client/CookieSpec.hs
+formatted       11f71ff1af3c  http-client-0.7.19/test-nonet/Network/HTTP/Client/HeadersSpec.hs
+formatted       37bbc630210e  http-client-0.7.19/test-nonet/Network/HTTP/Client/RequestBodySpec.hs
+formatted       9d193cb0c288  http-client-0.7.19/test-nonet/Network/HTTP/Client/RequestSpec.hs
+formatted       5109990dfcb0  http-client-0.7.19/test-nonet/Network/HTTP/Client/ResponseSpec.hs
+formatted       78f0fd41871c  http-client-0.7.19/test-nonet/Network/HTTP/ClientSpec.hs
+formatted       2fbd14b119a4  http-client-0.7.19/test-nonet/Spec.hs
+formatted       5a4d43a61ed2  http-client-0.7.19/test/Network/HTTP/ClientSpec.hs
+formatted       2fbd14b119a4  http-client-0.7.19/test/Spec.hs
+formatted       13d151556922  http-types-0.12.6/Network/HTTP/Types.hs
+formatted       e7eff6d3c526  http-types-0.12.6/Network/HTTP/Types/Header.hs
+formatted       26f2850b0a92  http-types-0.12.6/Network/HTTP/Types/Method.hs
+formatted       937169187cf1  http-types-0.12.6/Network/HTTP/Types/QueryLike.hs
+formatted       973c6368ae63  http-types-0.12.6/Network/HTTP/Types/Status.hs
+formatted       8393cb3031e8  http-types-0.12.6/Network/HTTP/Types/URI.hs
+formatted       f437cc36b9fa  http-types-0.12.6/Network/HTTP/Types/Version.hs
+formatted       e865ae48f11b  http-types-0.12.6/Setup.hs
+formatted       7d11c2eb808e  http-types-0.12.6/test/Network/HTTP/Types/HeaderSpec.hs
+formatted       1816a6090b5e  http-types-0.12.6/test/Network/HTTP/Types/MethodSpec.hs
+formatted       848ef1c45ded  http-types-0.12.6/test/Network/HTTP/Types/StatusSpec.hs
+formatted       9a3fe7ad6e47  http-types-0.12.6/test/Network/HTTP/Types/URISpec.hs
+formatted       5ac67585c5a1  http-types-0.12.6/test/Network/HTTP/Types/VersionSpec.hs
+formatted       2fbd14b119a4  http-types-0.12.6/test/Spec.hs
+formatted       6d7c004ed36a  http-types-0.12.6/test/doctests.hs
+declined        -             idris-1.3.4/Setup.hs
+formatted       6c39a6764f61  idris-1.3.4/codegen/idris-codegen-c/Main.hs
+formatted       66ce632c5bcb  idris-1.3.4/codegen/idris-codegen-javascript/Main.hs
+formatted       06a7843d0cd6  idris-1.3.4/codegen/idris-codegen-node/Main.hs
+formatted       eaa6467947db  idris-1.3.4/main/Main.hs
+formatted       3fd541795c69  idris-1.3.4/src/IRTS/Bytecode.hs
+formatted       9c31d32e255a  idris-1.3.4/src/IRTS/CodegenC.hs
+formatted       9e5812762ec8  idris-1.3.4/src/IRTS/CodegenCommon.hs
+formatted       563f242aebaf  idris-1.3.4/src/IRTS/CodegenJavaScript.hs
+formatted       c9cee36f8fdf  idris-1.3.4/src/IRTS/Compiler.hs
+formatted       649c4334c449  idris-1.3.4/src/IRTS/Defunctionalise.hs
+formatted       521a60c0c99b  idris-1.3.4/src/IRTS/DumpBC.hs
+formatted       67e26a69bf18  idris-1.3.4/src/IRTS/Exports.hs
+formatted       9e44d172890b  idris-1.3.4/src/IRTS/Inliner.hs
+formatted       ca2a16bd8e2f  idris-1.3.4/src/IRTS/JavaScript/AST.hs
+formatted       783e391156ee  idris-1.3.4/src/IRTS/JavaScript/Codegen.hs
+formatted       b171baf09627  idris-1.3.4/src/IRTS/JavaScript/LangTransforms.hs
+formatted       837e1fafadd6  idris-1.3.4/src/IRTS/JavaScript/Name.hs
+formatted       cd5cebdbb649  idris-1.3.4/src/IRTS/JavaScript/PrimOp.hs
+formatted       5eff81bf418b  idris-1.3.4/src/IRTS/JavaScript/Specialize.hs
+formatted       be460f171d5f  idris-1.3.4/src/IRTS/Lang.hs
+formatted       877532317321  idris-1.3.4/src/IRTS/LangOpts.hs
+formatted       54ee13488588  idris-1.3.4/src/IRTS/Portable.hs
+formatted       c092168371c9  idris-1.3.4/src/IRTS/Simplified.hs
+formatted       8a93ea593409  idris-1.3.4/src/IRTS/System.hs
+formatted       0b84ce237bb8  idris-1.3.4/src/Idris/ASTUtils.hs
+broken          4ab968445573  idris-1.3.4/src/Idris/AbsSyntax.hs
+formatted       5d7408d71382  idris-1.3.4/src/Idris/AbsSyntaxTree.hs
+formatted       9f032fa98b74  idris-1.3.4/src/Idris/Apropos.hs
+formatted       d0256ad5e06e  idris-1.3.4/src/Idris/CaseSplit.hs
+formatted       887228791bf4  idris-1.3.4/src/Idris/Chaser.hs
+formatted       a47646c618f2  idris-1.3.4/src/Idris/CmdOptions.hs
+formatted       4da7f931a59f  idris-1.3.4/src/Idris/Colours.hs
+formatted       f4a75f24bcf9  idris-1.3.4/src/Idris/Completion.hs
+formatted       499686be90c6  idris-1.3.4/src/Idris/Core/Binary.hs
+formatted       306094253161  idris-1.3.4/src/Idris/Core/CaseTree.hs
+formatted       fa5732ba0860  idris-1.3.4/src/Idris/Core/Constraints.hs
+formatted       32e1f1dc7a41  idris-1.3.4/src/Idris/Core/DeepSeq.hs
+formatted       de3d97104fff  idris-1.3.4/src/Idris/Core/Elaborate.hs
+formatted       0a4a3162394e  idris-1.3.4/src/Idris/Core/Evaluate.hs
+formatted       248e1a132506  idris-1.3.4/src/Idris/Core/Execute.hs
+formatted       71595a0d7382  idris-1.3.4/src/Idris/Core/ProofState.hs
+formatted       54380e55c12e  idris-1.3.4/src/Idris/Core/ProofTerm.hs
+formatted       335b146f54a6  idris-1.3.4/src/Idris/Core/TT.hs
+formatted       418dc775272d  idris-1.3.4/src/Idris/Core/Typecheck.hs
+formatted       1125cc1a59f1  idris-1.3.4/src/Idris/Core/Unify.hs
+formatted       71eb35dcc836  idris-1.3.4/src/Idris/Core/WHNF.hs
+formatted       e884d58256bb  idris-1.3.4/src/Idris/Coverage.hs
+formatted       61677e52356c  idris-1.3.4/src/Idris/DSL.hs
+formatted       04b448aefa16  idris-1.3.4/src/Idris/DataOpts.hs
+formatted       591136fc0c25  idris-1.3.4/src/Idris/DeepSeq.hs
+formatted       5f5aff7f4f6d  idris-1.3.4/src/Idris/Delaborate.hs
+formatted       c0a210b99952  idris-1.3.4/src/Idris/Directives.hs
+formatted       3d3d5a0afe4c  idris-1.3.4/src/Idris/Docs.hs
+formatted       a485f5642886  idris-1.3.4/src/Idris/Docstrings.hs
+formatted       a1c474156864  idris-1.3.4/src/Idris/Elab/AsPat.hs
+formatted       b2f9d95c85c2  idris-1.3.4/src/Idris/Elab/Clause.hs
+formatted       9e5c2909e062  idris-1.3.4/src/Idris/Elab/Data.hs
+formatted       ed958562399c  idris-1.3.4/src/Idris/Elab/Implementation.hs
+formatted       9349c5236898  idris-1.3.4/src/Idris/Elab/Interface.hs
+formatted       7c5f6b45e740  idris-1.3.4/src/Idris/Elab/Provider.hs
+formatted       432315b423c7  idris-1.3.4/src/Idris/Elab/Quasiquote.hs
+formatted       229f49cf1c9d  idris-1.3.4/src/Idris/Elab/Record.hs
+formatted       38c4274131ac  idris-1.3.4/src/Idris/Elab/Rewrite.hs
+formatted       77ebc33633f8  idris-1.3.4/src/Idris/Elab/RunElab.hs
+formatted       63bebea5b00c  idris-1.3.4/src/Idris/Elab/Term.hs
+formatted       43565a6d9bac  idris-1.3.4/src/Idris/Elab/Transform.hs
+formatted       cf8cbbec4fe7  idris-1.3.4/src/Idris/Elab/Type.hs
+formatted       6546f8cfdb65  idris-1.3.4/src/Idris/Elab/Utils.hs
+formatted       ac9c50ffdaf7  idris-1.3.4/src/Idris/Elab/Value.hs
+formatted       de7dafd8bd53  idris-1.3.4/src/Idris/ElabDecls.hs
+formatted       68025bd6dc21  idris-1.3.4/src/Idris/Erasure.hs
+formatted       7c4b0ef95bf4  idris-1.3.4/src/Idris/ErrReverse.hs
+formatted       28314a1db8cc  idris-1.3.4/src/Idris/Error.hs
+formatted       21bcb871fca8  idris-1.3.4/src/Idris/Help.hs
+formatted       e70cd4eb645a  idris-1.3.4/src/Idris/IBC.hs
+formatted       cce75249d4d5  idris-1.3.4/src/Idris/IdeMode.hs
+formatted       e909e2fe452b  idris-1.3.4/src/Idris/IdrisDoc.hs
+formatted       8b7f62814233  idris-1.3.4/src/Idris/Imports.hs
+formatted       3e21520569d8  idris-1.3.4/src/Idris/Info.hs
+formatted       90f54928d9ca  idris-1.3.4/src/Idris/Info/Show.hs
+formatted       eb72f451c8f1  idris-1.3.4/src/Idris/Inliner.hs
+formatted       5ef6f905cab7  idris-1.3.4/src/Idris/Interactive.hs
+formatted       5071375a4820  idris-1.3.4/src/Idris/Main.hs
+formatted       b65944ecc220  idris-1.3.4/src/Idris/ModeCommon.hs
+formatted       28bd80263c16  idris-1.3.4/src/Idris/Options.hs
+formatted       02fa432a9240  idris-1.3.4/src/Idris/Output.hs
+formatted       8f1650d3c095  idris-1.3.4/src/Idris/Package.hs
+formatted       2a5fae85b8c9  idris-1.3.4/src/Idris/Package/Common.hs
+formatted       90885df148d3  idris-1.3.4/src/Idris/Package/Parser.hs
+formatted       5fc13e822179  idris-1.3.4/src/Idris/Parser.hs
+formatted       d367b2f46d9f  idris-1.3.4/src/Idris/Parser/Data.hs
+formatted       9475514d3152  idris-1.3.4/src/Idris/Parser/Expr.hs
+formatted       1c16d75635f7  idris-1.3.4/src/Idris/Parser/Helpers.hs
+formatted       00297a830b2d  idris-1.3.4/src/Idris/Parser/Ops.hs
+formatted       4c95439ef192  idris-1.3.4/src/Idris/Parser/Stack.hs
+formatted       f0e3821f6651  idris-1.3.4/src/Idris/PartialEval.hs
+formatted       58ad84ded5d8  idris-1.3.4/src/Idris/Primitives.hs
+formatted       55a7e58fbd43  idris-1.3.4/src/Idris/ProofSearch.hs
+formatted       4e3b3f931f23  idris-1.3.4/src/Idris/Prover.hs
+formatted       b2ed059dd3da  idris-1.3.4/src/Idris/Providers.hs
+formatted       f1e4c14b910c  idris-1.3.4/src/Idris/REPL.hs
+formatted       d43671c3f627  idris-1.3.4/src/Idris/REPL/Browse.hs
+formatted       adeb73659e58  idris-1.3.4/src/Idris/REPL/Commands.hs
+formatted       34b1bf56383b  idris-1.3.4/src/Idris/REPL/Parser.hs
+formatted       a35f4ee64226  idris-1.3.4/src/Idris/Reflection.hs
+formatted       bb390b89c850  idris-1.3.4/src/Idris/Termination.hs
+formatted       6837e439e7d6  idris-1.3.4/src/Idris/Transforms.hs
+formatted       06befdb6fc0c  idris-1.3.4/src/Idris/TypeSearch.hs
+formatted       efed23bf7411  idris-1.3.4/src/Idris/Unlit.hs
+formatted       b613b7be20de  idris-1.3.4/src/Idris/WhoCalls.hs
+declined        -             idris-1.3.4/src/Util/DynamicLinker.hs
+formatted       298e72ccbb61  idris-1.3.4/src/Util/Net.hs
+formatted       f47f361e150a  idris-1.3.4/src/Util/Pretty.hs
+formatted       13363649406c  idris-1.3.4/src/Util/ScreenSize.hs
+formatted       7d39399c082d  idris-1.3.4/src/Util/System.hs
+formatted       ff2fc4a7a778  idris-1.3.4/test/TestData.hs
+formatted       720af8681b46  idris-1.3.4/test/TestRun.hs
+formatted       e865ae48f11b  intero-0.1.40/Setup.hs
+formatted       2179d52567a7  intero-0.1.40/src/Completion.hs
+formatted       3cb1551c3e6d  intero-0.1.40/src/GhciFind.hs
+partly-checked  337930d69360  intero-0.1.40/src/GhciInfo.hs
+formatted       ca4cd509270a  intero-0.1.40/src/GhciMonad.hs
+formatted       43c5576cb10f  intero-0.1.40/src/GhciTags.hs
+formatted       72999d5c814e  intero-0.1.40/src/GhciTypes.hs
+declined        -             intero-0.1.40/src/InteractiveUI.hs
+formatted       d3b894941b5e  intero-0.1.40/src/Intero/Compat.hs
+declined        -             intero-0.1.40/src/Main.hs
+formatted       13b22f1a2f96  intero-0.1.40/src/test/Main.hs
+formatted       4fe73bbfe233  leksah-0.16.2.2/data/leksah-welcome/src/Main.hs
+formatted       1cefb44a49bc  leksah-0.16.2.2/data/leksah-welcome/test/Main.hs
+formatted       9b1bc79c9ca2  leksah-0.16.2.2/main/Main.hs
+formatted       f85b57b39a49  leksah-0.16.2.2/src/IDE/BufferMode.hs
+formatted       04ce4038bfa5  leksah-0.16.2.2/src/IDE/Build.hs
+formatted       c91b409f9724  leksah-0.16.2.2/src/IDE/Command.hs
+formatted       311f46674981  leksah-0.16.2.2/src/IDE/Command/Print.hs
+formatted       3587f60b8002  leksah-0.16.2.2/src/IDE/Command/VCS.hs
+formatted       4c605686bc49  leksah-0.16.2.2/src/IDE/Command/VCS/Common.hs
+formatted       800101f9a2a4  leksah-0.16.2.2/src/IDE/Command/VCS/Common/GUI.hs
+formatted       06c097b39c19  leksah-0.16.2.2/src/IDE/Command/VCS/Common/Helper.hs
+formatted       8615cfe9c636  leksah-0.16.2.2/src/IDE/Command/VCS/Common/Workspaces.hs
+formatted       703e291d1e3f  leksah-0.16.2.2/src/IDE/Command/VCS/GIT.hs
+formatted       5bebaffe9dd2  leksah-0.16.2.2/src/IDE/Command/VCS/Mercurial.hs
+formatted       5af0b2acf931  leksah-0.16.2.2/src/IDE/Command/VCS/SVN.hs
+formatted       092138f05183  leksah-0.16.2.2/src/IDE/Command/VCS/Types.hs
+formatted       bd0b4fcf92e3  leksah-0.16.2.2/src/IDE/Completion.hs
+formatted       ee31e800e58b  leksah-0.16.2.2/src/IDE/Core/State.hs
+formatted       9083c43cc5be  leksah-0.16.2.2/src/IDE/Core/Types.hs
+formatted       375889d7ec16  leksah-0.16.2.2/src/IDE/Debug.hs
+does-not-parse  -             leksah-0.16.2.2/src/IDE/Find.hs
+formatted       ca0b06346e9b  leksah-0.16.2.2/src/IDE/GUIHistory.hs
+formatted       b9c2b4c52ba2  leksah-0.16.2.2/src/IDE/HLint.hs
+formatted       c88bafa6fd21  leksah-0.16.2.2/src/IDE/ImportTool.hs
+formatted       e95cc4a80230  leksah-0.16.2.2/src/IDE/Keymap.hs
+formatted       3f0638c605cd  leksah-0.16.2.2/src/IDE/LPaste.hs
+formatted       9fa364538e13  leksah-0.16.2.2/src/IDE/Leksah.hs
+formatted       229f425b195b  leksah-0.16.2.2/src/IDE/LogRef.hs
+formatted       fd6764bf4d1f  leksah-0.16.2.2/src/IDE/Metainfo/Provider.hs
+formatted       32e0957c2aa5  leksah-0.16.2.2/src/IDE/NotebookFlipper.hs
+formatted       d441d0417158  leksah-0.16.2.2/src/IDE/OSX.hs
+formatted       9773aa44e1f7  leksah-0.16.2.2/src/IDE/Package.hs
+formatted       59c82086f3fb  leksah-0.16.2.2/src/IDE/Pane/Breakpoints.hs
+formatted       1590e7831013  leksah-0.16.2.2/src/IDE/Pane/Errors.hs
+formatted       65a5181355a0  leksah-0.16.2.2/src/IDE/Pane/Files.hs
+formatted       fae74ac3b1ee  leksah-0.16.2.2/src/IDE/Pane/Grep.hs
+formatted       8322865655a5  leksah-0.16.2.2/src/IDE/Pane/HLint.hs
+formatted       2cc74d884f25  leksah-0.16.2.2/src/IDE/Pane/Info.hs
+formatted       84026b055134  leksah-0.16.2.2/src/IDE/Pane/Log.hs
+formatted       88d223364b06  leksah-0.16.2.2/src/IDE/Pane/Modules.hs
+broken          a567b56cc5f6  leksah-0.16.2.2/src/IDE/Pane/PackageEditor.hs
+formatted       e551f5f880ef  leksah-0.16.2.2/src/IDE/Pane/PackageFlags.hs
+formatted       021c30d05e66  leksah-0.16.2.2/src/IDE/Pane/Search.hs
+formatted       0896ee40207a  leksah-0.16.2.2/src/IDE/Pane/SourceBuffer.hs
+formatted       52733de58564  leksah-0.16.2.2/src/IDE/Pane/Trace.hs
+formatted       70de0231fabd  leksah-0.16.2.2/src/IDE/Pane/Variables.hs
+formatted       080c993f98fe  leksah-0.16.2.2/src/IDE/Pane/WebKit/Documentation.hs
+formatted       c47f6ec9f808  leksah-0.16.2.2/src/IDE/Pane/WebKit/Inspect.hs
+formatted       b526c4eb3dc8  leksah-0.16.2.2/src/IDE/Pane/WebKit/Output.hs
+formatted       ffd0f6653485  leksah-0.16.2.2/src/IDE/Pane/Workspace.hs
+formatted       33a766cc1c7d  leksah-0.16.2.2/src/IDE/PaneGroups.hs
+formatted       83b95acfea83  leksah-0.16.2.2/src/IDE/Preferences.hs
+formatted       d73d66c34b8c  leksah-0.16.2.2/src/IDE/Session.hs
+formatted       277f211ae71b  leksah-0.16.2.2/src/IDE/SourceCandy.hs
+formatted       95169d9d3f63  leksah-0.16.2.2/src/IDE/Statusbar.hs
+formatted       70eb7c99746e  leksah-0.16.2.2/src/IDE/SymbolNavigation.hs
+formatted       265b135c829e  leksah-0.16.2.2/src/IDE/TextEditor.hs
+formatted       b345661c1e07  leksah-0.16.2.2/src/IDE/TextEditor/Class.hs
+formatted       be8c9023310e  leksah-0.16.2.2/src/IDE/TextEditor/CodeMirror.hs
+formatted       bd04bccef282  leksah-0.16.2.2/src/IDE/TextEditor/GtkSourceView.hs
+formatted       6af4d4de87f6  leksah-0.16.2.2/src/IDE/TextEditor/Yi.hs
+formatted       c73baf7194c2  leksah-0.16.2.2/src/IDE/TextEditor/Yi/Config.hs
+formatted       007fe37642f2  leksah-0.16.2.2/src/IDE/Utils/CabalUtils.hs
+formatted       a1e35678dab5  leksah-0.16.2.2/src/IDE/Utils/DirectoryUtils.hs
+formatted       8c14e6468260  leksah-0.16.2.2/src/IDE/Utils/ExternalTool.hs
+formatted       f82cd3575fb1  leksah-0.16.2.2/src/IDE/Utils/GUIUtils.hs
+formatted       681c8db74a16  leksah-0.16.2.2/src/IDE/Utils/ServerConnection.hs
+formatted       57b163af09de  leksah-0.16.2.2/src/IDE/Workspaces.hs
+formatted       bb3e875ba328  leksah-0.16.2.2/src/IDE/Workspaces/Writer.hs
+formatted       50c9e4996c17  lens-5.3.6/benchmarks/alongside.hs
+formatted       9fb7d388f89d  lens-5.3.6/benchmarks/folds.hs
+formatted       a5e826be2e18  lens-5.3.6/benchmarks/plated.hs
+formatted       474a59bad6c3  lens-5.3.6/benchmarks/traversals.hs
+formatted       ed5e8ac0099f  lens-5.3.6/benchmarks/unsafe.hs
+formatted       6b5d9407288a  lens-5.3.6/examples/Aeson.hs
+formatted       fcea15eace15  lens-5.3.6/examples/Plates.hs
+formatted       42c84063ca40  lens-5.3.6/examples/Pong.hs
+formatted       1e7ca6c2bac4  lens-5.3.6/examples/Turtle.hs
+formatted       e865ae48f11b  lens-5.3.6/lens-properties/Setup.hs
+formatted       03d5b652be06  lens-5.3.6/lens-properties/src/Control/Lens/Properties.hs
+broken          6f66b6321d8b  lens-5.3.6/src/Control/Exception/Lens.hs
+formatted       4fb8b462c692  lens-5.3.6/src/Control/Lens.hs
+formatted       dab5fde53fc2  lens-5.3.6/src/Control/Lens/At.hs
+formatted       1a555e9740b2  lens-5.3.6/src/Control/Lens/Combinators.hs
+formatted       45285718981c  lens-5.3.6/src/Control/Lens/Cons.hs
+formatted       087aa6536345  lens-5.3.6/src/Control/Lens/Each.hs
+formatted       db06507f8eb3  lens-5.3.6/src/Control/Lens/Empty.hs
+formatted       afba13ca40b2  lens-5.3.6/src/Control/Lens/Equality.hs
+formatted       e63ce52c62a6  lens-5.3.6/src/Control/Lens/Extras.hs
+formatted       bc07f01d16f1  lens-5.3.6/src/Control/Lens/Fold.hs
+formatted       1d6b4529afae  lens-5.3.6/src/Control/Lens/Getter.hs
+formatted       be96a32da04a  lens-5.3.6/src/Control/Lens/Indexed.hs
+formatted       f2b77c23d24e  lens-5.3.6/src/Control/Lens/Internal.hs
+formatted       08075ad39685  lens-5.3.6/src/Control/Lens/Internal/Bazaar.hs
+formatted       77d72de128e9  lens-5.3.6/src/Control/Lens/Internal/ByteString.hs
+formatted       d8ca8cef6fef  lens-5.3.6/src/Control/Lens/Internal/CTypes.hs
+formatted       d27aa876059e  lens-5.3.6/src/Control/Lens/Internal/Context.hs
+formatted       a6d8f75d39fc  lens-5.3.6/src/Control/Lens/Internal/Deque.hs
+formatted       4c63a54a8aeb  lens-5.3.6/src/Control/Lens/Internal/Doctest.hs
+formatted       36dfae32602b  lens-5.3.6/src/Control/Lens/Internal/Exception.hs
+formatted       94e9c2ef7d99  lens-5.3.6/src/Control/Lens/Internal/FieldTH.hs
+formatted       8751bf3b6318  lens-5.3.6/src/Control/Lens/Internal/Fold.hs
+formatted       fe2ce335a9fd  lens-5.3.6/src/Control/Lens/Internal/Getter.hs
+formatted       febc67fc7f79  lens-5.3.6/src/Control/Lens/Internal/Indexed.hs
+formatted       74a115066cae  lens-5.3.6/src/Control/Lens/Internal/Instances.hs
+formatted       a9257a233659  lens-5.3.6/src/Control/Lens/Internal/Iso.hs
+formatted       62616dcfe279  lens-5.3.6/src/Control/Lens/Internal/Level.hs
+formatted       929b3db19b16  lens-5.3.6/src/Control/Lens/Internal/List.hs
+formatted       b107d5717343  lens-5.3.6/src/Control/Lens/Internal/Magma.hs
+formatted       e8fad9977f5a  lens-5.3.6/src/Control/Lens/Internal/Prelude.hs
+formatted       d033545bb0fa  lens-5.3.6/src/Control/Lens/Internal/Prism.hs
+formatted       c5b138918bc8  lens-5.3.6/src/Control/Lens/Internal/PrismTH.hs
+formatted       d1e3368088fd  lens-5.3.6/src/Control/Lens/Internal/Profunctor.hs
+formatted       a0cfb7f64915  lens-5.3.6/src/Control/Lens/Internal/Review.hs
+formatted       bd611b570342  lens-5.3.6/src/Control/Lens/Internal/Setter.hs
+formatted       cb94f36001d0  lens-5.3.6/src/Control/Lens/Internal/TH.hs
+formatted       f38703e41b26  lens-5.3.6/src/Control/Lens/Internal/Zoom.hs
+formatted       4d4a8b86f259  lens-5.3.6/src/Control/Lens/Iso.hs
+formatted       90c89d25de5a  lens-5.3.6/src/Control/Lens/Lens.hs
+formatted       bde563e05b67  lens-5.3.6/src/Control/Lens/Level.hs
+formatted       b84cf710176f  lens-5.3.6/src/Control/Lens/Operators.hs
+formatted       61aef519b850  lens-5.3.6/src/Control/Lens/Plated.hs
+formatted       cd556da34caa  lens-5.3.6/src/Control/Lens/Prism.hs
+formatted       b465099e5056  lens-5.3.6/src/Control/Lens/Profunctor.hs
+formatted       4fa75f887167  lens-5.3.6/src/Control/Lens/Reified.hs
+formatted       6e871d8e4385  lens-5.3.6/src/Control/Lens/Review.hs
+formatted       5f1a95d65c20  lens-5.3.6/src/Control/Lens/Setter.hs
+formatted       bd765a03081a  lens-5.3.6/src/Control/Lens/TH.hs
+formatted       9164ff122ee8  lens-5.3.6/src/Control/Lens/Traversal.hs
+formatted       3a5cbb2c959c  lens-5.3.6/src/Control/Lens/Tuple.hs
+formatted       181a647a9c7b  lens-5.3.6/src/Control/Lens/Type.hs
+formatted       ff8881502434  lens-5.3.6/src/Control/Lens/Unsound.hs
+declined        -             lens-5.3.6/src/Control/Lens/Wrapped.hs
+formatted       2c3a223dec39  lens-5.3.6/src/Control/Lens/Zoom.hs
+formatted       d04fd074c74d  lens-5.3.6/src/Control/Monad/Error/Lens.hs
+formatted       b9bfa6cc2ae6  lens-5.3.6/src/Control/Parallel/Strategies/Lens.hs
+formatted       3580c9fdbe74  lens-5.3.6/src/Control/Seq/Lens.hs
+formatted       ae1408607f92  lens-5.3.6/src/Data/Array/Lens.hs
+formatted       4f2a2066b52a  lens-5.3.6/src/Data/Bits/Lens.hs
+formatted       e1c3ede72b89  lens-5.3.6/src/Data/ByteString/Lazy/Lens.hs
+formatted       fd83b8412797  lens-5.3.6/src/Data/ByteString/Lens.hs
+formatted       a0beda949826  lens-5.3.6/src/Data/ByteString/Strict/Lens.hs
+formatted       e7fc0d3b8334  lens-5.3.6/src/Data/Complex/Lens.hs
+formatted       626272b6276a  lens-5.3.6/src/Data/Data/Lens.hs
+formatted       ae776c45408a  lens-5.3.6/src/Data/Dynamic/Lens.hs
+formatted       9817c7fd06d9  lens-5.3.6/src/Data/HashSet/Lens.hs
+formatted       9b6a7ea1de9a  lens-5.3.6/src/Data/IntSet/Lens.hs
+formatted       afd0c52fb1bb  lens-5.3.6/src/Data/List/Lens.hs
+formatted       c78898aaa504  lens-5.3.6/src/Data/Map/Lens.hs
+formatted       bf33871e79d3  lens-5.3.6/src/Data/Sequence/Lens.hs
+formatted       3b630e1120f0  lens-5.3.6/src/Data/Set/Lens.hs
+formatted       6abbc5ff2a97  lens-5.3.6/src/Data/Text/Lazy/Lens.hs
+formatted       c144e0a2b4d7  lens-5.3.6/src/Data/Text/Lens.hs
+formatted       5ce20871a8d2  lens-5.3.6/src/Data/Text/Strict/Lens.hs
+formatted       a4a006800f1d  lens-5.3.6/src/Data/Tree/Lens.hs
+formatted       bfb9f14912e5  lens-5.3.6/src/Data/Typeable/Lens.hs
+formatted       fa5b2f903156  lens-5.3.6/src/Data/Vector/Generic/Lens.hs
+formatted       4348b84e4ed7  lens-5.3.6/src/Data/Vector/Lens.hs
+formatted       7e80fcd30b07  lens-5.3.6/src/GHC/Generics/Lens.hs
+declined        -             lens-5.3.6/src/Language/Haskell/TH/Lens.hs
+formatted       6142187a095c  lens-5.3.6/src/Numeric/Lens.hs
+formatted       11d5331927be  lens-5.3.6/src/Numeric/Natural/Lens.hs
+formatted       353cf4551a49  lens-5.3.6/src/System/Exit/Lens.hs
+formatted       5a4f7cf6359b  lens-5.3.6/src/System/FilePath/Lens.hs
+formatted       221e65299a9b  lens-5.3.6/src/System/IO/Error/Lens.hs
+formatted       aa93fbb09ce5  lens-5.3.6/tests/BigRecord.hs
+formatted       4bb6e1258874  lens-5.3.6/tests/T1024.hs
+formatted       783da428b966  lens-5.3.6/tests/T799.hs
+formatted       735c78d5ee02  lens-5.3.6/tests/T917.hs
+formatted       1d3a1a7a064d  lens-5.3.6/tests/T972.hs
+formatted       1e9429a79aca  lens-5.3.6/tests/doctests.hs
+formatted       a554fa5629d9  lens-5.3.6/tests/hunit.hs
+declined        -             lens-5.3.6/tests/properties.hs
+formatted       4f53ed8ff572  lens-5.3.6/tests/templates.hs
+formatted       0331614d7776  megaparsec-9.8.1/Text/Megaparsec.hs
+formatted       aaf0968c72cf  megaparsec-9.8.1/Text/Megaparsec/Byte.hs
+formatted       af93162c0732  megaparsec-9.8.1/Text/Megaparsec/Byte/Binary.hs
+formatted       6daebd54878b  megaparsec-9.8.1/Text/Megaparsec/Byte/Lexer.hs
+formatted       a8f12808d592  megaparsec-9.8.1/Text/Megaparsec/Char.hs
+formatted       fb0aa0491a35  megaparsec-9.8.1/Text/Megaparsec/Char/Lexer.hs
+formatted       9ada7619d986  megaparsec-9.8.1/Text/Megaparsec/Class.hs
+formatted       04c41e5e9d68  megaparsec-9.8.1/Text/Megaparsec/Common.hs
+formatted       516df951af5f  megaparsec-9.8.1/Text/Megaparsec/Debug.hs
+formatted       063bb778990a  megaparsec-9.8.1/Text/Megaparsec/Error.hs
+formatted       6dc9b6ce5897  megaparsec-9.8.1/Text/Megaparsec/Error.hs-boot
+formatted       92e848d5b88d  megaparsec-9.8.1/Text/Megaparsec/Error/Builder.hs
+formatted       ef8c030d6d02  megaparsec-9.8.1/Text/Megaparsec/Internal.hs
+formatted       2d845f6be8a2  megaparsec-9.8.1/Text/Megaparsec/Internal.hs-boot
+formatted       fb54b4f4cab3  megaparsec-9.8.1/Text/Megaparsec/Lexer.hs
+formatted       0db88dbc985e  megaparsec-9.8.1/Text/Megaparsec/Pos.hs
+formatted       4f1b6ce7ca12  megaparsec-9.8.1/Text/Megaparsec/State.hs
+formatted       e5a839627bb9  megaparsec-9.8.1/Text/Megaparsec/Stream.hs
+formatted       5e21ab523a4c  megaparsec-9.8.1/Text/Megaparsec/Unicode.hs
+formatted       882124e5ceb6  megaparsec-9.8.1/bench/memory/Main.hs
+formatted       d8a32e7340de  megaparsec-9.8.1/bench/speed/Main.hs
+formatted       e865ae48f11b  microlens-0.5.0.0/Setup.hs
+declined        -             microlens-0.5.0.0/src/Lens/Micro.hs
+formatted       a33fe5ffd3d9  microlens-0.5.0.0/src/Lens/Micro/Extras.hs
+formatted       3608b82ef46d  microlens-0.5.0.0/src/Lens/Micro/FieldN.hs
+declined        -             microlens-0.5.0.0/src/Lens/Micro/Internal.hs
+formatted       de09492cc927  microlens-0.5.0.0/src/Lens/Micro/Type.hs
+formatted       9fd4d8759261  mtl-2.3.2/Control/Monad/Accum.hs
+formatted       1c966453ae10  mtl-2.3.2/Control/Monad/Cont.hs
+formatted       6543a3adf1ee  mtl-2.3.2/Control/Monad/Cont/Class.hs
+formatted       a1002896353b  mtl-2.3.2/Control/Monad/Error/Class.hs
+formatted       241b9ab5b29e  mtl-2.3.2/Control/Monad/Except.hs
+formatted       fae093b03648  mtl-2.3.2/Control/Monad/Identity.hs
+formatted       8bb64ac32001  mtl-2.3.2/Control/Monad/RWS.hs
+formatted       f59a78122b11  mtl-2.3.2/Control/Monad/RWS/CPS.hs
+formatted       853a42d0a7d0  mtl-2.3.2/Control/Monad/RWS/Class.hs
+formatted       6fedd348f84f  mtl-2.3.2/Control/Monad/RWS/Lazy.hs
+formatted       ddc740ed2ba9  mtl-2.3.2/Control/Monad/RWS/Strict.hs
+formatted       70448da6c08e  mtl-2.3.2/Control/Monad/Reader.hs
+formatted       048f1d41ceeb  mtl-2.3.2/Control/Monad/Reader/Class.hs
+formatted       fda85a3d8a5b  mtl-2.3.2/Control/Monad/Select.hs
+formatted       dbf53d8970a0  mtl-2.3.2/Control/Monad/State.hs
+formatted       a11cb9d9968b  mtl-2.3.2/Control/Monad/State/Class.hs
+formatted       297011983d2c  mtl-2.3.2/Control/Monad/State/Lazy.hs
+formatted       77f07f071154  mtl-2.3.2/Control/Monad/State/Strict.hs
+formatted       4442f9cb2755  mtl-2.3.2/Control/Monad/Trans.hs
+formatted       c315c681e4a7  mtl-2.3.2/Control/Monad/Writer.hs
+formatted       bd34c32bca35  mtl-2.3.2/Control/Monad/Writer/CPS.hs
+formatted       220119ac3010  mtl-2.3.2/Control/Monad/Writer/Class.hs
+formatted       26c1b816de3a  mtl-2.3.2/Control/Monad/Writer/Lazy.hs
+formatted       e5a4e79a643b  mtl-2.3.2/Control/Monad/Writer/Strict.hs
+formatted       e865ae48f11b  mtl-2.3.2/Setup.hs
+formatted       9007a7528d49  optics-0.4.2.1/benchmarks/folds.hs
+formatted       6819e713d7fd  optics-0.4.2.1/benchmarks/traversals.hs
+formatted       39c6a1f9e980  optics-0.4.2.1/src/Optics.hs
+formatted       fbb3a44aca1a  optics-0.4.2.1/tests/Optics/Tests.hs
+formatted       c6d811f3b338  optics-0.4.2.1/tests/Optics/Tests/Computation.hs
+formatted       26a0cf8a6c0d  optics-0.4.2.1/tests/Optics/Tests/Core.hs
+formatted       714f321c1085  optics-0.4.2.1/tests/Optics/Tests/Eta.hs
+formatted       fa94f2166eef  optics-0.4.2.1/tests/Optics/Tests/Labels/Generic.hs
+formatted       be66017a6045  optics-0.4.2.1/tests/Optics/Tests/Labels/TH.hs
+formatted       1ec08bb9f22e  optics-0.4.2.1/tests/Optics/Tests/Misc.hs
+formatted       9a4b74c6e2a0  optics-0.4.2.1/tests/Optics/Tests/Properties.hs
+declined        -             optics-0.4.2.1/tests/Optics/Tests/Utils.hs
+formatted       e865ae48f11b  optparse-applicative-0.19.0.0/Setup.hs
+formatted       64905439cdc6  optparse-applicative-0.19.0.0/src/Options/Applicative.hs
+formatted       c906682e4329  optparse-applicative-0.19.0.0/src/Options/Applicative/Arrows.hs
+formatted       fa5bdd86f120  optparse-applicative-0.19.0.0/src/Options/Applicative/BashCompletion.hs
+formatted       792f6352d0d9  optparse-applicative-0.19.0.0/src/Options/Applicative/Builder.hs
+formatted       b35877965cca  optparse-applicative-0.19.0.0/src/Options/Applicative/Builder/Completer.hs
+formatted       24b9dc042174  optparse-applicative-0.19.0.0/src/Options/Applicative/Builder/Internal.hs
+formatted       2677a4207b59  optparse-applicative-0.19.0.0/src/Options/Applicative/Common.hs
+formatted       c1063409f73c  optparse-applicative-0.19.0.0/src/Options/Applicative/Extra.hs
+formatted       02404b06b751  optparse-applicative-0.19.0.0/src/Options/Applicative/Help.hs
+formatted       309f18523f28  optparse-applicative-0.19.0.0/src/Options/Applicative/Help/Chunk.hs
+formatted       45fed0cf69dd  optparse-applicative-0.19.0.0/src/Options/Applicative/Help/Core.hs
+formatted       c6289fc77a0b  optparse-applicative-0.19.0.0/src/Options/Applicative/Help/Levenshtein.hs
+formatted       dbad440603b5  optparse-applicative-0.19.0.0/src/Options/Applicative/Help/Pretty.hs
+formatted       ea64d277c8d8  optparse-applicative-0.19.0.0/src/Options/Applicative/Help/Types.hs
+formatted       5f19dd3bfbfc  optparse-applicative-0.19.0.0/src/Options/Applicative/Internal.hs
+formatted       cfaae94bf094  optparse-applicative-0.19.0.0/src/Options/Applicative/NonEmpty.hs
+formatted       1b1444725881  optparse-applicative-0.19.0.0/src/Options/Applicative/Types.hs
+formatted       88e47dac52ad  optparse-applicative-0.19.0.0/tests/Examples/Alternatives.hs
+formatted       9cdd4cffe98a  optparse-applicative-0.19.0.0/tests/Examples/Cabal.hs
+formatted       6eb87c31763d  optparse-applicative-0.19.0.0/tests/Examples/Commands.hs
+formatted       3e7e8c6885db  optparse-applicative-0.19.0.0/tests/Examples/Formatting.hs
+formatted       63619af33822  optparse-applicative-0.19.0.0/tests/Examples/Hello.hs
+formatted       515fef001627  optparse-applicative-0.19.0.0/tests/Examples/LongSub.hs
+formatted       c2e700c8f642  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/AllGrouped.hs
+formatted       f5ab674c163c  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/Basic.hs
+formatted       dbff3ca47a7d  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/CommandGroups.hs
+formatted       87c22c856d69  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/DuplicateCommandGroups.hs
+formatted       ded6a73332cc  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/Duplicates.hs
+formatted       8ea0fc79c8f6  optparse-applicative-0.19.0.0/tests/Examples/ParserGroup/Nested.hs
+formatted       25bcbf4b701f  optparse-applicative-0.19.0.0/tests/test.hs
+formatted       40d0309b0851  pandoc-3.10.2/benchmark/benchmark-pandoc.hs
+formatted       e9cc6bbe8397  pandoc-3.10.2/src/Text/Pandoc.hs
+formatted       8c46f3c9674c  pandoc-3.10.2/src/Text/Pandoc/App.hs
+formatted       c058b2ade26f  pandoc-3.10.2/src/Text/Pandoc/App/CommandLineOptions.hs
+formatted       0d1b64ebcf3b  pandoc-3.10.2/src/Text/Pandoc/App/Input.hs
+formatted       6ed96a696002  pandoc-3.10.2/src/Text/Pandoc/App/Opt.hs
+formatted       3a8ec3e92f62  pandoc-3.10.2/src/Text/Pandoc/App/OutputSettings.hs
+formatted       30536e2da049  pandoc-3.10.2/src/Text/Pandoc/Asciify.hs
+formatted       0798d787f37f  pandoc-3.10.2/src/Text/Pandoc/CSS.hs
+formatted       eb9916b55f28  pandoc-3.10.2/src/Text/Pandoc/CSV.hs
+formatted       425285a86e63  pandoc-3.10.2/src/Text/Pandoc/Char.hs
+formatted       829d97307b71  pandoc-3.10.2/src/Text/Pandoc/Chunks.hs
+formatted       78112fbbaa4f  pandoc-3.10.2/src/Text/Pandoc/Citeproc.hs
+formatted       73b49670ac75  pandoc-3.10.2/src/Text/Pandoc/Citeproc/BibTeX.hs
+formatted       f4a7c604316e  pandoc-3.10.2/src/Text/Pandoc/Citeproc/CslJson.hs
+formatted       a47804651b9d  pandoc-3.10.2/src/Text/Pandoc/Citeproc/Data.hs
+formatted       b5fa30d4eebe  pandoc-3.10.2/src/Text/Pandoc/Citeproc/Locator.hs
+formatted       f41105d87bc7  pandoc-3.10.2/src/Text/Pandoc/Citeproc/MetaValue.hs
+formatted       ba128290e789  pandoc-3.10.2/src/Text/Pandoc/Citeproc/Name.hs
+formatted       76559347a97c  pandoc-3.10.2/src/Text/Pandoc/Citeproc/Util.hs
+formatted       1b13d0dc5e1b  pandoc-3.10.2/src/Text/Pandoc/Class.hs
+formatted       121629e38e36  pandoc-3.10.2/src/Text/Pandoc/Class/CommonState.hs
+formatted       e2b41d9d63a2  pandoc-3.10.2/src/Text/Pandoc/Class/IO.hs
+formatted       554e3fd3f722  pandoc-3.10.2/src/Text/Pandoc/Class/PandocIO.hs
+formatted       c65acaaeb3de  pandoc-3.10.2/src/Text/Pandoc/Class/PandocMonad.hs
+formatted       f896da08c30f  pandoc-3.10.2/src/Text/Pandoc/Class/PandocPure.hs
+formatted       0b8f40903d65  pandoc-3.10.2/src/Text/Pandoc/Class/Sandbox.hs
+formatted       407b6ea8dcf3  pandoc-3.10.2/src/Text/Pandoc/Data.hs
+formatted       a40ce7ee511d  pandoc-3.10.2/src/Text/Pandoc/Data/BakedIn.hs
+formatted       58434b0c4602  pandoc-3.10.2/src/Text/Pandoc/Emoji.hs
+formatted       232d7de23b73  pandoc-3.10.2/src/Text/Pandoc/Error.hs
+formatted       72ff19ca80f5  pandoc-3.10.2/src/Text/Pandoc/Extensions.hs
+formatted       3bdc8aed022b  pandoc-3.10.2/src/Text/Pandoc/Filter.hs
+formatted       1be979d2afbf  pandoc-3.10.2/src/Text/Pandoc/Filter/Environment.hs
+formatted       3921a2426b07  pandoc-3.10.2/src/Text/Pandoc/Filter/JSON.hs
+formatted       9bf058c6704f  pandoc-3.10.2/src/Text/Pandoc/Format.hs
+formatted       3df0ace70613  pandoc-3.10.2/src/Text/Pandoc/Highlighting.hs
+formatted       834edab63758  pandoc-3.10.2/src/Text/Pandoc/Image.hs
+formatted       f331e86b53d6  pandoc-3.10.2/src/Text/Pandoc/ImageSize.hs
+formatted       f519615c70eb  pandoc-3.10.2/src/Text/Pandoc/Logging.hs
+formatted       198eaaad0ea2  pandoc-3.10.2/src/Text/Pandoc/MIME.hs
+formatted       fc58bac11b5e  pandoc-3.10.2/src/Text/Pandoc/MediaBag.hs
+formatted       e52f385e0fff  pandoc-3.10.2/src/Text/Pandoc/Options.hs
+formatted       d4caa78b9b84  pandoc-3.10.2/src/Text/Pandoc/PDF.hs
+formatted       1378d4b80344  pandoc-3.10.2/src/Text/Pandoc/Parsing.hs
+formatted       d0bfe0ebb5ca  pandoc-3.10.2/src/Text/Pandoc/Parsing/Capabilities.hs
+formatted       78249fa68c58  pandoc-3.10.2/src/Text/Pandoc/Parsing/Citations.hs
+formatted       3947601983af  pandoc-3.10.2/src/Text/Pandoc/Parsing/Future.hs
+formatted       854dc9763274  pandoc-3.10.2/src/Text/Pandoc/Parsing/General.hs
+formatted       ebf243a003b2  pandoc-3.10.2/src/Text/Pandoc/Parsing/GridTable.hs
+formatted       6ae9fc28f92d  pandoc-3.10.2/src/Text/Pandoc/Parsing/Lists.hs
+formatted       957cafdf0f36  pandoc-3.10.2/src/Text/Pandoc/Parsing/Math.hs
+formatted       fad3834b08e5  pandoc-3.10.2/src/Text/Pandoc/Parsing/Smart.hs
+formatted       96971d0301f6  pandoc-3.10.2/src/Text/Pandoc/Parsing/State.hs
+formatted       a83effd57b53  pandoc-3.10.2/src/Text/Pandoc/Process.hs
+formatted       5798ce9f1d3b  pandoc-3.10.2/src/Text/Pandoc/Readers.hs
+formatted       cf02c585d42e  pandoc-3.10.2/src/Text/Pandoc/Readers/AsciiDoc.hs
+formatted       fb9989e02f4c  pandoc-3.10.2/src/Text/Pandoc/Readers/BibTeX.hs
+formatted       6df32968e0c9  pandoc-3.10.2/src/Text/Pandoc/Readers/CSV.hs
+formatted       9daab54008b1  pandoc-3.10.2/src/Text/Pandoc/Readers/CommonMark.hs
+formatted       663d47f4276b  pandoc-3.10.2/src/Text/Pandoc/Readers/Creole.hs
+formatted       9a91a657b202  pandoc-3.10.2/src/Text/Pandoc/Readers/CslJson.hs
+formatted       8f06acca3961  pandoc-3.10.2/src/Text/Pandoc/Readers/Djot.hs
+formatted       5c67409b0a54  pandoc-3.10.2/src/Text/Pandoc/Readers/DocBook.hs
+formatted       fbd149ee0503  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx.hs
+formatted       fc9009e1ca7b  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Combine.hs
+formatted       2d1f14f169d4  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Fields.hs
+formatted       1182acf4b772  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Lists.hs
+formatted       33062d5907a1  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Parse.hs
+formatted       cdafbece822b  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Parse/Styles.hs
+formatted       59a529967b45  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Symbols.hs
+formatted       5ca3b138e6d7  pandoc-3.10.2/src/Text/Pandoc/Readers/Docx/Util.hs
+formatted       646ac8cb5cfc  pandoc-3.10.2/src/Text/Pandoc/Readers/DokuWiki.hs
+formatted       84bb8bb4469c  pandoc-3.10.2/src/Text/Pandoc/Readers/EPUB.hs
+formatted       f3a6089222df  pandoc-3.10.2/src/Text/Pandoc/Readers/EndNote.hs
+formatted       14038d82e889  pandoc-3.10.2/src/Text/Pandoc/Readers/FB2.hs
+formatted       aaf76caf87c9  pandoc-3.10.2/src/Text/Pandoc/Readers/HTML.hs
+formatted       dffd88697abd  pandoc-3.10.2/src/Text/Pandoc/Readers/HTML/Parsing.hs
+formatted       7906dc4b5ee7  pandoc-3.10.2/src/Text/Pandoc/Readers/HTML/Table.hs
+formatted       d02eee6a5e0a  pandoc-3.10.2/src/Text/Pandoc/Readers/HTML/TagCategories.hs
+formatted       4fb367cd5dd3  pandoc-3.10.2/src/Text/Pandoc/Readers/HTML/Types.hs
+formatted       eff46e987f16  pandoc-3.10.2/src/Text/Pandoc/Readers/Haddock.hs
+formatted       0f6ff76a8634  pandoc-3.10.2/src/Text/Pandoc/Readers/Ipynb.hs
+formatted       cc07dc20c65e  pandoc-3.10.2/src/Text/Pandoc/Readers/JATS.hs
+formatted       f20ff0b6f36b  pandoc-3.10.2/src/Text/Pandoc/Readers/Jira.hs
+formatted       a5e8a79ffa46  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX.hs
+formatted       9555c9856dcb  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Citation.hs
+formatted       69ebcdbb13ca  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Inline.hs
+formatted       c4741ac43b79  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Lang.hs
+formatted       7551c37a91a0  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Macro.hs
+formatted       70d5e382dd09  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Math.hs
+formatted       0ff31df07620  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Parsing.hs
+formatted       c5052708c057  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/SIunitx.hs
+formatted       464b8d34afbe  pandoc-3.10.2/src/Text/Pandoc/Readers/LaTeX/Table.hs
+formatted       9c0b878a8cae  pandoc-3.10.2/src/Text/Pandoc/Readers/Man.hs
+formatted       6961ea97f0d3  pandoc-3.10.2/src/Text/Pandoc/Readers/Markdown.hs
+formatted       b7b9f1155f1b  pandoc-3.10.2/src/Text/Pandoc/Readers/Mdoc.hs
+formatted       f6551b5d7655  pandoc-3.10.2/src/Text/Pandoc/Readers/Mdoc/Lex.hs
+formatted       728f79b431ec  pandoc-3.10.2/src/Text/Pandoc/Readers/Mdoc/Macros.hs
+formatted       1a3b54c227b9  pandoc-3.10.2/src/Text/Pandoc/Readers/Mdoc/Standards.hs
+formatted       d18bc1b58890  pandoc-3.10.2/src/Text/Pandoc/Readers/MediaWiki.hs
+formatted       ff97e43c99ad  pandoc-3.10.2/src/Text/Pandoc/Readers/Metadata.hs
+formatted       9f0f39d21fdd  pandoc-3.10.2/src/Text/Pandoc/Readers/Muse.hs
+formatted       b5fdcc7976c0  pandoc-3.10.2/src/Text/Pandoc/Readers/Native.hs
+formatted       00dc84441dee  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT.hs
+formatted       4b763e5899cb  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Arrows/State.hs
+formatted       978b213b2283  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Arrows/Utils.hs
+formatted       bf610e3c1650  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Base.hs
+formatted       09ce4137cc6f  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/ContentReader.hs
+formatted       9f7e17b79fd2  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Generic/Fallible.hs
+formatted       3cb13f8a11b2  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Generic/Namespaces.hs
+formatted       6d9540eaec43  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Generic/SetMap.hs
+formatted       e530287347dc  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Generic/Utils.hs
+formatted       cea88b9dd60d  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Generic/XMLConverter.hs
+formatted       32a05a5e6b5d  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/Namespaces.hs
+formatted       1a2225a211e5  pandoc-3.10.2/src/Text/Pandoc/Readers/ODT/StyleReader.hs
+formatted       fc024f0c1f5f  pandoc-3.10.2/src/Text/Pandoc/Readers/OOXML/Shared.hs
+formatted       af1d77effb19  pandoc-3.10.2/src/Text/Pandoc/Readers/OPML.hs
+formatted       f0c2a727f84e  pandoc-3.10.2/src/Text/Pandoc/Readers/Org.hs
+formatted       b11790cf298d  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/BlockStarts.hs
+formatted       87d98588269f  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/Blocks.hs
+formatted       3ff195adb2ff  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/DocumentTree.hs
+formatted       0e89e887eae3  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/ExportSettings.hs
+formatted       2cc65319731e  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/Inlines.hs
+formatted       e34a610bde26  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/Meta.hs
+formatted       ddd05cefe687  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/ParserState.hs
+formatted       cddaebd35c79  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/Parsing.hs
+formatted       56b3882f7c5f  pandoc-3.10.2/src/Text/Pandoc/Readers/Org/Shared.hs
+formatted       b88c97613fb0  pandoc-3.10.2/src/Text/Pandoc/Readers/Pod.hs
+formatted       53643fbdc8d6  pandoc-3.10.2/src/Text/Pandoc/Readers/Pptx.hs
+formatted       9f0a1be15c9c  pandoc-3.10.2/src/Text/Pandoc/Readers/Pptx/Parse.hs
+formatted       06b32e0a02bb  pandoc-3.10.2/src/Text/Pandoc/Readers/Pptx/Shapes.hs
+formatted       68136f2cd896  pandoc-3.10.2/src/Text/Pandoc/Readers/Pptx/Slides.hs
+formatted       2a1143e52057  pandoc-3.10.2/src/Text/Pandoc/Readers/Pptx/SmartArt.hs
+formatted       57c12a897562  pandoc-3.10.2/src/Text/Pandoc/Readers/RIS.hs
+formatted       c533a0d22bb6  pandoc-3.10.2/src/Text/Pandoc/Readers/RST.hs
+formatted       e222e84bebc7  pandoc-3.10.2/src/Text/Pandoc/Readers/RTF.hs
+formatted       a56e5e804b58  pandoc-3.10.2/src/Text/Pandoc/Readers/Roff.hs
+formatted       a8d91c97594d  pandoc-3.10.2/src/Text/Pandoc/Readers/Roff/Escape.hs
+formatted       75e54639331c  pandoc-3.10.2/src/Text/Pandoc/Readers/TWiki.hs
+formatted       25cccdcbef5d  pandoc-3.10.2/src/Text/Pandoc/Readers/Textile.hs
+formatted       fcd546021514  pandoc-3.10.2/src/Text/Pandoc/Readers/TikiWiki.hs
+formatted       92e7cf81f874  pandoc-3.10.2/src/Text/Pandoc/Readers/Txt2Tags.hs
+formatted       4af418633a39  pandoc-3.10.2/src/Text/Pandoc/Readers/Typst.hs
+formatted       2f111f50b7d1  pandoc-3.10.2/src/Text/Pandoc/Readers/Typst/Math.hs
+formatted       084c50c01141  pandoc-3.10.2/src/Text/Pandoc/Readers/Typst/Parsing.hs
+formatted       d9474be2d4dd  pandoc-3.10.2/src/Text/Pandoc/Readers/Vimwiki.hs
+formatted       a6c0f74dc4bf  pandoc-3.10.2/src/Text/Pandoc/Readers/XML.hs
+formatted       6da1519e9667  pandoc-3.10.2/src/Text/Pandoc/Readers/Xlsx.hs
+formatted       835a84d727ab  pandoc-3.10.2/src/Text/Pandoc/Readers/Xlsx/Cells.hs
+formatted       da7c96257b3c  pandoc-3.10.2/src/Text/Pandoc/Readers/Xlsx/Parse.hs
+formatted       cec0a64a8f3d  pandoc-3.10.2/src/Text/Pandoc/Readers/Xlsx/Sheets.hs
+formatted       a3abe5c4303a  pandoc-3.10.2/src/Text/Pandoc/RoffChar.hs
+formatted       3b2c2c8b4a58  pandoc-3.10.2/src/Text/Pandoc/Scripting.hs
+formatted       3131b6626379  pandoc-3.10.2/src/Text/Pandoc/SelfContained.hs
+formatted       9b4ca9cf24ae  pandoc-3.10.2/src/Text/Pandoc/Shared.hs
+formatted       d4b69c2106f2  pandoc-3.10.2/src/Text/Pandoc/Slides.hs
+formatted       f972700afdb1  pandoc-3.10.2/src/Text/Pandoc/Sources.hs
+formatted       4723b914e051  pandoc-3.10.2/src/Text/Pandoc/TeX.hs
+formatted       1af167eb5091  pandoc-3.10.2/src/Text/Pandoc/Templates.hs
+formatted       762abd63d880  pandoc-3.10.2/src/Text/Pandoc/Transforms.hs
+formatted       353cd881b0ba  pandoc-3.10.2/src/Text/Pandoc/Translations.hs
+formatted       062da3b78ef5  pandoc-3.10.2/src/Text/Pandoc/Translations/Types.hs
+formatted       e8b9d88b67b0  pandoc-3.10.2/src/Text/Pandoc/URI.hs
+formatted       4aa82cbc83c8  pandoc-3.10.2/src/Text/Pandoc/UTF8.hs
+formatted       e958a4d78635  pandoc-3.10.2/src/Text/Pandoc/UUID.hs
+formatted       c4b212f4e18f  pandoc-3.10.2/src/Text/Pandoc/Version.hs
+formatted       64127df72dfc  pandoc-3.10.2/src/Text/Pandoc/Writers.hs
+formatted       740042f14295  pandoc-3.10.2/src/Text/Pandoc/Writers/ANSI.hs
+formatted       a5a598c6ebd6  pandoc-3.10.2/src/Text/Pandoc/Writers/AnnotatedTable.hs
+formatted       5e0b72f01d26  pandoc-3.10.2/src/Text/Pandoc/Writers/AsciiDoc.hs
+formatted       737b11e36b7a  pandoc-3.10.2/src/Text/Pandoc/Writers/BBCode.hs
+formatted       74bebaa57c03  pandoc-3.10.2/src/Text/Pandoc/Writers/BibTeX.hs
+formatted       c3a3e99a6a7b  pandoc-3.10.2/src/Text/Pandoc/Writers/Blaze.hs
+formatted       fd730c859a35  pandoc-3.10.2/src/Text/Pandoc/Writers/ChunkedHTML.hs
+formatted       936b3d7e333a  pandoc-3.10.2/src/Text/Pandoc/Writers/CommonMark.hs
+formatted       41db06e725da  pandoc-3.10.2/src/Text/Pandoc/Writers/ConTeXt.hs
+formatted       d9b0707d098c  pandoc-3.10.2/src/Text/Pandoc/Writers/CslJson.hs
+formatted       225f5fe7008c  pandoc-3.10.2/src/Text/Pandoc/Writers/Djot.hs
+formatted       f33c2046ecde  pandoc-3.10.2/src/Text/Pandoc/Writers/DocBook.hs
+formatted       7bf8f7c3beff  pandoc-3.10.2/src/Text/Pandoc/Writers/Docx.hs
+formatted       08e3ddf08ad6  pandoc-3.10.2/src/Text/Pandoc/Writers/Docx/OpenXML.hs
+formatted       47c7fc1f3217  pandoc-3.10.2/src/Text/Pandoc/Writers/Docx/StyleMap.hs
+formatted       b7f5506567c9  pandoc-3.10.2/src/Text/Pandoc/Writers/Docx/Table.hs
+formatted       a7b1f18b1b94  pandoc-3.10.2/src/Text/Pandoc/Writers/Docx/Types.hs
+formatted       fc05af348123  pandoc-3.10.2/src/Text/Pandoc/Writers/DokuWiki.hs
+formatted       9912d53d0231  pandoc-3.10.2/src/Text/Pandoc/Writers/EPUB.hs
+formatted       18a7003d6454  pandoc-3.10.2/src/Text/Pandoc/Writers/FB2.hs
+formatted       c4b4f9d5a6e4  pandoc-3.10.2/src/Text/Pandoc/Writers/GridTable.hs
+formatted       f9963e822f59  pandoc-3.10.2/src/Text/Pandoc/Writers/HTML.hs
+formatted       dca952fca265  pandoc-3.10.2/src/Text/Pandoc/Writers/Haddock.hs
+formatted       f94230c4f153  pandoc-3.10.2/src/Text/Pandoc/Writers/ICML.hs
+formatted       dd0566d62914  pandoc-3.10.2/src/Text/Pandoc/Writers/Ipynb.hs
+formatted       316916f894bd  pandoc-3.10.2/src/Text/Pandoc/Writers/JATS.hs
+formatted       4a683f5d9700  pandoc-3.10.2/src/Text/Pandoc/Writers/JATS/References.hs
+formatted       e7a9cf0c0644  pandoc-3.10.2/src/Text/Pandoc/Writers/JATS/Table.hs
+formatted       3aae3967440a  pandoc-3.10.2/src/Text/Pandoc/Writers/JATS/Types.hs
+formatted       9cd811748938  pandoc-3.10.2/src/Text/Pandoc/Writers/Jira.hs
+formatted       2736c4a68c2a  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX.hs
+formatted       cafc5a3796df  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Caption.hs
+formatted       e809a90650c6  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Citation.hs
+formatted       e89e979a29e1  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Lang.hs
+formatted       8c164dd5cc9c  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Notes.hs
+formatted       549c44bdd262  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Table.hs
+formatted       a4eb629d0029  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Types.hs
+formatted       62321b6f0ef0  pandoc-3.10.2/src/Text/Pandoc/Writers/LaTeX/Util.hs
+formatted       85fcfddb12db  pandoc-3.10.2/src/Text/Pandoc/Writers/Man.hs
+formatted       e7926f029264  pandoc-3.10.2/src/Text/Pandoc/Writers/Markdown.hs
+formatted       c19b6a394787  pandoc-3.10.2/src/Text/Pandoc/Writers/Markdown/Inline.hs
+formatted       c57101b9ec66  pandoc-3.10.2/src/Text/Pandoc/Writers/Markdown/Table.hs
+formatted       02c7eb593d88  pandoc-3.10.2/src/Text/Pandoc/Writers/Markdown/Types.hs
+formatted       3d9d722a4e7e  pandoc-3.10.2/src/Text/Pandoc/Writers/Math.hs
+formatted       aa965fb1df0e  pandoc-3.10.2/src/Text/Pandoc/Writers/MediaWiki.hs
+formatted       377073fe2e6d  pandoc-3.10.2/src/Text/Pandoc/Writers/Ms.hs
+formatted       6403175b00b9  pandoc-3.10.2/src/Text/Pandoc/Writers/Muse.hs
+formatted       4acde5355993  pandoc-3.10.2/src/Text/Pandoc/Writers/Native.hs
+formatted       1364fe58b369  pandoc-3.10.2/src/Text/Pandoc/Writers/ODT.hs
+formatted       780b39e3c620  pandoc-3.10.2/src/Text/Pandoc/Writers/OOXML.hs
+formatted       4c4123778a13  pandoc-3.10.2/src/Text/Pandoc/Writers/OPML.hs
+formatted       11f3bed781a4  pandoc-3.10.2/src/Text/Pandoc/Writers/OpenDocument.hs
+formatted       1ceb9cecad0c  pandoc-3.10.2/src/Text/Pandoc/Writers/Org.hs
+formatted       74e7486aeef1  pandoc-3.10.2/src/Text/Pandoc/Writers/Powerpoint.hs
+formatted       0abff9869e1b  pandoc-3.10.2/src/Text/Pandoc/Writers/Powerpoint/Output.hs
+formatted       ba52b96a9642  pandoc-3.10.2/src/Text/Pandoc/Writers/Powerpoint/Presentation.hs
+formatted       e5e637fb6da9  pandoc-3.10.2/src/Text/Pandoc/Writers/RST.hs
+formatted       4864c0915868  pandoc-3.10.2/src/Text/Pandoc/Writers/RTF.hs
+formatted       526459d5f74f  pandoc-3.10.2/src/Text/Pandoc/Writers/Roff.hs
+formatted       64258df1d09e  pandoc-3.10.2/src/Text/Pandoc/Writers/Shared.hs
+formatted       6ff714d9bc8d  pandoc-3.10.2/src/Text/Pandoc/Writers/TEI.hs
+formatted       c11f0dc1873d  pandoc-3.10.2/src/Text/Pandoc/Writers/Texinfo.hs
+formatted       3a596ddb6e0a  pandoc-3.10.2/src/Text/Pandoc/Writers/Textile.hs
+formatted       e65d7bf1c614  pandoc-3.10.2/src/Text/Pandoc/Writers/Txt2Tags.hs
+formatted       e7008c6412af  pandoc-3.10.2/src/Text/Pandoc/Writers/Typst.hs
+formatted       94845d56aeb1  pandoc-3.10.2/src/Text/Pandoc/Writers/Vimdoc.hs
+formatted       030057adfda6  pandoc-3.10.2/src/Text/Pandoc/Writers/XML.hs
+formatted       159b08d5178c  pandoc-3.10.2/src/Text/Pandoc/Writers/XWiki.hs
+formatted       d353c0adc4a4  pandoc-3.10.2/src/Text/Pandoc/Writers/ZimWiki.hs
+formatted       c0bf42044a17  pandoc-3.10.2/src/Text/Pandoc/XML.hs
+formatted       29da3381e068  pandoc-3.10.2/src/Text/Pandoc/XMLFormat.hs
+formatted       57155b5f1fa9  pandoc-3.10.2/test/Tests/Command.hs
+formatted       cc2af1e38ce1  pandoc-3.10.2/test/Tests/Helpers.hs
+formatted       08a6d3f3d84f  pandoc-3.10.2/test/Tests/MediaBag.hs
+formatted       58f15e3f067a  pandoc-3.10.2/test/Tests/Old.hs
+formatted       333649c94dd9  pandoc-3.10.2/test/Tests/Readers/Creole.hs
+formatted       c5655e1aeeef  pandoc-3.10.2/test/Tests/Readers/Docx.hs
+formatted       bee6f3e148cf  pandoc-3.10.2/test/Tests/Readers/DokuWiki.hs
+formatted       150d1390d716  pandoc-3.10.2/test/Tests/Readers/EPUB.hs
+formatted       0d2db3fa6504  pandoc-3.10.2/test/Tests/Readers/FB2.hs
+formatted       155489214643  pandoc-3.10.2/test/Tests/Readers/HTML.hs
+formatted       a047fe6e2033  pandoc-3.10.2/test/Tests/Readers/JATS.hs
+formatted       3ee2ef6dea11  pandoc-3.10.2/test/Tests/Readers/Jira.hs
+formatted       a0bebbb719e9  pandoc-3.10.2/test/Tests/Readers/LaTeX.hs
+formatted       54c9a9360dac  pandoc-3.10.2/test/Tests/Readers/Man.hs
+formatted       67e0bd9ae4b8  pandoc-3.10.2/test/Tests/Readers/Markdown.hs
+formatted       7aec4f85c064  pandoc-3.10.2/test/Tests/Readers/Mdoc.hs
+formatted       725337c69fd0  pandoc-3.10.2/test/Tests/Readers/Muse.hs
+formatted       d850617edb68  pandoc-3.10.2/test/Tests/Readers/ODT.hs
+formatted       4cec297f4fab  pandoc-3.10.2/test/Tests/Readers/Org.hs
+formatted       e5c1db2d073f  pandoc-3.10.2/test/Tests/Readers/Org/Block.hs
+formatted       b4b9cddd5711  pandoc-3.10.2/test/Tests/Readers/Org/Block/CodeBlock.hs
+formatted       8bfbfbb823bf  pandoc-3.10.2/test/Tests/Readers/Org/Block/Figure.hs
+formatted       1db2ce6020c8  pandoc-3.10.2/test/Tests/Readers/Org/Block/Header.hs
+formatted       6040ddbe898e  pandoc-3.10.2/test/Tests/Readers/Org/Block/List.hs
+formatted       3e9d7a83d060  pandoc-3.10.2/test/Tests/Readers/Org/Block/Table.hs
+formatted       2059c719f367  pandoc-3.10.2/test/Tests/Readers/Org/Directive.hs
+formatted       bfd915a68797  pandoc-3.10.2/test/Tests/Readers/Org/Inline.hs
+formatted       c762e1d74166  pandoc-3.10.2/test/Tests/Readers/Org/Inline/Citation.hs
+formatted       b2fb48f770ee  pandoc-3.10.2/test/Tests/Readers/Org/Inline/Note.hs
+formatted       c86aabaf01bb  pandoc-3.10.2/test/Tests/Readers/Org/Inline/Smart.hs
+formatted       06c0169c3199  pandoc-3.10.2/test/Tests/Readers/Org/Meta.hs
+formatted       9f0320fe3803  pandoc-3.10.2/test/Tests/Readers/Org/Shared.hs
+formatted       1eb1a05f4635  pandoc-3.10.2/test/Tests/Readers/Pod.hs
+formatted       ff6bbea7ddc9  pandoc-3.10.2/test/Tests/Readers/Pptx.hs
+formatted       1320e3e7aa2d  pandoc-3.10.2/test/Tests/Readers/RST.hs
+formatted       63d3f17d29f9  pandoc-3.10.2/test/Tests/Readers/RTF.hs
+formatted       aca713b17e29  pandoc-3.10.2/test/Tests/Readers/Txt2Tags.hs
+formatted       d805d2ea3361  pandoc-3.10.2/test/Tests/Readers/Xlsx.hs
+formatted       2692dc26ee41  pandoc-3.10.2/test/Tests/Shared.hs
+formatted       ad523df96992  pandoc-3.10.2/test/Tests/Writers/AnnotatedTable.hs
+formatted       b21e7e06def4  pandoc-3.10.2/test/Tests/Writers/AsciiDoc.hs
+formatted       70088c61a9f3  pandoc-3.10.2/test/Tests/Writers/BBCode.hs
+formatted       6dcb350b3086  pandoc-3.10.2/test/Tests/Writers/ConTeXt.hs
+formatted       5881a7a78ecb  pandoc-3.10.2/test/Tests/Writers/DocBook.hs
+formatted       3734475521c2  pandoc-3.10.2/test/Tests/Writers/Docx.hs
+formatted       c93a204195d1  pandoc-3.10.2/test/Tests/Writers/FB2.hs
+formatted       328c6dec4e08  pandoc-3.10.2/test/Tests/Writers/HTML.hs
+formatted       e20190db8973  pandoc-3.10.2/test/Tests/Writers/JATS.hs
+formatted       f691886863f7  pandoc-3.10.2/test/Tests/Writers/Jira.hs
+formatted       9b6e923fe756  pandoc-3.10.2/test/Tests/Writers/LaTeX.hs
+formatted       c301d7bef6ff  pandoc-3.10.2/test/Tests/Writers/Markdown.hs
+formatted       c8345b0f787e  pandoc-3.10.2/test/Tests/Writers/Markua.hs
+formatted       fb4d32e30070  pandoc-3.10.2/test/Tests/Writers/Ms.hs
+formatted       ef0e40bc038b  pandoc-3.10.2/test/Tests/Writers/Muse.hs
+formatted       9309764377bd  pandoc-3.10.2/test/Tests/Writers/Native.hs
+formatted       123f7ce6880c  pandoc-3.10.2/test/Tests/Writers/OOXML.hs
+formatted       3033600cbe42  pandoc-3.10.2/test/Tests/Writers/Org.hs
+formatted       0e4b414e2dea  pandoc-3.10.2/test/Tests/Writers/Plain.hs
+formatted       1b5be67cf1c4  pandoc-3.10.2/test/Tests/Writers/Powerpoint.hs
+formatted       05aa845f56f2  pandoc-3.10.2/test/Tests/Writers/RST.hs
+formatted       7f7f9e6de407  pandoc-3.10.2/test/Tests/Writers/TEI.hs
+formatted       9286c785c97e  pandoc-3.10.2/test/Tests/Writers/Txt2Tags.hs
+formatted       14edd0465124  pandoc-3.10.2/test/Tests/XML.hs
+formatted       16057c777a9d  pandoc-3.10.2/test/command/3510-src.hs
+formatted       3f023b0abbe3  pandoc-3.10.2/test/command/6466-beg.hs
+formatted       06289f98fcac  pandoc-3.10.2/test/command/6466-end.hs
+formatted       546301610b9b  pandoc-3.10.2/test/command/6466-mid.hs
+formatted       b6f515e00962  pandoc-3.10.2/test/command/6466-whole.hs
+formatted       53aaf2e2c6e0  pandoc-3.10.2/test/test-pandoc.hs
+formatted       2556d5cb9f72  pandoc-3.10.2/xml-light/Text/Pandoc/XML/Light.hs
+formatted       3cd6a981ab05  pandoc-3.10.2/xml-light/Text/Pandoc/XML/Light/Output.hs
+formatted       3f7a60f285f2  pandoc-3.10.2/xml-light/Text/Pandoc/XML/Light/Proc.hs
+formatted       79460d761fcd  pandoc-3.10.2/xml-light/Text/Pandoc/XML/Light/Types.hs
+formatted       e865ae48f11b  pandoc-types-1.23.1.2/Setup.hs
+formatted       8376040e03f4  pandoc-types-1.23.1.2/benchmark/bench.hs
+formatted       779df2fa2e63  pandoc-types-1.23.1.2/src/Text/Pandoc/Arbitrary.hs
+formatted       2b99499bebfa  pandoc-types-1.23.1.2/src/Text/Pandoc/Builder.hs
+formatted       7400bafe0ab3  pandoc-types-1.23.1.2/src/Text/Pandoc/Definition.hs
+formatted       42a13347f367  pandoc-types-1.23.1.2/src/Text/Pandoc/Generic.hs
+formatted       8fad29f2adc4  pandoc-types-1.23.1.2/src/Text/Pandoc/JSON.hs
+formatted       521e0dcaf505  pandoc-types-1.23.1.2/src/Text/Pandoc/Walk.hs
+formatted       dcf10d45e788  pandoc-types-1.23.1.2/test/Data/String/QQ.hs
+formatted       aa803b05c956  pandoc-types-1.23.1.2/test/test-pandoc-types.hs
+formatted       7474b7e1d4f5  parsec3-1.0.1.8/Setup.hs
+formatted       48d72ad7fc59  parsec3-1.0.1.8/Text/Parsec.hs
+formatted       afc3d5a902fe  parsec3-1.0.1.8/Text/Parsec/ByteString.hs
+formatted       a9c7a6dd5b30  parsec3-1.0.1.8/Text/Parsec/ByteString/Lazy.hs
+formatted       5e6bdea20cf6  parsec3-1.0.1.8/Text/Parsec/Char.hs
+formatted       4abab8f9ceb8  parsec3-1.0.1.8/Text/Parsec/Combinator.hs
+formatted       94a0c2798c5a  parsec3-1.0.1.8/Text/Parsec/Error.hs
+formatted       048c32e5a768  parsec3-1.0.1.8/Text/Parsec/Expr.hs
+formatted       156014d6ed26  parsec3-1.0.1.8/Text/Parsec/Language.hs
+formatted       40bf4d018d51  parsec3-1.0.1.8/Text/Parsec/Perm.hs
+formatted       c50efff79fe5  parsec3-1.0.1.8/Text/Parsec/Pos.hs
+formatted       7c2c5a4c585c  parsec3-1.0.1.8/Text/Parsec/Prim.hs
+formatted       c911dc63e8d5  parsec3-1.0.1.8/Text/Parsec/String.hs
+formatted       72422924874a  parsec3-1.0.1.8/Text/Parsec/Text.hs
+formatted       6fd69590f1d3  parsec3-1.0.1.8/Text/Parsec/Text/Lazy.hs
+formatted       b6e8b0e16d14  parsec3-1.0.1.8/Text/Parsec/Token.hs
+formatted       22b02f116512  parser-combinators-1.3.1/Control/Applicative/Combinators.hs
+formatted       2b483a550d21  parser-combinators-1.3.1/Control/Applicative/Combinators/NonEmpty.hs
+formatted       7d01c0dddfcd  parser-combinators-1.3.1/Control/Applicative/Permutations.hs
+formatted       80eb76464ce8  parser-combinators-1.3.1/Control/Monad/Combinators.hs
+formatted       203c01d41bb8  parser-combinators-1.3.1/Control/Monad/Combinators/Expr.hs
+formatted       f63c3b21684d  parser-combinators-1.3.1/Control/Monad/Combinators/NonEmpty.hs
+formatted       2ce12720b575  parser-combinators-1.3.1/Control/Monad/Permutations.hs
+formatted       4c7a2ed66fb7  persistent-2.18.1.0/Database/Persist.hs
+formatted       af7417196697  persistent-2.18.1.0/Database/Persist/Class.hs
+formatted       a62cb576f4b1  persistent-2.18.1.0/Database/Persist/Class/PersistConfig.hs
+formatted       56f625ad1ea2  persistent-2.18.1.0/Database/Persist/Class/PersistEntity.hs
+formatted       59a8f044a3b1  persistent-2.18.1.0/Database/Persist/Class/PersistField.hs
+formatted       4229d83e727f  persistent-2.18.1.0/Database/Persist/Class/PersistQuery.hs
+formatted       194836df1fd0  persistent-2.18.1.0/Database/Persist/Class/PersistStore.hs
+formatted       c7df1c76c273  persistent-2.18.1.0/Database/Persist/Class/PersistUnique.hs
+formatted       8411f5f4d556  persistent-2.18.1.0/Database/Persist/Compatible.hs
+formatted       40afca283a80  persistent-2.18.1.0/Database/Persist/Compatible/TH.hs
+formatted       88f7099ef25d  persistent-2.18.1.0/Database/Persist/Compatible/Types.hs
+formatted       afd0e0f5df2e  persistent-2.18.1.0/Database/Persist/EntityDef.hs
+formatted       849d0a429195  persistent-2.18.1.0/Database/Persist/EntityDef/Internal.hs
+formatted       e1f19a8d7ad8  persistent-2.18.1.0/Database/Persist/FieldDef.hs
+formatted       ab8743cef9ef  persistent-2.18.1.0/Database/Persist/FieldDef/Internal.hs
+formatted       62ee350971e4  persistent-2.18.1.0/Database/Persist/ImplicitIdDef.hs
+formatted       23219cfb95d9  persistent-2.18.1.0/Database/Persist/ImplicitIdDef/Internal.hs
+formatted       03da4b4e1d1b  persistent-2.18.1.0/Database/Persist/Names.hs
+formatted       67c816fd5b28  persistent-2.18.1.0/Database/Persist/PersistValue.hs
+formatted       3b8981721873  persistent-2.18.1.0/Database/Persist/Quasi.hs
+formatted       8181443f0a2e  persistent-2.18.1.0/Database/Persist/Quasi/Internal.hs
+formatted       46a99c7ced31  persistent-2.18.1.0/Database/Persist/Quasi/Internal/ModelParser.hs
+formatted       7c334061474c  persistent-2.18.1.0/Database/Persist/Quasi/Internal/TypeParser.hs
+formatted       21110acf54fd  persistent-2.18.1.0/Database/Persist/Quasi/PersistSettings.hs
+formatted       bd8ed569b227  persistent-2.18.1.0/Database/Persist/Quasi/PersistSettings/Internal.hs
+formatted       a2208d509db2  persistent-2.18.1.0/Database/Persist/Sql.hs
+formatted       246fc7fd8a33  persistent-2.18.1.0/Database/Persist/Sql/Class.hs
+formatted       7df96aa6ca37  persistent-2.18.1.0/Database/Persist/Sql/Internal.hs
+formatted       8961bf4b32ff  persistent-2.18.1.0/Database/Persist/Sql/Migration.hs
+formatted       6bb586234ba3  persistent-2.18.1.0/Database/Persist/Sql/Orphan/PersistQuery.hs
+formatted       f92ba225547b  persistent-2.18.1.0/Database/Persist/Sql/Orphan/PersistStore.hs
+formatted       423a6f1ddcbf  persistent-2.18.1.0/Database/Persist/Sql/Orphan/PersistUnique.hs
+formatted       4da2e4b129cc  persistent-2.18.1.0/Database/Persist/Sql/Raw.hs
+formatted       0e7b2ba6e228  persistent-2.18.1.0/Database/Persist/Sql/Run.hs
+formatted       87c15b78e7c4  persistent-2.18.1.0/Database/Persist/Sql/Types.hs
+formatted       9e7bc02b72db  persistent-2.18.1.0/Database/Persist/Sql/Types/Internal.hs
+formatted       4501af7f2e24  persistent-2.18.1.0/Database/Persist/Sql/Util.hs
+formatted       20882da7c4ce  persistent-2.18.1.0/Database/Persist/SqlBackend.hs
+formatted       748cbc69c920  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal.hs
+formatted       47acc3733907  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/InsertSqlResult.hs
+formatted       4bd5d30fe421  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/IsolationLevel.hs
+formatted       c8a378801422  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/MkSqlBackend.hs
+formatted       945521fad6a2  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/SqlPoolHooks.hs
+formatted       4e0a2509487b  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/Statement.hs
+formatted       e5985feb4a17  persistent-2.18.1.0/Database/Persist/SqlBackend/Internal/StatementCache.hs
+formatted       8c6a9aceba09  persistent-2.18.1.0/Database/Persist/SqlBackend/SqlPoolHooks.hs
+formatted       22acd1321720  persistent-2.18.1.0/Database/Persist/SqlBackend/StatementCache.hs
+formatted       c43972a3241b  persistent-2.18.1.0/Database/Persist/TH.hs
+formatted       041ebd0c7bdf  persistent-2.18.1.0/Database/Persist/TH/Internal.hs
+formatted       3eb1ab75fbdf  persistent-2.18.1.0/Database/Persist/Types.hs
+formatted       602702e0f86e  persistent-2.18.1.0/Database/Persist/Types/Base.hs
+formatted       b8189bc0e07d  persistent-2.18.1.0/Database/Persist/Types/SourceSpan.hs
+formatted       1aec50d3544f  persistent-2.18.1.0/bench/Main.hs
+formatted       d4e78e3f895b  persistent-2.18.1.0/bench/Models.hs
+formatted       1e8c8c93c976  persistent-2.18.1.0/test/Database/Persist/ClassSpec.hs
+formatted       6082a8164f41  persistent-2.18.1.0/test/Database/Persist/PersistValueSpec.hs
+formatted       6b7b4611f96f  persistent-2.18.1.0/test/Database/Persist/QuasiSpec.hs
+formatted       519e8fe84f6b  persistent-2.18.1.0/test/Database/Persist/TH/CommentSpec.hs
+formatted       e39700ee9e91  persistent-2.18.1.0/test/Database/Persist/TH/CompositeKeyStyleSpec.hs
+formatted       f9f4014951e3  persistent-2.18.1.0/test/Database/Persist/TH/DiscoverEntitiesSpec.hs
+formatted       c444c6731179  persistent-2.18.1.0/test/Database/Persist/TH/EmbedSpec.hs
+formatted       bf23d25d4982  persistent-2.18.1.0/test/Database/Persist/TH/EntityHaddockSpec.hs
+formatted       6809c758a81d  persistent-2.18.1.0/test/Database/Persist/TH/ForeignRefSpec.hs
+formatted       0c3421ff2893  persistent-2.18.1.0/test/Database/Persist/TH/ImplicitIdColSpec.hs
+formatted       8570d4321968  persistent-2.18.1.0/test/Database/Persist/TH/JsonEncodingSpec.hs
+formatted       8adfe4a4228d  persistent-2.18.1.0/test/Database/Persist/TH/KindEntitiesSpec.hs
+formatted       5aacd109f219  persistent-2.18.1.0/test/Database/Persist/TH/KindEntitiesSpecImports.hs
+formatted       95ba90d362da  persistent-2.18.1.0/test/Database/Persist/TH/MaybeFieldDefsSpec.hs
+formatted       c4b2085e7249  persistent-2.18.1.0/test/Database/Persist/TH/MigrationOnlySpec.hs
+formatted       dbad9d8d922f  persistent-2.18.1.0/test/Database/Persist/TH/MultiBlockSpec.hs
+formatted       b776165f7ac3  persistent-2.18.1.0/test/Database/Persist/TH/MultiBlockSpec/Model.hs
+formatted       baa7f67273ec  persistent-2.18.1.0/test/Database/Persist/TH/NestedSymbolsInTypeSpec.hs
+formatted       f0e370f995e7  persistent-2.18.1.0/test/Database/Persist/TH/NestedSymbolsInTypeSpecImports.hs
+formatted       148f97b27fd9  persistent-2.18.1.0/test/Database/Persist/TH/NoFieldSelectorsSpec.hs
+formatted       e227905a242e  persistent-2.18.1.0/test/Database/Persist/TH/OverloadedLabelSpec.hs
+formatted       ad712bcac46e  persistent-2.18.1.0/test/Database/Persist/TH/PersistWith/Model.hs
+formatted       8d58beb8b33c  persistent-2.18.1.0/test/Database/Persist/TH/PersistWith/Model2.hs
+formatted       a7b8dff135f1  persistent-2.18.1.0/test/Database/Persist/TH/PersistWithSpec.hs
+formatted       7b6cf72d5ecc  persistent-2.18.1.0/test/Database/Persist/TH/RequireOnlyPersistImportSpec.hs
+formatted       9a0756832b2d  persistent-2.18.1.0/test/Database/Persist/TH/SharedPrimaryKeyImportedSpec.hs
+formatted       885e1164f19c  persistent-2.18.1.0/test/Database/Persist/TH/SharedPrimaryKeySpec.hs
+formatted       145463b36f4d  persistent-2.18.1.0/test/Database/Persist/TH/SumSpec.hs
+formatted       e6bfe40fd881  persistent-2.18.1.0/test/Database/Persist/TH/ToFromPersistValuesSpec.hs
+formatted       a18bfc6474db  persistent-2.18.1.0/test/Database/Persist/TH/TypeLitFieldDefsSpec.hs
+formatted       4b5eb99e6097  persistent-2.18.1.0/test/Database/Persist/THSpec.hs
+formatted       f9304e426550  persistent-2.18.1.0/test/TemplateTestImports.hs
+formatted       7f05465b25d5  persistent-2.18.1.0/test/main.hs
+formatted       e865ae48f11b  pipes-4.3.16/Setup.hs
+formatted       bc3b140ba83c  pipes-4.3.16/benchmarks/Common.hs
+formatted       e459e4d124d4  pipes-4.3.16/benchmarks/LiftBench.hs
+formatted       d100cca123ea  pipes-4.3.16/benchmarks/PreludeBench.hs
+formatted       651557525061  pipes-4.3.16/src/Pipes.hs
+formatted       332e8aaad352  pipes-4.3.16/src/Pipes/Core.hs
+formatted       e021398dbff3  pipes-4.3.16/src/Pipes/Internal.hs
+formatted       e3b36f0685b2  pipes-4.3.16/src/Pipes/Lift.hs
+formatted       82bba5f85292  pipes-4.3.16/src/Pipes/Prelude.hs
+formatted       436224de8a77  pipes-4.3.16/src/Pipes/Tutorial.hs
+formatted       2d58a81d02c8  pipes-4.3.16/tests/Main.hs
+formatted       56dca68e0a87  postgrest-9.0.1/Setup.hs
+formatted       772d4f353686  postgrest-9.0.1/main/Main.hs
+formatted       e24d5ee8932f  postgrest-9.0.1/src/PostgREST/App.hs
+formatted       f658b8d95628  postgrest-9.0.1/src/PostgREST/AppState.hs
+formatted       04688f64c4e1  postgrest-9.0.1/src/PostgREST/Auth.hs
+formatted       0abbe3feaa05  postgrest-9.0.1/src/PostgREST/CLI.hs
+formatted       1b3df3371712  postgrest-9.0.1/src/PostgREST/Config.hs
+formatted       26e0ccfa04f8  postgrest-9.0.1/src/PostgREST/Config/Database.hs
+formatted       9632241317fd  postgrest-9.0.1/src/PostgREST/Config/JSPath.hs
+formatted       b719e278251b  postgrest-9.0.1/src/PostgREST/Config/PgVersion.hs
+formatted       6c2ca99e2760  postgrest-9.0.1/src/PostgREST/Config/Proxy.hs
+formatted       65c66f863629  postgrest-9.0.1/src/PostgREST/ContentType.hs
+formatted       9200d4931d04  postgrest-9.0.1/src/PostgREST/Cors.hs
+formatted       738b5e18a7a6  postgrest-9.0.1/src/PostgREST/DbStructure.hs
+formatted       a0f5c884d319  postgrest-9.0.1/src/PostgREST/DbStructure/Identifiers.hs
+formatted       29d8af69557a  postgrest-9.0.1/src/PostgREST/DbStructure/Proc.hs
+formatted       8670bffe5d4a  postgrest-9.0.1/src/PostgREST/DbStructure/Relationship.hs
+formatted       66c6fb5fc0f5  postgrest-9.0.1/src/PostgREST/DbStructure/Table.hs
+formatted       c35d5cc3a41e  postgrest-9.0.1/src/PostgREST/Error.hs
+formatted       f1b82d17eed8  postgrest-9.0.1/src/PostgREST/GucHeader.hs
+formatted       2c6a7ae61af9  postgrest-9.0.1/src/PostgREST/Logger.hs
+formatted       1dacd910468e  postgrest-9.0.1/src/PostgREST/Middleware.hs
+formatted       17654b363841  postgrest-9.0.1/src/PostgREST/OpenAPI.hs
+formatted       e057b4b771ea  postgrest-9.0.1/src/PostgREST/Query/QueryBuilder.hs
+formatted       9ac8d5c64df2  postgrest-9.0.1/src/PostgREST/Query/SqlFragment.hs
+formatted       5f4cbf20b7f3  postgrest-9.0.1/src/PostgREST/Query/Statements.hs
+formatted       7d83276a4311  postgrest-9.0.1/src/PostgREST/RangeQuery.hs
+formatted       4cecd3055b78  postgrest-9.0.1/src/PostgREST/Request/ApiRequest.hs
+formatted       de23350d6744  postgrest-9.0.1/src/PostgREST/Request/DbRequestBuilder.hs
+formatted       fc3632173741  postgrest-9.0.1/src/PostgREST/Request/Parsers.hs
+formatted       8e710c5836da  postgrest-9.0.1/src/PostgREST/Request/Preferences.hs
+formatted       1353ba00b6c3  postgrest-9.0.1/src/PostgREST/Request/Types.hs
+formatted       0c839dec485e  postgrest-9.0.1/src/PostgREST/Unix.hs
+formatted       793800bb054f  postgrest-9.0.1/src/PostgREST/Version.hs
+formatted       900b9c705574  postgrest-9.0.1/src/PostgREST/Workers.hs
+formatted       c719f882d27c  postgrest-9.0.1/test/doc/Main.hs
+formatted       0aa4fe971d52  postgrest-9.0.1/test/spec/Feature/AndOrParamsSpec.hs
+formatted       000191b3349e  postgrest-9.0.1/test/spec/Feature/AsymmetricJwtSpec.hs
+formatted       5a86c6233052  postgrest-9.0.1/test/spec/Feature/AudienceJwtSecretSpec.hs
+formatted       acbe9362314e  postgrest-9.0.1/test/spec/Feature/AuthSpec.hs
+formatted       7cb71699f728  postgrest-9.0.1/test/spec/Feature/BinaryJwtSecretSpec.hs
+formatted       2fb433681c01  postgrest-9.0.1/test/spec/Feature/ConcurrentSpec.hs
+formatted       db553e991f45  postgrest-9.0.1/test/spec/Feature/CorsSpec.hs
+formatted       343d3e3a465e  postgrest-9.0.1/test/spec/Feature/DeleteSpec.hs
+formatted       112082d3da25  postgrest-9.0.1/test/spec/Feature/DisabledOpenApiSpec.hs
+formatted       ad7384965a9e  postgrest-9.0.1/test/spec/Feature/EmbedDisambiguationSpec.hs
+formatted       f7a7ea3d2a87  postgrest-9.0.1/test/spec/Feature/EmbedInnerJoinSpec.hs
+formatted       a3dddabdb704  postgrest-9.0.1/test/spec/Feature/ExtraSearchPathSpec.hs
+formatted       ff20687cb475  postgrest-9.0.1/test/spec/Feature/HtmlRawOutputSpec.hs
+formatted       2e6a9474e718  postgrest-9.0.1/test/spec/Feature/IgnorePrivOpenApiSpec.hs
+formatted       ea599ebfe99c  postgrest-9.0.1/test/spec/Feature/InsertSpec.hs
+formatted       6f6ff9c35189  postgrest-9.0.1/test/spec/Feature/JsonOperatorSpec.hs
+formatted       12271bc52ad6  postgrest-9.0.1/test/spec/Feature/LegacyGucsSpec.hs
+formatted       5228aaf9349c  postgrest-9.0.1/test/spec/Feature/MultipleSchemaSpec.hs
+formatted       3e8b6471e229  postgrest-9.0.1/test/spec/Feature/NoJwtSpec.hs
+formatted       a7144a84ab24  postgrest-9.0.1/test/spec/Feature/NonexistentSchemaSpec.hs
+formatted       d10bde3ba967  postgrest-9.0.1/test/spec/Feature/OpenApiSpec.hs
+formatted       1b9c2f6f5c75  postgrest-9.0.1/test/spec/Feature/OptionsSpec.hs
+formatted       89a1589ff0fe  postgrest-9.0.1/test/spec/Feature/ProxySpec.hs
+formatted       4e889783f9ba  postgrest-9.0.1/test/spec/Feature/QueryLimitedSpec.hs
+formatted       343a60a46b7c  postgrest-9.0.1/test/spec/Feature/QuerySpec.hs
+formatted       06632a6a8e0a  postgrest-9.0.1/test/spec/Feature/RangeSpec.hs
+formatted       7cb746560127  postgrest-9.0.1/test/spec/Feature/RawOutputTypesSpec.hs
+formatted       b4a3ab5a81a9  postgrest-9.0.1/test/spec/Feature/RollbackSpec.hs
+formatted       dc5321d79fb3  postgrest-9.0.1/test/spec/Feature/RootSpec.hs
+formatted       77a649eeb2e6  postgrest-9.0.1/test/spec/Feature/RpcPreRequestGucsSpec.hs
+formatted       79c99d7ebcf6  postgrest-9.0.1/test/spec/Feature/RpcSpec.hs
+formatted       73c0ab518a3d  postgrest-9.0.1/test/spec/Feature/SingularSpec.hs
+formatted       be03de84804f  postgrest-9.0.1/test/spec/Feature/UnicodeSpec.hs
+formatted       162dade8a566  postgrest-9.0.1/test/spec/Feature/UpdateSpec.hs
+formatted       eb3b5ebce8b4  postgrest-9.0.1/test/spec/Feature/UpsertSpec.hs
+formatted       7a9dd3383794  postgrest-9.0.1/test/spec/Main.hs
+formatted       f32b163f57d7  postgrest-9.0.1/test/spec/QueryCost.hs
+formatted       c8a3a9772eba  postgrest-9.0.1/test/spec/SpecHelper.hs
+formatted       c136e6235ce2  postgrest-9.0.1/test/spec/TestTypes.hs
+formatted       13abd8b59335  profunctors-5.6.3/src/Data/Profunctor.hs
+formatted       cd53a440a7f3  profunctors-5.6.3/src/Data/Profunctor/Adjunction.hs
+formatted       44ffb6d1bea1  profunctors-5.6.3/src/Data/Profunctor/Cayley.hs
+formatted       44e226489961  profunctors-5.6.3/src/Data/Profunctor/Choice.hs
+formatted       c367f5dff16e  profunctors-5.6.3/src/Data/Profunctor/Closed.hs
+formatted       160d1a664492  profunctors-5.6.3/src/Data/Profunctor/Composition.hs
+formatted       637e91df9ad9  profunctors-5.6.3/src/Data/Profunctor/Mapping.hs
+formatted       59b30aaa8b06  profunctors-5.6.3/src/Data/Profunctor/Monad.hs
+formatted       d783247e0329  profunctors-5.6.3/src/Data/Profunctor/Ran.hs
+formatted       1a03f7457399  profunctors-5.6.3/src/Data/Profunctor/Rep.hs
+formatted       a405de2f08b4  profunctors-5.6.3/src/Data/Profunctor/Sieve.hs
+formatted       40a5163c4f1d  profunctors-5.6.3/src/Data/Profunctor/Strong.hs
+formatted       c581748aad4e  profunctors-5.6.3/src/Data/Profunctor/Traversing.hs
+formatted       66e633834891  profunctors-5.6.3/src/Data/Profunctor/Types.hs
+formatted       6d4d49816f3c  profunctors-5.6.3/src/Data/Profunctor/Unsafe.hs
+formatted       d859bac5f783  profunctors-5.6.3/src/Data/Profunctor/Yoneda.hs
+formatted       f97b976f5a71  purescript-0.15.15/Setup.hs
+formatted       fc25cc9ab507  purescript-0.15.15/app/Command/Bundle.hs
+formatted       d0c2fd344d2b  purescript-0.15.15/app/Command/Compile.hs
+formatted       7219813f0a5c  purescript-0.15.15/app/Command/Docs.hs
+formatted       c06c3f05260e  purescript-0.15.15/app/Command/Docs/Html.hs
+formatted       037036ef66e1  purescript-0.15.15/app/Command/Docs/Markdown.hs
+formatted       60636f418bc5  purescript-0.15.15/app/Command/Graph.hs
+formatted       60131f690f8b  purescript-0.15.15/app/Command/Hierarchy.hs
+formatted       be7dd3becfad  purescript-0.15.15/app/Command/Ide.hs
+formatted       2c3998824b51  purescript-0.15.15/app/Command/Publish.hs
+formatted       a930f15c3b4e  purescript-0.15.15/app/Command/REPL.hs
+formatted       aa128423c4fb  purescript-0.15.15/app/Main.hs
+formatted       8c8cfed900b8  purescript-0.15.15/app/SharedCLI.hs
+formatted       18a85337fa6b  purescript-0.15.15/app/Version.hs
+formatted       e69aed05fabc  purescript-0.15.15/src/Control/Monad/Logger.hs
+formatted       f396208e56b6  purescript-0.15.15/src/Control/Monad/Supply.hs
+formatted       4199e8087c69  purescript-0.15.15/src/Control/Monad/Supply/Class.hs
+formatted       7a4d7979e1c9  purescript-0.15.15/src/Data/Text/PureScript.hs
+formatted       eef5dd037abf  purescript-0.15.15/src/Language/PureScript.hs
+formatted       64c0d4442190  purescript-0.15.15/src/Language/PureScript/AST.hs
+formatted       6857432ccb89  purescript-0.15.15/src/Language/PureScript/AST/Binders.hs
+formatted       31b3dc106302  purescript-0.15.15/src/Language/PureScript/AST/Declarations.hs
+formatted       0368132e2a7c  purescript-0.15.15/src/Language/PureScript/AST/Declarations/ChainId.hs
+formatted       fbdaa45efd39  purescript-0.15.15/src/Language/PureScript/AST/Exported.hs
+formatted       16c598490b8b  purescript-0.15.15/src/Language/PureScript/AST/Literals.hs
+formatted       6dde4019084f  purescript-0.15.15/src/Language/PureScript/AST/Operators.hs
+formatted       7cb50594d1de  purescript-0.15.15/src/Language/PureScript/AST/SourcePos.hs
+formatted       fd740ce393cd  purescript-0.15.15/src/Language/PureScript/AST/Traversals.hs
+formatted       b141c8c10db8  purescript-0.15.15/src/Language/PureScript/AST/Utils.hs
+formatted       174742a25d11  purescript-0.15.15/src/Language/PureScript/Bundle.hs
+formatted       665ede6abf17  purescript-0.15.15/src/Language/PureScript/CST.hs
+formatted       a5963c5438f8  purescript-0.15.15/src/Language/PureScript/CST/Convert.hs
+formatted       2143990c6781  purescript-0.15.15/src/Language/PureScript/CST/Errors.hs
+formatted       c81c2ecf7ebe  purescript-0.15.15/src/Language/PureScript/CST/Flatten.hs
+formatted       36fe1c70493a  purescript-0.15.15/src/Language/PureScript/CST/Layout.hs
+formatted       7ac157858a86  purescript-0.15.15/src/Language/PureScript/CST/Lexer.hs
+formatted       a08c36743aa3  purescript-0.15.15/src/Language/PureScript/CST/Monad.hs
+formatted       a696e86ab554  purescript-0.15.15/src/Language/PureScript/CST/Positions.hs
+formatted       2df3a82dec66  purescript-0.15.15/src/Language/PureScript/CST/Print.hs
+formatted       c741805ffed3  purescript-0.15.15/src/Language/PureScript/CST/Traversals.hs
+formatted       81c5d151f932  purescript-0.15.15/src/Language/PureScript/CST/Traversals/Type.hs
+formatted       46dd73253c21  purescript-0.15.15/src/Language/PureScript/CST/Types.hs
+formatted       36359ab27c15  purescript-0.15.15/src/Language/PureScript/CST/Utils.hs
+formatted       ebd74707d2df  purescript-0.15.15/src/Language/PureScript/CodeGen.hs
+formatted       9cf1b3de6d73  purescript-0.15.15/src/Language/PureScript/CodeGen/JS.hs
+formatted       f10bc54be3c8  purescript-0.15.15/src/Language/PureScript/CodeGen/JS/Common.hs
+formatted       f81f2f0671e9  purescript-0.15.15/src/Language/PureScript/CodeGen/JS/Printer.hs
+formatted       a69b28f801ea  purescript-0.15.15/src/Language/PureScript/Comments.hs
+formatted       7e1454fed47d  purescript-0.15.15/src/Language/PureScript/Constants/Libs.hs
+formatted       4e84deb1970c  purescript-0.15.15/src/Language/PureScript/Constants/Prim.hs
+formatted       08cf8657b87b  purescript-0.15.15/src/Language/PureScript/Constants/TH.hs
+formatted       0e372eb9e534  purescript-0.15.15/src/Language/PureScript/CoreFn.hs
+formatted       c133879c858f  purescript-0.15.15/src/Language/PureScript/CoreFn/Ann.hs
+formatted       2556afbb3bea  purescript-0.15.15/src/Language/PureScript/CoreFn/Binders.hs
+formatted       08f7f269d88a  purescript-0.15.15/src/Language/PureScript/CoreFn/CSE.hs
+formatted       3a083ba8ee7c  purescript-0.15.15/src/Language/PureScript/CoreFn/Desugar.hs
+formatted       2f90c3840d55  purescript-0.15.15/src/Language/PureScript/CoreFn/Expr.hs
+formatted       17eec7fac664  purescript-0.15.15/src/Language/PureScript/CoreFn/FromJSON.hs
+formatted       3a475fc18f00  purescript-0.15.15/src/Language/PureScript/CoreFn/Laziness.hs
+formatted       083a81cbf5bf  purescript-0.15.15/src/Language/PureScript/CoreFn/Meta.hs
+formatted       2b2d42f479f2  purescript-0.15.15/src/Language/PureScript/CoreFn/Module.hs
+formatted       26edb255fed7  purescript-0.15.15/src/Language/PureScript/CoreFn/Optimizer.hs
+formatted       a01b08124299  purescript-0.15.15/src/Language/PureScript/CoreFn/ToJSON.hs
+formatted       74e775f771b9  purescript-0.15.15/src/Language/PureScript/CoreFn/Traversals.hs
+formatted       63122a31d5b9  purescript-0.15.15/src/Language/PureScript/CoreImp.hs
+formatted       5545c5e53cd1  purescript-0.15.15/src/Language/PureScript/CoreImp/AST.hs
+formatted       07f8248f1a4c  purescript-0.15.15/src/Language/PureScript/CoreImp/Module.hs
+formatted       76a5683510a3  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer.hs
+formatted       900e45f47ef2  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/Blocks.hs
+formatted       635c6dcfbee9  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/Common.hs
+formatted       1d936757f795  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/Inliner.hs
+formatted       cd70e24b2f0a  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/MagicDo.hs
+formatted       4a46787c4f53  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/TCO.hs
+formatted       c3bcb1230471  purescript-0.15.15/src/Language/PureScript/CoreImp/Optimizer/Unused.hs
+formatted       54228acabdeb  purescript-0.15.15/src/Language/PureScript/Crash.hs
+formatted       d38f4a6a3f33  purescript-0.15.15/src/Language/PureScript/Docs.hs
+formatted       bec4951fe3e0  purescript-0.15.15/src/Language/PureScript/Docs/AsHtml.hs
+formatted       b2652f6691cc  purescript-0.15.15/src/Language/PureScript/Docs/AsMarkdown.hs
+formatted       a02b1656aca1  purescript-0.15.15/src/Language/PureScript/Docs/Collect.hs
+formatted       4b0e409bc207  purescript-0.15.15/src/Language/PureScript/Docs/Convert.hs
+formatted       d0cd55c3280e  purescript-0.15.15/src/Language/PureScript/Docs/Convert/ReExports.hs
+formatted       9037caf6f0fd  purescript-0.15.15/src/Language/PureScript/Docs/Convert/Single.hs
+formatted       d97124c1ab6a  purescript-0.15.15/src/Language/PureScript/Docs/Css.hs
+formatted       f90d0d26dd2b  purescript-0.15.15/src/Language/PureScript/Docs/Prim.hs
+formatted       edaa27498ded  purescript-0.15.15/src/Language/PureScript/Docs/Render.hs
+formatted       4c98064ffe67  purescript-0.15.15/src/Language/PureScript/Docs/RenderedCode.hs
+formatted       2f9857670eb2  purescript-0.15.15/src/Language/PureScript/Docs/RenderedCode/RenderType.hs
+formatted       c20dd6b6a9df  purescript-0.15.15/src/Language/PureScript/Docs/RenderedCode/Types.hs
+formatted       876b5438b748  purescript-0.15.15/src/Language/PureScript/Docs/Tags.hs
+formatted       5872469a59f7  purescript-0.15.15/src/Language/PureScript/Docs/Types.hs
+formatted       bc381d509404  purescript-0.15.15/src/Language/PureScript/Docs/Utils/MonoidExtras.hs
+formatted       bb6ed1581fd8  purescript-0.15.15/src/Language/PureScript/Environment.hs
+formatted       833858141e1a  purescript-0.15.15/src/Language/PureScript/Errors.hs
+formatted       805b37c2988c  purescript-0.15.15/src/Language/PureScript/Errors/JSON.hs
+formatted       30d65d281400  purescript-0.15.15/src/Language/PureScript/Externs.hs
+formatted       20df6c4b2580  purescript-0.15.15/src/Language/PureScript/Glob.hs
+formatted       a91b6028a053  purescript-0.15.15/src/Language/PureScript/Graph.hs
+formatted       0af324e42f5f  purescript-0.15.15/src/Language/PureScript/Hierarchy.hs
+formatted       281c5e956097  purescript-0.15.15/src/Language/PureScript/Ide.hs
+formatted       4d15e4184a91  purescript-0.15.15/src/Language/PureScript/Ide/CaseSplit.hs
+formatted       206e9d6ee362  purescript-0.15.15/src/Language/PureScript/Ide/Command.hs
+formatted       9df2facac4b2  purescript-0.15.15/src/Language/PureScript/Ide/Completion.hs
+formatted       beb74c449b74  purescript-0.15.15/src/Language/PureScript/Ide/Error.hs
+formatted       ead51a8cf8b2  purescript-0.15.15/src/Language/PureScript/Ide/Externs.hs
+formatted       846996d62981  purescript-0.15.15/src/Language/PureScript/Ide/Filter.hs
+formatted       3576f2d7de05  purescript-0.15.15/src/Language/PureScript/Ide/Filter/Declaration.hs
+formatted       19c2f9d82289  purescript-0.15.15/src/Language/PureScript/Ide/Filter/Imports.hs
+formatted       d3bf1ba9ac6a  purescript-0.15.15/src/Language/PureScript/Ide/Imports.hs
+formatted       03a7f932c16a  purescript-0.15.15/src/Language/PureScript/Ide/Imports/Actions.hs
+formatted       dae869e09d51  purescript-0.15.15/src/Language/PureScript/Ide/Logging.hs
+formatted       6495efed1636  purescript-0.15.15/src/Language/PureScript/Ide/Matcher.hs
+formatted       fe69a6b2ed2c  purescript-0.15.15/src/Language/PureScript/Ide/Prim.hs
+formatted       ac973f1b2f5a  purescript-0.15.15/src/Language/PureScript/Ide/Rebuild.hs
+formatted       9390668ca723  purescript-0.15.15/src/Language/PureScript/Ide/Reexports.hs
+formatted       40ae0185eda5  purescript-0.15.15/src/Language/PureScript/Ide/SourceFile.hs
+formatted       4badb68aba43  purescript-0.15.15/src/Language/PureScript/Ide/State.hs
+formatted       97156b72015a  purescript-0.15.15/src/Language/PureScript/Ide/Types.hs
+formatted       a2547b22a5bd  purescript-0.15.15/src/Language/PureScript/Ide/Usage.hs
+formatted       c5c7f0134f7c  purescript-0.15.15/src/Language/PureScript/Ide/Util.hs
+formatted       a54bd99f9377  purescript-0.15.15/src/Language/PureScript/Interactive.hs
+formatted       ea47006e2013  purescript-0.15.15/src/Language/PureScript/Interactive/Completion.hs
+formatted       17488dfda517  purescript-0.15.15/src/Language/PureScript/Interactive/Directive.hs
+formatted       2ab1349ff2ec  purescript-0.15.15/src/Language/PureScript/Interactive/IO.hs
+formatted       f41f6e5826db  purescript-0.15.15/src/Language/PureScript/Interactive/Message.hs
+formatted       595ebf5e2141  purescript-0.15.15/src/Language/PureScript/Interactive/Module.hs
+formatted       4b81e9100134  purescript-0.15.15/src/Language/PureScript/Interactive/Parser.hs
+formatted       1addaeaf36e0  purescript-0.15.15/src/Language/PureScript/Interactive/Printer.hs
+formatted       2a5d0038271f  purescript-0.15.15/src/Language/PureScript/Interactive/Types.hs
+formatted       1c78dfc40930  purescript-0.15.15/src/Language/PureScript/Label.hs
+formatted       2d0f22fb5805  purescript-0.15.15/src/Language/PureScript/Linter.hs
+formatted       a4813ff2c614  purescript-0.15.15/src/Language/PureScript/Linter/Exhaustive.hs
+formatted       299f2c75ebc4  purescript-0.15.15/src/Language/PureScript/Linter/Imports.hs
+formatted       463c2330ffe1  purescript-0.15.15/src/Language/PureScript/Linter/Wildcards.hs
+formatted       1511cd74f131  purescript-0.15.15/src/Language/PureScript/Make.hs
+formatted       316ef33e238d  purescript-0.15.15/src/Language/PureScript/Make/Actions.hs
+formatted       103c1376e453  purescript-0.15.15/src/Language/PureScript/Make/BuildPlan.hs
+formatted       2ff6ea3e0439  purescript-0.15.15/src/Language/PureScript/Make/Cache.hs
+formatted       5a62260bbc36  purescript-0.15.15/src/Language/PureScript/Make/Monad.hs
+formatted       d32972a1d126  purescript-0.15.15/src/Language/PureScript/ModuleDependencies.hs
+formatted       55c6638b2d15  purescript-0.15.15/src/Language/PureScript/Names.hs
+formatted       0f9b1ea22f14  purescript-0.15.15/src/Language/PureScript/Options.hs
+formatted       2a2b99ef8171  purescript-0.15.15/src/Language/PureScript/PSString.hs
+formatted       2b26a96d8bcc  purescript-0.15.15/src/Language/PureScript/Pretty.hs
+formatted       c590bb7fdae4  purescript-0.15.15/src/Language/PureScript/Pretty/Common.hs
+formatted       c8ae94e56cbc  purescript-0.15.15/src/Language/PureScript/Pretty/Types.hs
+formatted       e154c175f83f  purescript-0.15.15/src/Language/PureScript/Pretty/Values.hs
+formatted       7afc9764bee9  purescript-0.15.15/src/Language/PureScript/Publish.hs
+formatted       79e26f16154a  purescript-0.15.15/src/Language/PureScript/Publish/BoxesHelpers.hs
+formatted       fd7373c25f32  purescript-0.15.15/src/Language/PureScript/Publish/ErrorsWarnings.hs
+formatted       a7eeb8da714c  purescript-0.15.15/src/Language/PureScript/Publish/Registry/Compat.hs
+formatted       fba7a9e201e6  purescript-0.15.15/src/Language/PureScript/Publish/Utils.hs
+formatted       c4b949fe0d09  purescript-0.15.15/src/Language/PureScript/Renamer.hs
+formatted       9e88be14067d  purescript-0.15.15/src/Language/PureScript/Roles.hs
+formatted       2530d5774295  purescript-0.15.15/src/Language/PureScript/Sugar.hs
+formatted       834b0e83e969  purescript-0.15.15/src/Language/PureScript/Sugar/AdoNotation.hs
+formatted       69ace5e25259  purescript-0.15.15/src/Language/PureScript/Sugar/BindingGroups.hs
+formatted       502cd635c402  purescript-0.15.15/src/Language/PureScript/Sugar/CaseDeclarations.hs
+formatted       7efb24168510  purescript-0.15.15/src/Language/PureScript/Sugar/DoNotation.hs
+formatted       b232946c3700  purescript-0.15.15/src/Language/PureScript/Sugar/LetPattern.hs
+formatted       ae52bb36f9ee  purescript-0.15.15/src/Language/PureScript/Sugar/Names.hs
+formatted       b2eab3efd8fe  purescript-0.15.15/src/Language/PureScript/Sugar/Names/Common.hs
+formatted       e317ca567acf  purescript-0.15.15/src/Language/PureScript/Sugar/Names/Env.hs
+formatted       f2e2506cd465  purescript-0.15.15/src/Language/PureScript/Sugar/Names/Exports.hs
+formatted       6955df9dd4c2  purescript-0.15.15/src/Language/PureScript/Sugar/Names/Imports.hs
+formatted       54d278b2a1af  purescript-0.15.15/src/Language/PureScript/Sugar/ObjectWildcards.hs
+formatted       1f8d111ee043  purescript-0.15.15/src/Language/PureScript/Sugar/Operators.hs
+formatted       9db73f9a40a9  purescript-0.15.15/src/Language/PureScript/Sugar/Operators/Binders.hs
+formatted       13722182a0e7  purescript-0.15.15/src/Language/PureScript/Sugar/Operators/Common.hs
+formatted       a5ab8188f154  purescript-0.15.15/src/Language/PureScript/Sugar/Operators/Expr.hs
+formatted       81c3efe7c9f9  purescript-0.15.15/src/Language/PureScript/Sugar/Operators/Types.hs
+formatted       fb9c5b98a9e5  purescript-0.15.15/src/Language/PureScript/Sugar/TypeClasses.hs
+formatted       7d9f317829e0  purescript-0.15.15/src/Language/PureScript/Sugar/TypeClasses/Deriving.hs
+formatted       ecea49da50c6  purescript-0.15.15/src/Language/PureScript/Sugar/TypeDeclarations.hs
+formatted       24e5df024499  purescript-0.15.15/src/Language/PureScript/Traversals.hs
+formatted       ca48c70748fe  purescript-0.15.15/src/Language/PureScript/TypeChecker.hs
+formatted       9b0b916deed1  purescript-0.15.15/src/Language/PureScript/TypeChecker/Deriving.hs
+formatted       6f3315a67e07  purescript-0.15.15/src/Language/PureScript/TypeChecker/Entailment.hs
+formatted       475dea9a3c17  purescript-0.15.15/src/Language/PureScript/TypeChecker/Entailment/Coercible.hs
+formatted       b504bbdc02b8  purescript-0.15.15/src/Language/PureScript/TypeChecker/Entailment/IntCompare.hs
+formatted       3fc4c00e183c  purescript-0.15.15/src/Language/PureScript/TypeChecker/Kinds.hs
+formatted       47e4f5ec9f12  purescript-0.15.15/src/Language/PureScript/TypeChecker/Monad.hs
+formatted       4c2777ae908a  purescript-0.15.15/src/Language/PureScript/TypeChecker/Roles.hs
+formatted       3d9eb14e5345  purescript-0.15.15/src/Language/PureScript/TypeChecker/Skolems.hs
+formatted       c8964442e6c6  purescript-0.15.15/src/Language/PureScript/TypeChecker/Subsumption.hs
+formatted       c5b309590b3d  purescript-0.15.15/src/Language/PureScript/TypeChecker/Synonyms.hs
+formatted       a0db4db50108  purescript-0.15.15/src/Language/PureScript/TypeChecker/TypeSearch.hs
+formatted       57b17dd90b2b  purescript-0.15.15/src/Language/PureScript/TypeChecker/Types.hs
+formatted       e88ff7e32a40  purescript-0.15.15/src/Language/PureScript/TypeChecker/Unify.hs
+formatted       2d148264f334  purescript-0.15.15/src/Language/PureScript/TypeClassDictionaries.hs
+formatted       ed3ce891a8d0  purescript-0.15.15/src/Language/PureScript/Types.hs
+formatted       50a45fbad08d  purescript-0.15.15/src/System/IO/UTF8.hs
+formatted       c599f7d8bf58  purescript-0.15.15/tests/Language/PureScript/Ide/CompletionSpec.hs
+formatted       099ba0badfd6  purescript-0.15.15/tests/Language/PureScript/Ide/FilterSpec.hs
+formatted       1033245eef97  purescript-0.15.15/tests/Language/PureScript/Ide/ImportsSpec.hs
+formatted       028f5c10dae7  purescript-0.15.15/tests/Language/PureScript/Ide/MatcherSpec.hs
+formatted       e7c92690fcf3  purescript-0.15.15/tests/Language/PureScript/Ide/RebuildSpec.hs
+formatted       7890facc486a  purescript-0.15.15/tests/Language/PureScript/Ide/ReexportsSpec.hs
+formatted       59d2a1d292e1  purescript-0.15.15/tests/Language/PureScript/Ide/SourceFileSpec.hs
+formatted       904535829fba  purescript-0.15.15/tests/Language/PureScript/Ide/StateSpec.hs
+formatted       9864a15e1927  purescript-0.15.15/tests/Language/PureScript/Ide/Test.hs
+formatted       67fe4d589cdb  purescript-0.15.15/tests/Language/PureScript/Ide/UsageSpec.hs
+formatted       0406ed28e812  purescript-0.15.15/tests/Main.hs
+formatted       ed333c67c3b1  purescript-0.15.15/tests/PscIdeSpec.hs
+formatted       a2b0f5e823b9  purescript-0.15.15/tests/TestAst.hs
+formatted       17d9c16f4ee1  purescript-0.15.15/tests/TestCompiler.hs
+formatted       c454ba7cc3dd  purescript-0.15.15/tests/TestCoreFn.hs
+formatted       5b562e2e0010  purescript-0.15.15/tests/TestCst.hs
+formatted       d9a9eb37749c  purescript-0.15.15/tests/TestDocs.hs
+formatted       e29c16f400a0  purescript-0.15.15/tests/TestGraph.hs
+formatted       7314022489fa  purescript-0.15.15/tests/TestHierarchy.hs
+formatted       0874e238b9c0  purescript-0.15.15/tests/TestIde.hs
+formatted       4e905fa525a9  purescript-0.15.15/tests/TestMake.hs
+formatted       e782a733be50  purescript-0.15.15/tests/TestPrimDocs.hs
+formatted       d2998d562480  purescript-0.15.15/tests/TestPscPublish.hs
+formatted       e47fc0f000ee  purescript-0.15.15/tests/TestPsci.hs
+formatted       557206f834dc  purescript-0.15.15/tests/TestPsci/CommandTest.hs
+formatted       a139fd3aa0c9  purescript-0.15.15/tests/TestPsci/CompletionTest.hs
+formatted       5fa6ca09e4c4  purescript-0.15.15/tests/TestPsci/EvalTest.hs
+formatted       52ef143912e6  purescript-0.15.15/tests/TestPsci/TestEnv.hs
+formatted       3aaf84c12b48  purescript-0.15.15/tests/TestSourceMaps.hs
+formatted       32a8b25e8a6d  purescript-0.15.15/tests/TestUtils.hs
+formatted       002d52c424b7  raaz-0.3.11/api/aead/Auth/Implementation.hsig
+formatted       4a86cd34c9e7  raaz-0.3.11/api/aead/Cipher/Implementation.hsig
+formatted       faee44cdbcec  raaz-0.3.11/api/aead/Interface.hs
+formatted       a346882029b3  raaz-0.3.11/api/auth/Implementation.hsig
+formatted       64f75c0371bc  raaz-0.3.11/api/auth/Interface.hs
+formatted       29b7f7e93ae5  raaz-0.3.11/api/digest/Implementation.hsig
+formatted       558beb703aff  raaz-0.3.11/api/digest/Interface.hs
+formatted       711ebf2e3620  raaz-0.3.11/api/encrypt/Implementation.hsig
+formatted       abdae110e56a  raaz-0.3.11/api/encrypt/Interface.hs
+formatted       10d5d9d622cd  raaz-0.3.11/api/random/Entropy.hsig
+formatted       83b376fec166  raaz-0.3.11/api/random/Implementation.hsig
+formatted       ffc859b186af  raaz-0.3.11/api/random/Internal.hs
+formatted       b649659b6718  raaz-0.3.11/api/random/PRGenerator.hs
+formatted       a9538ed599c8  raaz-0.3.11/benchmarks/Main.hs
+formatted       876b405577a3  raaz-0.3.11/benchmarks/internal/Benchmark/CSPRG.hs
+formatted       20cee45b7828  raaz-0.3.11/benchmarks/internal/Benchmark/Primitive.hs
+formatted       1e4c846b4064  raaz-0.3.11/benchmarks/internal/Benchmark/Types.hs
+formatted       9ec4c716a238  raaz-0.3.11/core/Raaz/Core.hs
+formatted       52634a64c590  raaz-0.3.11/core/Raaz/Core/ByteSource.hs
+formatted       a05146df1142  raaz-0.3.11/core/Raaz/Core/Constants.hs
+formatted       97564cea364d  raaz-0.3.11/core/Raaz/Core/CpuSupports.hs
+formatted       b89a1297556b  raaz-0.3.11/core/Raaz/Core/Encode.hs
+formatted       7d4d89c52f5c  raaz-0.3.11/core/Raaz/Core/Encode/Base16.hs
+formatted       1897172e3c60  raaz-0.3.11/core/Raaz/Core/Encode/Base64.hs
+formatted       f8721f54231f  raaz-0.3.11/core/Raaz/Core/Encode/Internal.hs
+formatted       47fe9c28f358  raaz-0.3.11/core/Raaz/Core/Memory.hs
+formatted       be5bdc9fc1ae  raaz-0.3.11/core/Raaz/Core/MonoidalAction.hs
+formatted       a44dbacd364d  raaz-0.3.11/core/Raaz/Core/Parse.hs
+formatted       514d08e6f301  raaz-0.3.11/core/Raaz/Core/Parse/Unsafe.hs
+formatted       3d4dcaf4509d  raaz-0.3.11/core/Raaz/Core/Prelude.hs
+formatted       642d73a32500  raaz-0.3.11/core/Raaz/Core/Primitive.hs
+formatted       f026c14b5cef  raaz-0.3.11/core/Raaz/Core/Transfer.hs
+formatted       437bb6bc524e  raaz-0.3.11/core/Raaz/Core/Transfer/Unsafe.hs
+formatted       03cf11da4658  raaz-0.3.11/core/Raaz/Core/Types.hs
+formatted       14f5c5822c66  raaz-0.3.11/core/Raaz/Core/Types/Copying.hs
+formatted       7a6d55f211a6  raaz-0.3.11/core/Raaz/Core/Types/Endian.hs
+formatted       91bdd7e8c019  raaz-0.3.11/core/Raaz/Core/Types/Equality.hs
+formatted       72aa730843b9  raaz-0.3.11/core/Raaz/Core/Types/Internal.hs
+formatted       096187c85663  raaz-0.3.11/core/Raaz/Core/Types/Pointer.hs
+formatted       f9be8525b0e9  raaz-0.3.11/core/Raaz/Core/Types/Tuple.hs
+formatted       d98d94a62e17  raaz-0.3.11/core/Raaz/Core/Util/ByteString.hs
+formatted       aadc37085673  raaz-0.3.11/core/Raaz/Primitive/AEAD/Internal.hs
+formatted       bdf59fdf9536  raaz-0.3.11/core/Raaz/Primitive/Blake2/Internal.hs
+formatted       26f42c9a3385  raaz-0.3.11/core/Raaz/Primitive/ChaCha20/Internal.hs
+formatted       933091143258  raaz-0.3.11/core/Raaz/Primitive/HashMemory.hs
+formatted       2e41cccfd947  raaz-0.3.11/core/Raaz/Primitive/Keyed/Internal.hs
+formatted       11f319d28f77  raaz-0.3.11/core/Raaz/Primitive/Poly1305/Internal.hs
+formatted       662036acbd84  raaz-0.3.11/core/Raaz/Primitive/Sha2/Internal.hs
+formatted       d321e6f120cc  raaz-0.3.11/implementation/Blake2b/CHandWritten.hs
+formatted       c7f7e16ff427  raaz-0.3.11/implementation/Blake2b/CPortable.hs
+formatted       380071ee384a  raaz-0.3.11/implementation/Blake2s/CHandWritten.hs
+formatted       d4911e2aba2f  raaz-0.3.11/implementation/ChaCha20/CHandWritten.hs
+formatted       fd7ed676bf40  raaz-0.3.11/implementation/ChaCha20/CPortable.hs
+formatted       2f7657c239d7  raaz-0.3.11/implementation/ChaCha20/Random/CPortable.hs
+formatted       e3deac8e5358  raaz-0.3.11/implementation/Poly1305/CPortable.hs
+formatted       340ec557db99  raaz-0.3.11/implementation/Poly1305/Memory.hs
+formatted       720f42375ee4  raaz-0.3.11/implementation/Sha256/CHandWritten.hs
+formatted       c064cc7a8421  raaz-0.3.11/implementation/Sha256/CPortable.hs
+formatted       a59c773526b4  raaz-0.3.11/implementation/Sha512/CHandWritten.hs
+formatted       53529d47a59f  raaz-0.3.11/implementation/Sha512/CPortable.hs
+formatted       e5d101450ea0  raaz-0.3.11/implementation/entropy/arc4random/Entropy.hs
+formatted       fe1af598e9b2  raaz-0.3.11/implementation/entropy/urandom/Entropy.hs
+formatted       0a7a863b87f6  raaz-0.3.11/indef/Implementation.hsig
+formatted       5b5f82999259  raaz-0.3.11/indef/Utils.hs
+formatted       524895081243  raaz-0.3.11/indef/buffer/Buffer.hs
+formatted       cd4684e81d95  raaz-0.3.11/indef/buffer/Context.hs
+formatted       d34b17eeb2fb  raaz-0.3.11/indef/buffer/Implementation.hsig
+formatted       a79a9dc1ec44  raaz-0.3.11/indef/chacha20/Implementation.hsig
+formatted       496eb8d3a6e9  raaz-0.3.11/indef/chacha20/XChaCha20/Implementation.hs
+formatted       a2c11b61575b  raaz-0.3.11/indef/keyed/hash/Implementation.hsig
+formatted       2d1ed3b79bf6  raaz-0.3.11/indef/keyed/hash/Mac/Implementation.hs
+formatted       fd3b4278ccc5  raaz-0.3.11/libverse/Raaz/Verse/Blake2b/C/Portable.hs
+formatted       44b600e76f74  raaz-0.3.11/libverse/Raaz/Verse/ChaCha20/C/Portable.hs
+formatted       221da1a1ba37  raaz-0.3.11/libverse/Raaz/Verse/Poly1305/C/Portable.hs
+formatted       7ccb752d8b1d  raaz-0.3.11/libverse/Raaz/Verse/Sha256/C/Portable.hs
+formatted       695112ac1280  raaz-0.3.11/libverse/Raaz/Verse/Sha512/C/Portable.hs
+formatted       2fbd14b119a4  raaz-0.3.11/monocypher/tests/Monocypher.hs
+formatted       1d0ec4de7195  raaz-0.3.11/monocypher/tests/Monocypher/Blake2bSpec.hs
+formatted       0c1244f02a18  raaz-0.3.11/monocypher/tests/Monocypher/ChaCha20Spec.hs
+formatted       e81070c8d0f4  raaz-0.3.11/monocypher/tests/Monocypher/Sha512Spec.hs
+formatted       309f4011c1b9  raaz-0.3.11/raaz/Raaz.hs
+formatted       d7e15e03f1d7  raaz-0.3.11/raaz/Raaz/Auth.hs
+formatted       44194680e191  raaz-0.3.11/raaz/Raaz/AuthEncrypt.hs
+formatted       6c7dee472711  raaz-0.3.11/raaz/Raaz/AuthEncrypt/Unsafe.hs
+formatted       1f2758b948a2  raaz-0.3.11/raaz/Raaz/Digest.hs
+formatted       b154ef8c060a  raaz-0.3.11/raaz/Raaz/Random.hs
+formatted       14ec81125123  raaz-0.3.11/raaz/Raaz/V1/Auth.hs
+formatted       54d933b4519f  raaz-0.3.11/raaz/Raaz/V1/AuthEncrypt.hs
+formatted       9c227de3e844  raaz-0.3.11/raaz/Raaz/V1/AuthEncrypt/Unsafe.hs
+formatted       b221e97b02a1  raaz-0.3.11/raaz/Raaz/V1/Digest.hs
+formatted       dfc72506b4ee  raaz-0.3.11/raaz/bin/Command/Checksum.hs
+formatted       6af965bca577  raaz-0.3.11/raaz/bin/Command/Info.hs
+formatted       8b84f490d89a  raaz-0.3.11/raaz/bin/Command/Rand.hs
+formatted       2bbae784706a  raaz-0.3.11/raaz/bin/Main.hs
+formatted       bb0aca2148f4  raaz-0.3.11/raaz/bin/Usage.hs
+formatted       8955f3f595d6  raaz-0.3.11/tests/Raaz/Cipher/ChaCha20Spec.hs
+formatted       66c20297d941  raaz-0.3.11/tests/Raaz/Cipher/XChaCha20Spec.hs
+formatted       f70ba0951ea5  raaz-0.3.11/tests/Raaz/Core/ByteSourceSpec.hs
+formatted       f50f5814ce13  raaz-0.3.11/tests/Raaz/Core/EncodeSpec.hs
+formatted       a5cc6d99aed2  raaz-0.3.11/tests/Raaz/Core/MemorySpec.hs
+formatted       11c7d4db7839  raaz-0.3.11/tests/Raaz/Core/Types/WordSpec.hs
+formatted       e27cf91514a1  raaz-0.3.11/tests/Raaz/Core/Util/ByteStringSpec.hs
+formatted       9d02caada1d9  raaz-0.3.11/tests/Raaz/Digest/Blake2Spec.hs
+formatted       4f62e035aa97  raaz-0.3.11/tests/Raaz/Digest/Sha256Spec.hs
+formatted       ab3342a1c1c3  raaz-0.3.11/tests/Raaz/Digest/Sha512Spec.hs
+formatted       57a10ec0221b  raaz-0.3.11/tests/Raaz/Mac/Poly1305Spec.hs
+formatted       6cdc5c00b3a8  raaz-0.3.11/tests/Raaz/RandomSpec.hs
+formatted       2fbd14b119a4  raaz-0.3.11/tests/Spec.hs
+formatted       b1a4cba13110  raaz-0.3.11/tests/auth/Implementation.hsig
+formatted       ae7499e9f1a2  raaz-0.3.11/tests/auth/Tests/Auth.hs
+formatted       146a3742af4d  raaz-0.3.11/tests/auth/implementation/Auth/Mac/Blake2b.hs
+formatted       1400f8497a4b  raaz-0.3.11/tests/auth/implementation/Auth/Mac/Blake2s.hs
+formatted       f25bf91a517e  raaz-0.3.11/tests/auth/implementation/Auth/Poly1305.hs
+formatted       7123559f7c81  raaz-0.3.11/tests/cipher/Tests/Cipher.hs
+formatted       0c05cee23c2f  raaz-0.3.11/tests/comparative/AuthEncrypt.hs
+formatted       97ef04d16217  raaz-0.3.11/tests/comparative/AuthEncrypt/ChaCha20Poly1305Spec.hs
+formatted       741dc859a7b4  raaz-0.3.11/tests/comparative/Compare.hs
+formatted       5a902c132987  raaz-0.3.11/tests/comparative/Digest.hs
+formatted       9b0b9e470964  raaz-0.3.11/tests/comparative/Digest/Blake2bSpec.hs
+formatted       5e40537778de  raaz-0.3.11/tests/comparative/Digest/Sha256Spec.hs
+formatted       1d23a17f155b  raaz-0.3.11/tests/comparative/Digest/Sha512Spec.hs
+formatted       a5fa5869f401  raaz-0.3.11/tests/comparative/Encrypt.hs
+formatted       43a4a9f511ea  raaz-0.3.11/tests/comparative/Encrypt/ChaCha20Spec.hs
+formatted       2fbd14b119a4  raaz-0.3.11/tests/comparative/Main.hs
+formatted       9a4da070ca55  raaz-0.3.11/tests/core/Tests/Core.hs
+formatted       2249765a4b51  raaz-0.3.11/tests/core/Tests/Core/Imports.hs
+formatted       c746b6855fd8  raaz-0.3.11/tests/core/Tests/Core/Instances.hs
+formatted       62f66214a824  raaz-0.3.11/tests/core/Tests/Core/Utils.hs
+formatted       bcc780e22f03  raaz-0.3.11/tests/message-digest/Implementation.hsig
+formatted       2bb252395b85  raaz-0.3.11/tests/message-digest/Tests/Digest.hs
+formatted       4a8ac51676df  random-1.3.1/Setup.hs
+formatted       f81df0c89774  random-1.3.1/bench-legacy/BinSearch.hs
+formatted       ec53458f4d57  random-1.3.1/bench-legacy/SimpleRNGBench.hs
+formatted       0584292cc54f  random-1.3.1/bench/Main.hs
+formatted       3d4520480456  random-1.3.1/src/System/Random.hs
+formatted       0719577a75c1  random-1.3.1/src/System/Random/Array.hs
+formatted       0648347f5df7  random-1.3.1/src/System/Random/GFinite.hs
+formatted       6f29e302367d  random-1.3.1/src/System/Random/Internal.hs
+formatted       43cf9948fc9c  random-1.3.1/src/System/Random/Seed.hs
+formatted       2b2590d1c67b  random-1.3.1/src/System/Random/Stateful.hs
+formatted       0d72e1db2b6d  random-1.3.1/test-inspection/Spec.hs
+formatted       c6f769b56ab6  random-1.3.1/test-inspection/Spec/Inspection.hs
+formatted       ed91342d3f30  random-1.3.1/test-legacy/Legacy.hs
+formatted       0160098f7cc5  random-1.3.1/test-legacy/Random1283.hs
+formatted       ad6c39289552  random-1.3.1/test-legacy/RangeTest.hs
+formatted       4c1669996d8d  random-1.3.1/test-legacy/T7936.hs
+formatted       398febcc8a6f  random-1.3.1/test-legacy/TestRandomIOs.hs
+formatted       3ef25c06bdfc  random-1.3.1/test-legacy/TestRandomRs.hs
+formatted       170817d6d661  random-1.3.1/test/Spec.hs
+formatted       a65d68fad80b  random-1.3.1/test/Spec/Range.hs
+formatted       e0e7306312ea  random-1.3.1/test/Spec/Run.hs
+formatted       b3fd15d83ccf  random-1.3.1/test/Spec/Seed.hs
+formatted       53b268e9c80a  random-1.3.1/test/Spec/Stateful.hs
+formatted       4ac47a361dee  recursion-schemes-5.2.3/examples/Expr.hs
+formatted       37b2a0b086b3  recursion-schemes-5.2.3/src/Data/Functor/Base.hs
+formatted       3ca7a5ae5fb0  recursion-schemes-5.2.3/src/Data/Functor/Foldable.hs
+formatted       169a5fcd71cf  recursion-schemes-5.2.3/src/Data/Functor/Foldable/TH.hs
+formatted       1581398eb1b5  resourcet-1.3.0/Control/Monad/Trans/Resource.hs
+formatted       5aec92d93345  resourcet-1.3.0/Control/Monad/Trans/Resource/Internal.hs
+formatted       22ba33396e6e  resourcet-1.3.0/Data/Acquire.hs
+formatted       4a9defd159ee  resourcet-1.3.0/Data/Acquire/Internal.hs
+formatted       27565132aa25  resourcet-1.3.0/UnliftIO/Resource.hs
+formatted       1434a2ae8bde  resourcet-1.3.0/test/main.hs
+formatted       e865ae48f11b  retry-0.9.3.1/Setup.hs
+formatted       f3e4dea1008c  retry-0.9.3.1/src/Control/Retry.hs
+formatted       cce7cb264472  retry-0.9.3.1/src/UnliftIO/Retry.hs
+formatted       94b4a78445b3  retry-0.9.3.1/test/Main.hs
+formatted       08af947c789a  retry-0.9.3.1/test/Tests/Control/Retry.hs
+formatted       0b770fc83ef2  retry-0.9.3.1/test/Tests/UnliftIO/Retry.hs
+formatted       e865ae48f11b  safe-exceptions-0.1.7.4/Setup.hs
+formatted       9dd8a8e1a75f  safe-exceptions-0.1.7.4/src/Control/Exception/Safe.hs
+formatted       d65c0e991a57  safe-exceptions-0.1.7.4/test/Control/Exception/SafeSpec.hs
+formatted       2fbd14b119a4  safe-exceptions-0.1.7.4/test/Spec.hs
+formatted       e865ae48f11b  scientific-0.3.8.1/Setup.hs
+formatted       6a2de24bbe1d  scientific-0.3.8.1/bench/bench.hs
+formatted       b51f688e4f66  scientific-0.3.8.1/src/Data/ByteString/Builder/Scientific.hs
+formatted       a00104fdca94  scientific-0.3.8.1/src/Data/Scientific.hs
+formatted       5837fdbf8485  scientific-0.3.8.1/src/Data/Text/Lazy/Builder/Scientific.hs
+formatted       8e2c4142aa7f  scientific-0.3.8.1/src/GHC/Integer/Compat.hs
+formatted       70da6923c6d5  scientific-0.3.8.1/src/Utils.hs
+formatted       511632de8f71  scientific-0.3.8.1/test/test.hs
+formatted       e865ae48f11b  scotty-0.30/Setup.hs
+formatted       b4007b5fca90  scotty-0.30/Web/Scotty.hs
+formatted       cc7d56854e51  scotty-0.30/Web/Scotty/Action.hs
+formatted       61431d95ef5b  scotty-0.30/Web/Scotty/Body.hs
+formatted       210215898ba8  scotty-0.30/Web/Scotty/Cookie.hs
+formatted       7fbb2c4c4db1  scotty-0.30/Web/Scotty/Internal/Types.hs
+formatted       ccdc72ea4dc8  scotty-0.30/Web/Scotty/Route.hs
+formatted       220c453f0fd9  scotty-0.30/Web/Scotty/Session.hs
+formatted       a91e432e5783  scotty-0.30/Web/Scotty/Trans.hs
+formatted       e2036cbfa7c2  scotty-0.30/Web/Scotty/Trans/Lazy.hs
+formatted       2645fdc50126  scotty-0.30/Web/Scotty/Trans/Strict.hs
+formatted       6bad8484016a  scotty-0.30/Web/Scotty/Util.hs
+formatted       19a63b08e8cc  scotty-0.30/bench/Main.hs
+formatted       ff18ebd00d97  scotty-0.30/doctest/Main.hs
+formatted       bfcc28288099  scotty-0.30/examples/basic.hs
+formatted       128fcbdca77d  scotty-0.30/examples/bodyecho.hs
+formatted       0bfdeec9e9d5  scotty-0.30/examples/cookies.hs
+formatted       e68dfe58dd88  scotty-0.30/examples/exceptions.hs
+formatted       3417d0bd8a35  scotty-0.30/examples/globalstate.hs
+formatted       5d812024dc2a  scotty-0.30/examples/gzip.hs
+formatted       14f88a75023e  scotty-0.30/examples/json_mode.hs
+formatted       d96b13ea35d6  scotty-0.30/examples/middleware.hs
+formatted       dd5796ac98ac  scotty-0.30/examples/nested.hs
+formatted       f424d2128b4a  scotty-0.30/examples/options.hs
+formatted       8b1e46c9aeb7  scotty-0.30/examples/reader.hs
+formatted       6750528250e9  scotty-0.30/examples/session.hs
+formatted       d40e0a8e64ea  scotty-0.30/examples/upload.hs
+formatted       94f10fda97e5  scotty-0.30/examples/urlshortener.hs
+formatted       2fbd14b119a4  scotty-0.30/test/Spec.hs
+formatted       dd9baecda733  scotty-0.30/test/Test/Hspec/Wai/Extra.hs
+formatted       3c4b654d7ca6  scotty-0.30/test/Web/ScottySpec.hs
+formatted       091ccbfea22a  semigroupoids-6.0.2/src/Data/Bifunctor/Apply.hs
+formatted       b1a286f75dd3  semigroupoids-6.0.2/src/Data/Functor/Alt.hs
+formatted       b091ae1639ae  semigroupoids-6.0.2/src/Data/Functor/Apply.hs
+formatted       4322a16f4eaf  semigroupoids-6.0.2/src/Data/Functor/Bind.hs
+declined        -             semigroupoids-6.0.2/src/Data/Functor/Bind/Class.hs
+formatted       82dabf65525e  semigroupoids-6.0.2/src/Data/Functor/Bind/Trans.hs
+formatted       dbcbf10c5fed  semigroupoids-6.0.2/src/Data/Functor/Contravariant/Conclude.hs
+formatted       8142965bbfe5  semigroupoids-6.0.2/src/Data/Functor/Contravariant/Decide.hs
+formatted       5477d9d67b6c  semigroupoids-6.0.2/src/Data/Functor/Contravariant/Divise.hs
+formatted       5daccdc424d0  semigroupoids-6.0.2/src/Data/Functor/Extend.hs
+formatted       da9d284cb9bb  semigroupoids-6.0.2/src/Data/Functor/Plus.hs
+formatted       2c9e2b95e1c6  semigroupoids-6.0.2/src/Data/Groupoid.hs
+formatted       ada45a392805  semigroupoids-6.0.2/src/Data/Isomorphism.hs
+formatted       045d35e85b6e  semigroupoids-6.0.2/src/Data/Semigroup/Bifoldable.hs
+formatted       3b69bf2b2c98  semigroupoids-6.0.2/src/Data/Semigroup/Bitraversable.hs
+formatted       bc14896823af  semigroupoids-6.0.2/src/Data/Semigroup/Foldable.hs
+formatted       15d51636f77f  semigroupoids-6.0.2/src/Data/Semigroup/Foldable/Class.hs
+formatted       e46135ea634e  semigroupoids-6.0.2/src/Data/Semigroup/Traversable.hs
+formatted       5db895bd9aed  semigroupoids-6.0.2/src/Data/Semigroup/Traversable/Class.hs
+formatted       217e2cc62925  semigroupoids-6.0.2/src/Data/Semigroupoid.hs
+formatted       b3380ca605a0  semigroupoids-6.0.2/src/Data/Semigroupoid/Categorical.hs
+formatted       dd586be40bf0  semigroupoids-6.0.2/src/Data/Semigroupoid/Dual.hs
+formatted       f1c21cb8613d  semigroupoids-6.0.2/src/Data/Semigroupoid/Ob.hs
+formatted       6c569b65cb14  semigroupoids-6.0.2/src/Data/Semigroupoid/Static.hs
+formatted       9945f77c9069  semigroupoids-6.0.2/src/Data/Traversable/Instances.hs
+formatted       4f91affffbe0  semigroupoids-6.0.2/src/Semigroupoids/Do.hs
+formatted       689e1e042e62  semigroupoids-6.0.2/src/Semigroupoids/Internal.hs
+formatted       e865ae48f11b  servant-0.20.3.0/Setup.hs
+formatted       9153c9da89d5  servant-0.20.3.0/src/Servant/API.hs
+formatted       6ca32413e226  servant-0.20.3.0/src/Servant/API/Alternative.hs
+formatted       c265b91e3c97  servant-0.20.3.0/src/Servant/API/BasicAuth.hs
+formatted       a2c409071755  servant-0.20.3.0/src/Servant/API/Capture.hs
+formatted       a15886878620  servant-0.20.3.0/src/Servant/API/ContentTypes.hs
+formatted       ae6eeb995066  servant-0.20.3.0/src/Servant/API/Description.hs
+formatted       3529480c44cb  servant-0.20.3.0/src/Servant/API/Empty.hs
+formatted       ca9f880fe9c3  servant-0.20.3.0/src/Servant/API/Experimental/Auth.hs
+formatted       1cb7b7979a37  servant-0.20.3.0/src/Servant/API/Fragment.hs
+formatted       0b0271e38424  servant-0.20.3.0/src/Servant/API/Generic.hs
+formatted       6ace49e9ee6c  servant-0.20.3.0/src/Servant/API/Header.hs
+formatted       a4120f74a189  servant-0.20.3.0/src/Servant/API/Host.hs
+formatted       9add62e890f1  servant-0.20.3.0/src/Servant/API/HttpVersion.hs
+formatted       efd092f09057  servant-0.20.3.0/src/Servant/API/IsSecure.hs
+formatted       714c99b4ea0e  servant-0.20.3.0/src/Servant/API/Modifiers.hs
+formatted       684bc7886ecb  servant-0.20.3.0/src/Servant/API/MultiVerb.hs
+formatted       56acb7471063  servant-0.20.3.0/src/Servant/API/NamedRoutes.hs
+formatted       2a67c6814cd7  servant-0.20.3.0/src/Servant/API/QueryParam.hs
+formatted       c9e33c06dd4d  servant-0.20.3.0/src/Servant/API/QueryString.hs
+formatted       a2969f7ec694  servant-0.20.3.0/src/Servant/API/Range.hs
+formatted       54177faefb7f  servant-0.20.3.0/src/Servant/API/Raw.hs
+formatted       0d8ceb92e030  servant-0.20.3.0/src/Servant/API/RemoteHost.hs
+formatted       fa0f8d364af9  servant-0.20.3.0/src/Servant/API/ReqBody.hs
+formatted       8acf042b8234  servant-0.20.3.0/src/Servant/API/ResponseHeaders.hs
+formatted       c67668bb6c05  servant-0.20.3.0/src/Servant/API/ServerSentEvents.hs
+formatted       d944ce6b72bb  servant-0.20.3.0/src/Servant/API/Status.hs
+formatted       80b82bca3c39  servant-0.20.3.0/src/Servant/API/Stream.hs
+formatted       edf5b4aed88d  servant-0.20.3.0/src/Servant/API/Sub.hs
+formatted       ff144efc7edd  servant-0.20.3.0/src/Servant/API/TypeErrors.hs
+formatted       29ad4adf0dc7  servant-0.20.3.0/src/Servant/API/TypeLevel.hs
+formatted       c0878f59a227  servant-0.20.3.0/src/Servant/API/TypeLevel/List.hs
+formatted       9be4a4b0a678  servant-0.20.3.0/src/Servant/API/UVerb.hs
+formatted       46da2eb7f65a  servant-0.20.3.0/src/Servant/API/UVerb/Union.hs
+formatted       635eed50f570  servant-0.20.3.0/src/Servant/API/Vault.hs
+formatted       2dc0c94ac83c  servant-0.20.3.0/src/Servant/API/Verbs.hs
+formatted       5dcaa0e3d262  servant-0.20.3.0/src/Servant/API/WithNamedContext.hs
+formatted       c8d1802909fc  servant-0.20.3.0/src/Servant/API/WithResource.hs
+formatted       2602ed01f24b  servant-0.20.3.0/src/Servant/Links.hs
+formatted       4a79910df177  servant-0.20.3.0/src/Servant/Test/ComprehensiveAPI.hs
+formatted       72397d3bb59f  servant-0.20.3.0/src/Servant/Types/Internal/Response.hs
+formatted       e57b2e66d9d5  servant-0.20.3.0/src/Servant/Types/SourceT.hs
+formatted       3860893630fe  servant-0.20.3.0/test/Servant/API/ContentTypesSpec.hs
+formatted       8d914b5e174f  servant-0.20.3.0/test/Servant/API/ResponseHeadersSpec.hs
+formatted       19481f24edd2  servant-0.20.3.0/test/Servant/API/StreamSpec.hs
+formatted       df544597bb5e  servant-0.20.3.0/test/Servant/LinksSpec.hs
+formatted       2fbd14b119a4  servant-0.20.3.0/test/Spec.hs
+formatted       e865ae48f11b  servant-server-0.20.3.0/Setup.hs
+formatted       39ab7e0143c5  servant-server-0.20.3.0/example/greet.hs
+formatted       a401126eeff8  servant-server-0.20.3.0/src/Servant.hs
+formatted       9ef459de1886  servant-server-0.20.3.0/src/Servant/Server.hs
+formatted       1f26409f3f2c  servant-server-0.20.3.0/src/Servant/Server/Experimental/Auth.hs
+formatted       6fc6eff93d47  servant-server-0.20.3.0/src/Servant/Server/Generic.hs
+formatted       9112ce5387cd  servant-server-0.20.3.0/src/Servant/Server/Internal.hs
+formatted       66fc41e0b8e8  servant-server-0.20.3.0/src/Servant/Server/Internal/BasicAuth.hs
+formatted       840da824ddc2  servant-server-0.20.3.0/src/Servant/Server/Internal/Context.hs
+formatted       a67e949e616a  servant-server-0.20.3.0/src/Servant/Server/Internal/Delayed.hs
+formatted       4dc42f38bf12  servant-server-0.20.3.0/src/Servant/Server/Internal/DelayedIO.hs
+formatted       fc8d0ef307e4  servant-server-0.20.3.0/src/Servant/Server/Internal/ErrorFormatter.hs
+formatted       23333f0006a5  servant-server-0.20.3.0/src/Servant/Server/Internal/Handler.hs
+formatted       e759d749c842  servant-server-0.20.3.0/src/Servant/Server/Internal/ResponseRender.hs
+formatted       7ae1b546f492  servant-server-0.20.3.0/src/Servant/Server/Internal/RouteResult.hs
+formatted       d53e83414912  servant-server-0.20.3.0/src/Servant/Server/Internal/Router.hs
+formatted       09cdf39e03b6  servant-server-0.20.3.0/src/Servant/Server/Internal/RoutingApplication.hs
+formatted       271cc35e3822  servant-server-0.20.3.0/src/Servant/Server/Internal/ServerError.hs
+formatted       4be302b8cfbe  servant-server-0.20.3.0/src/Servant/Server/StaticFiles.hs
+formatted       7a929eb5f6c6  servant-server-0.20.3.0/src/Servant/Server/UVerb.hs
+formatted       d43150f68994  servant-server-0.20.3.0/src/Servant/Utils/StaticFiles.hs
+formatted       d08527a9decc  servant-server-0.20.3.0/test/Servant/ArbitraryMonadServerSpec.hs
+formatted       a92186c8737e  servant-server-0.20.3.0/test/Servant/HoistSpec.hs
+formatted       fa49a610ed55  servant-server-0.20.3.0/test/Servant/Server/ErrorSpec.hs
+formatted       6f993e850de5  servant-server-0.20.3.0/test/Servant/Server/Internal/ContextSpec.hs
+formatted       6979f09da111  servant-server-0.20.3.0/test/Servant/Server/Internal/RoutingApplicationSpec.hs
+formatted       ebf15aace7c8  servant-server-0.20.3.0/test/Servant/Server/RouterSpec.hs
+formatted       ca1d8b69c2d4  servant-server-0.20.3.0/test/Servant/Server/StaticFilesSpec.hs
+formatted       e9a7ef4fbb57  servant-server-0.20.3.0/test/Servant/Server/StreamingSpec.hs
+formatted       6bd03c4fd0e6  servant-server-0.20.3.0/test/Servant/Server/UsingContextSpec.hs
+formatted       c68eea536d8f  servant-server-0.20.3.0/test/Servant/Server/UsingContextSpec/TestCombinators.hs
+formatted       55524e1b35a6  servant-server-0.20.3.0/test/Servant/ServerSpec.hs
+formatted       2fbd14b119a4  servant-server-0.20.3.0/test/Spec.hs
+formatted       e865ae48f11b  shake-0.19.9/Setup.hs
+formatted       1115d98036fa  shake-0.19.9/docs/manual/Shakefile.hs
+formatted       eb4bec818511  shake-0.19.9/src/Development/Ninja/All.hs
+formatted       3104f3ca6fe0  shake-0.19.9/src/Development/Ninja/Env.hs
+formatted       7cb2becdc041  shake-0.19.9/src/Development/Ninja/Lexer.hs
+formatted       11197fb7bfd8  shake-0.19.9/src/Development/Ninja/Parse.hs
+formatted       c0a33fcdb116  shake-0.19.9/src/Development/Ninja/Type.hs
+formatted       1e091717f0e4  shake-0.19.9/src/Development/Shake.hs
+formatted       5a0ba406abd6  shake-0.19.9/src/Development/Shake/Classes.hs
+formatted       1b85b46443d1  shake-0.19.9/src/Development/Shake/Command.hs
+formatted       5959e8996e24  shake-0.19.9/src/Development/Shake/Config.hs
+formatted       2ffbbbe7ea76  shake-0.19.9/src/Development/Shake/Database.hs
+formatted       6a9f5286dbbd  shake-0.19.9/src/Development/Shake/FilePath.hs
+formatted       1f7279048342  shake-0.19.9/src/Development/Shake/Forward.hs
+formatted       0f161b15d908  shake-0.19.9/src/Development/Shake/Internal/Args.hs
+formatted       176c017dbbd9  shake-0.19.9/src/Development/Shake/Internal/CmdOption.hs
+formatted       89cf4b51fe66  shake-0.19.9/src/Development/Shake/Internal/CompactUI.hs
+formatted       741e862bf58e  shake-0.19.9/src/Development/Shake/Internal/Core/Action.hs
+formatted       a94401153b61  shake-0.19.9/src/Development/Shake/Internal/Core/Build.hs
+formatted       c03d9bf624a4  shake-0.19.9/src/Development/Shake/Internal/Core/Database.hs
+formatted       3e4afc55b835  shake-0.19.9/src/Development/Shake/Internal/Core/Monad.hs
+formatted       15dda4610803  shake-0.19.9/src/Development/Shake/Internal/Core/Pool.hs
+formatted       72387b89230e  shake-0.19.9/src/Development/Shake/Internal/Core/Rules.hs
+formatted       2a67f8266b95  shake-0.19.9/src/Development/Shake/Internal/Core/Run.hs
+formatted       83f034dbe974  shake-0.19.9/src/Development/Shake/Internal/Core/Storage.hs
+formatted       d26cd540a39c  shake-0.19.9/src/Development/Shake/Internal/Core/Types.hs
+formatted       46848a2a03e2  shake-0.19.9/src/Development/Shake/Internal/Demo.hs
+formatted       1afe6f5f82c8  shake-0.19.9/src/Development/Shake/Internal/Derived.hs
+formatted       419e421f13a6  shake-0.19.9/src/Development/Shake/Internal/Errors.hs
+declined        -             shake-0.19.9/src/Development/Shake/Internal/FileInfo.hs
+formatted       759fa2b54278  shake-0.19.9/src/Development/Shake/Internal/FileName.hs
+formatted       fe798a191c19  shake-0.19.9/src/Development/Shake/Internal/FilePattern.hs
+formatted       1e054a94085b  shake-0.19.9/src/Development/Shake/Internal/History/Bloom.hs
+formatted       01551ed3cbf4  shake-0.19.9/src/Development/Shake/Internal/History/Cloud.hs
+formatted       249ed8efaa13  shake-0.19.9/src/Development/Shake/Internal/History/Network.hs
+formatted       628e137c3362  shake-0.19.9/src/Development/Shake/Internal/History/Serialise.hs
+formatted       14a6f9c117dc  shake-0.19.9/src/Development/Shake/Internal/History/Server.hs
+formatted       d90d4f71cadd  shake-0.19.9/src/Development/Shake/Internal/History/Shared.hs
+declined        -             shake-0.19.9/src/Development/Shake/Internal/History/Symlink.hs
+formatted       765062af5b1e  shake-0.19.9/src/Development/Shake/Internal/History/Types.hs
+formatted       1667cc1258cb  shake-0.19.9/src/Development/Shake/Internal/Options.hs
+formatted       c8651e83c45c  shake-0.19.9/src/Development/Shake/Internal/Paths.hs
+formatted       cd695d3ce28f  shake-0.19.9/src/Development/Shake/Internal/Profile.hs
+declined        -             shake-0.19.9/src/Development/Shake/Internal/Progress.hs
+formatted       342442931569  shake-0.19.9/src/Development/Shake/Internal/Resource.hs
+formatted       5733144919c3  shake-0.19.9/src/Development/Shake/Internal/Rules/Default.hs
+formatted       49bcf9520df0  shake-0.19.9/src/Development/Shake/Internal/Rules/Directory.hs
+formatted       8355467730f0  shake-0.19.9/src/Development/Shake/Internal/Rules/File.hs
+formatted       e7921ae8b2dd  shake-0.19.9/src/Development/Shake/Internal/Rules/Files.hs
+formatted       18637b215cdb  shake-0.19.9/src/Development/Shake/Internal/Rules/Oracle.hs
+formatted       b0d13ac0a3a9  shake-0.19.9/src/Development/Shake/Internal/Rules/OrderOnly.hs
+formatted       c9bb8c405fe0  shake-0.19.9/src/Development/Shake/Internal/Rules/Rerun.hs
+formatted       b6e1d27ae046  shake-0.19.9/src/Development/Shake/Internal/Value.hs
+formatted       4f57cc655ba3  shake-0.19.9/src/Development/Shake/Rule.hs
+formatted       72f09acd1481  shake-0.19.9/src/Development/Shake/Util.hs
+formatted       796b5a76fb8c  shake-0.19.9/src/General/Bilist.hs
+formatted       a2e9bfc4e206  shake-0.19.9/src/General/Binary.hs
+formatted       bbd9c27b5570  shake-0.19.9/src/General/Chunks.hs
+formatted       432dccc3b19c  shake-0.19.9/src/General/Cleanup.hs
+declined        -             shake-0.19.9/src/General/EscCodes.hs
+formatted       7652f69a9c07  shake-0.19.9/src/General/Extra.hs
+formatted       6ac31a44af53  shake-0.19.9/src/General/Fence.hs
+declined        -             shake-0.19.9/src/General/FileLock.hs
+formatted       55352d28b4a5  shake-0.19.9/src/General/GetOpt.hs
+formatted       c704d012d9ae  shake-0.19.9/src/General/Ids.hs
+formatted       9126ed0fbd34  shake-0.19.9/src/General/Intern.hs
+formatted       fdae30466e09  shake-0.19.9/src/General/ListBuilder.hs
+formatted       54fa4898327b  shake-0.19.9/src/General/Makefile.hs
+formatted       863c987dd9d2  shake-0.19.9/src/General/Pool.hs
+formatted       300d27247ce2  shake-0.19.9/src/General/Process.hs
+formatted       0d39543216b1  shake-0.19.9/src/General/Template.hs
+formatted       20e74944695a  shake-0.19.9/src/General/Thread.hs
+formatted       b9b9368bdf92  shake-0.19.9/src/General/Timing.hs
+formatted       f1cfb5928cdc  shake-0.19.9/src/General/TypeMap.hs
+formatted       8d69ed0989cc  shake-0.19.9/src/General/Wait.hs
+formatted       4743f12ee1b5  shake-0.19.9/src/Paths.hs
+formatted       6ee887146e25  shake-0.19.9/src/Run.hs
+formatted       e59791013e00  shake-0.19.9/src/Test.hs
+formatted       8559d6daa99e  shake-0.19.9/src/Test/Basic.hs
+formatted       93ef4d632053  shake-0.19.9/src/Test/Batch.hs
+formatted       9817e09728fc  shake-0.19.9/src/Test/Benchmark.hs
+formatted       72e8b4ab4dea  shake-0.19.9/src/Test/Builtin.hs
+formatted       48ec6eca2417  shake-0.19.9/src/Test/BuiltinOverride.hs
+formatted       10efc06e6c7b  shake-0.19.9/src/Test/C.hs
+formatted       53e433c2fd6d  shake-0.19.9/src/Test/Cache.hs
+formatted       2d7ccbb45ced  shake-0.19.9/src/Test/Cleanup.hs
+formatted       448b76c4e03f  shake-0.19.9/src/Test/CloseFileHandles.hs
+formatted       52e8e06b790c  shake-0.19.9/src/Test/Command.hs
+formatted       5ea96ce5a74d  shake-0.19.9/src/Test/Config.hs
+formatted       1f3180d02ce5  shake-0.19.9/src/Test/Database.hs
+formatted       e8ca948ce33e  shake-0.19.9/src/Test/Digest.hs
+formatted       9b70158e614d  shake-0.19.9/src/Test/Directory.hs
+formatted       6bbe2ff03da5  shake-0.19.9/src/Test/Docs.hs
+formatted       7425a9004035  shake-0.19.9/src/Test/Errors.hs
+formatted       b698eeb22c5b  shake-0.19.9/src/Test/Existence.hs
+formatted       33dfd1039065  shake-0.19.9/src/Test/FileLock.hs
+formatted       62fa7f2a0865  shake-0.19.9/src/Test/FilePath.hs
+formatted       d53dce7544e1  shake-0.19.9/src/Test/FilePattern.hs
+formatted       7f088d1e23e6  shake-0.19.9/src/Test/Files.hs
+formatted       f46b5feb3e77  shake-0.19.9/src/Test/Forward.hs
+formatted       07a41b0c82df  shake-0.19.9/src/Test/History.hs
+formatted       a6278c0f744f  shake-0.19.9/src/Test/Journal.hs
+formatted       441f831d7e39  shake-0.19.9/src/Test/Lint.hs
+formatted       abb6b38a5148  shake-0.19.9/src/Test/Live.hs
+formatted       b1f4f9102098  shake-0.19.9/src/Test/Manual.hs
+formatted       0ea86eab061d  shake-0.19.9/src/Test/Match.hs
+formatted       3358afb343e9  shake-0.19.9/src/Test/Monad.hs
+formatted       30eaa5d85dba  shake-0.19.9/src/Test/Ninja.hs
+formatted       78f51e13afdb  shake-0.19.9/src/Test/Oracle.hs
+formatted       3a29cbe0f415  shake-0.19.9/src/Test/OrderOnly.hs
+formatted       11c7d4112a98  shake-0.19.9/src/Test/Parallel.hs
+formatted       af1e17f9eab1  shake-0.19.9/src/Test/Pool.hs
+formatted       d7b6e41656b0  shake-0.19.9/src/Test/Progress.hs
+formatted       8f84d993fd5b  shake-0.19.9/src/Test/Random.hs
+formatted       2cbfb37c7d59  shake-0.19.9/src/Test/Rebuild.hs
+formatted       685ecba8ab37  shake-0.19.9/src/Test/Reschedule.hs
+formatted       a4beab4d5e04  shake-0.19.9/src/Test/Resources.hs
+formatted       721fa3aeb323  shake-0.19.9/src/Test/Self.hs
+formatted       f64db4b85e97  shake-0.19.9/src/Test/SelfMake.hs
+formatted       ce7a14c40a6c  shake-0.19.9/src/Test/Tar.hs
+formatted       010efc5cef7a  shake-0.19.9/src/Test/Targets.hs
+formatted       2ada3fd9cfe5  shake-0.19.9/src/Test/Thread.hs
+formatted       54ac2eb76326  shake-0.19.9/src/Test/Tup.hs
+formatted       d61d4ca26661  shake-0.19.9/src/Test/Type.hs
+formatted       068337f03a57  shake-0.19.9/src/Test/Unicode.hs
+formatted       312e45ba1b16  shake-0.19.9/src/Test/Util.hs
+formatted       6649fd7b7e4a  shake-0.19.9/src/Test/Verbosity.hs
+formatted       f32aa5af75ac  shake-0.19.9/src/Test/Version.hs
+formatted       a7151db2ed5c  split-0.2.5/src/Data/List/Split.hs
+formatted       81873df3b2c6  split-0.2.5/src/Data/List/Split/Internals.hs
+formatted       0476e48b031e  split-0.2.5/test/Properties.hs
+formatted       e865ae48f11b  stack-9.9.9/Setup.hs
+formatted       e865ae48f11b  stack-9.9.9/new-template/Setup.hs
+formatted       76b6ff5a6856  stack-9.9.9/new-template/app/Main.hs
+formatted       b206a21d3b3c  stack-9.9.9/new-template/src/Lib.hs
+formatted       ef8d1c0c14bd  stack-9.9.9/new-template/test/Spec.hs
+formatted       b50eee5c8227  stack-9.9.9/src/Control/Concurrent/Execute.hs
+formatted       de0bbff44bba  stack-9.9.9/src/Data/Aeson/Extended.hs
+formatted       45b24cbb6885  stack-9.9.9/src/Data/Attoparsec/Args.hs
+formatted       6be772a6002d  stack-9.9.9/src/Data/Attoparsec/Combinators.hs
+formatted       e4f1165dc10b  stack-9.9.9/src/Data/Binary/VersionTagged.hs
+formatted       b0799314dce2  stack-9.9.9/src/Data/Maybe/Extra.hs
+formatted       8740a5fcb2ef  stack-9.9.9/src/Data/Set/Monad.hs
+formatted       c08aaa172c8a  stack-9.9.9/src/Network/HTTP/Download.hs
+formatted       f77d8fc87761  stack-9.9.9/src/Network/HTTP/Download/Verified.hs
+formatted       d7a0d294e3c7  stack-9.9.9/src/Options/Applicative/Args.hs
+formatted       0116483c0e39  stack-9.9.9/src/Options/Applicative/Builder/Extra.hs
+formatted       35d5981b158d  stack-9.9.9/src/Path/Find.hs
+formatted       eafb883091d5  stack-9.9.9/src/Path/IO.hs
+formatted       2df07688f5ed  stack-9.9.9/src/Stack/Build.hs
+formatted       bdc4f36f2c62  stack-9.9.9/src/Stack/Build/Cache.hs
+formatted       3efe83cb7bab  stack-9.9.9/src/Stack/Build/ConstructPlan.hs
+formatted       eba7881519c6  stack-9.9.9/src/Stack/Build/Execute.hs
+formatted       696682f442ac  stack-9.9.9/src/Stack/Build/Haddock.hs
+formatted       e0977d49109c  stack-9.9.9/src/Stack/Build/Installed.hs
+formatted       8f851999c795  stack-9.9.9/src/Stack/Build/Source.hs
+formatted       4d0e41188711  stack-9.9.9/src/Stack/Build/Types.hs
+formatted       eafdaba2b6f6  stack-9.9.9/src/Stack/BuildPlan.hs
+formatted       8a25795f0c0a  stack-9.9.9/src/Stack/Config.hs
+formatted       db186c830bf3  stack-9.9.9/src/Stack/Constants.hs
+formatted       7683bf498978  stack-9.9.9/src/Stack/Docker.hs
+formatted       107229bac31d  stack-9.9.9/src/Stack/Docker/GlobalDB.hs
+formatted       7d15eaae39ff  stack-9.9.9/src/Stack/Dot.hs
+formatted       e3fe02818737  stack-9.9.9/src/Stack/Exec.hs
+formatted       49a25d808c68  stack-9.9.9/src/Stack/Fetch.hs
+formatted       967c0ee2eef6  stack-9.9.9/src/Stack/GhcPkg.hs
+formatted       cea7894d840c  stack-9.9.9/src/Stack/Init.hs
+formatted       9f228f8da7ce  stack-9.9.9/src/Stack/New.hs
+formatted       a4120f7039a7  stack-9.9.9/src/Stack/Package.hs
+formatted       439e5a338ecf  stack-9.9.9/src/Stack/PackageDump.hs
+formatted       131f4c58d4cc  stack-9.9.9/src/Stack/PackageIndex.hs
+formatted       2814387b2b76  stack-9.9.9/src/Stack/Repl.hs
+formatted       766a71919c27  stack-9.9.9/src/Stack/Setup.hs
+formatted       68c48310e4ce  stack-9.9.9/src/Stack/Solver.hs
+formatted       ebbf896669e4  stack-9.9.9/src/Stack/Types.hs
+formatted       6a77fad930d5  stack-9.9.9/src/Stack/Types/BuildPlan.hs
+formatted       a6b384b7378c  stack-9.9.9/src/Stack/Types/Config.hs
+formatted       69401069957e  stack-9.9.9/src/Stack/Types/Docker.hs
+formatted       cd2bb0d685de  stack-9.9.9/src/Stack/Types/FlagName.hs
+formatted       d8f8b074a086  stack-9.9.9/src/Stack/Types/GhcPkgId.hs
+formatted       bd4be7dcc823  stack-9.9.9/src/Stack/Types/Internal.hs
+formatted       6f80f79fae7e  stack-9.9.9/src/Stack/Types/PackageIdentifier.hs
+formatted       88a4f8bd73e5  stack-9.9.9/src/Stack/Types/PackageName.hs
+formatted       cf90354db024  stack-9.9.9/src/Stack/Types/StackT.hs
+formatted       c698b30fdbaf  stack-9.9.9/src/Stack/Types/Version.hs
+formatted       2f4855580908  stack-9.9.9/src/Stack/Upgrade.hs
+formatted       3d5a37bb3efe  stack-9.9.9/src/Stack/Upload.hs
+formatted       85d5e680f53b  stack-9.9.9/src/System/Process/Log.hs
+formatted       015e3efd2d86  stack-9.9.9/src/System/Process/PagerEditor.hs
+formatted       bc60fdf030d4  stack-9.9.9/src/System/Process/Read.hs
+formatted       c40dad9ce8ee  stack-9.9.9/src/System/Process/Run.hs
+formatted       91427a9b532d  stack-9.9.9/src/main/Main.hs
+formatted       4eec70869c80  stack-9.9.9/src/main/Plugins.hs
+formatted       50b246d28182  stack-9.9.9/src/main/Plugins/Commands.hs
+formatted       65c8c298f7aa  stack-9.9.9/src/test/Spec.hs
+formatted       bbf9464a53ee  stack-9.9.9/src/test/Stack/ArgsSpec.hs
+formatted       41ea23b8880f  stack-9.9.9/src/test/Stack/Build/ExecuteSpec.hs
+formatted       6c14531834d3  stack-9.9.9/src/test/Stack/BuildPlanSpec.hs
+formatted       24a9e21c3c15  stack-9.9.9/src/test/Stack/ConfigSpec.hs
+formatted       2d4cbcc98b0c  stack-9.9.9/src/test/Stack/PackageDumpSpec.hs
+formatted       fd075df62297  stack-9.9.9/src/test/Test.hs
+formatted       53953d153dfa  stack-9.9.9/test/integration/Spec.hs
+formatted       56e4e5258116  statistics-0.16.5.0/Statistics/Autocorrelation.hs
+formatted       bda03074d5aa  statistics-0.16.5.0/Statistics/ConfidenceInt.hs
+formatted       069d7156f594  statistics-0.16.5.0/Statistics/Correlation.hs
+formatted       9ba74f547b39  statistics-0.16.5.0/Statistics/Correlation/Kendall.hs
+formatted       bbd4e3259f36  statistics-0.16.5.0/Statistics/Distribution.hs
+formatted       ae8ad80251ff  statistics-0.16.5.0/Statistics/Distribution/Beta.hs
+formatted       7b32fc5b6cfc  statistics-0.16.5.0/Statistics/Distribution/Binomial.hs
+formatted       23f140cdf9bc  statistics-0.16.5.0/Statistics/Distribution/CauchyLorentz.hs
+formatted       dc30bfda499d  statistics-0.16.5.0/Statistics/Distribution/ChiSquared.hs
+formatted       f4734696df71  statistics-0.16.5.0/Statistics/Distribution/DiscreteUniform.hs
+formatted       cc3d61a22aa0  statistics-0.16.5.0/Statistics/Distribution/Exponential.hs
+formatted       5d35b356cb29  statistics-0.16.5.0/Statistics/Distribution/FDistribution.hs
+formatted       1258f180d7c0  statistics-0.16.5.0/Statistics/Distribution/Gamma.hs
+formatted       97a9584986c7  statistics-0.16.5.0/Statistics/Distribution/Geometric.hs
+formatted       e05ef1359929  statistics-0.16.5.0/Statistics/Distribution/Hypergeometric.hs
+formatted       ca93eabbbf15  statistics-0.16.5.0/Statistics/Distribution/Laplace.hs
+formatted       1e363f04365e  statistics-0.16.5.0/Statistics/Distribution/Lognormal.hs
+formatted       f5cce916fd78  statistics-0.16.5.0/Statistics/Distribution/NegativeBinomial.hs
+formatted       fb17da6ed19d  statistics-0.16.5.0/Statistics/Distribution/Normal.hs
+formatted       1bbb63345a51  statistics-0.16.5.0/Statistics/Distribution/Poisson.hs
+formatted       fb54f6de83df  statistics-0.16.5.0/Statistics/Distribution/Poisson/Internal.hs
+formatted       7c5e046a9045  statistics-0.16.5.0/Statistics/Distribution/StudentT.hs
+formatted       06505b01e90a  statistics-0.16.5.0/Statistics/Distribution/Transform.hs
+formatted       ead3df94c4d5  statistics-0.16.5.0/Statistics/Distribution/Uniform.hs
+formatted       bd8bb4f92c76  statistics-0.16.5.0/Statistics/Distribution/Weibull.hs
+formatted       1a6eda2dc778  statistics-0.16.5.0/Statistics/Function.hs
+formatted       4ce5ca3ee348  statistics-0.16.5.0/Statistics/Internal.hs
+formatted       86e8d1a0a535  statistics-0.16.5.0/Statistics/Quantile.hs
+formatted       4eb8961889ae  statistics-0.16.5.0/Statistics/Regression.hs
+formatted       535c5c96b342  statistics-0.16.5.0/Statistics/Resampling.hs
+formatted       76d271403a9e  statistics-0.16.5.0/Statistics/Resampling/Bootstrap.hs
+formatted       cc05168e10be  statistics-0.16.5.0/Statistics/Sample.hs
+formatted       24ce2ba6d88a  statistics-0.16.5.0/Statistics/Sample/Histogram.hs
+formatted       cab9e68a7e21  statistics-0.16.5.0/Statistics/Sample/Internal.hs
+formatted       7333b62fa746  statistics-0.16.5.0/Statistics/Sample/KernelDensity.hs
+formatted       57cb926959b9  statistics-0.16.5.0/Statistics/Sample/KernelDensity/Simple.hs
+formatted       e7d037eb7906  statistics-0.16.5.0/Statistics/Sample/Normalize.hs
+formatted       1242733971ab  statistics-0.16.5.0/Statistics/Sample/Powers.hs
+formatted       5530b1f597e3  statistics-0.16.5.0/Statistics/Test/Bartlett.hs
+formatted       da8b73ff5c88  statistics-0.16.5.0/Statistics/Test/ChiSquared.hs
+formatted       4990518d53f6  statistics-0.16.5.0/Statistics/Test/Internal.hs
+formatted       e5d5a7822558  statistics-0.16.5.0/Statistics/Test/KolmogorovSmirnov.hs
+formatted       68068b68b9a0  statistics-0.16.5.0/Statistics/Test/KruskalWallis.hs
+formatted       6e9db487a147  statistics-0.16.5.0/Statistics/Test/Levene.hs
+formatted       a4c13293539e  statistics-0.16.5.0/Statistics/Test/MannWhitneyU.hs
+formatted       63ad198bde51  statistics-0.16.5.0/Statistics/Test/StudentT.hs
+formatted       8222073f1e45  statistics-0.16.5.0/Statistics/Test/Types.hs
+formatted       f3c789b5cb44  statistics-0.16.5.0/Statistics/Test/WilcoxonT.hs
+formatted       4dc98e7c6347  statistics-0.16.5.0/Statistics/Transform.hs
+formatted       f4cfb5a2aebb  statistics-0.16.5.0/Statistics/Types.hs
+formatted       f071cb4c4814  statistics-0.16.5.0/Statistics/Types/Internal.hs
+formatted       b5402a2dc355  statistics-0.16.5.0/bench-papi/Bench.hs
+formatted       3963835f0889  statistics-0.16.5.0/bench-time/Bench.hs
+formatted       61d4105d3456  statistics-0.16.5.0/benchmark/Main.hs
+formatted       d80f7bf6f96d  statistics-0.16.5.0/examples/kde/KDE.hs
+formatted       dcea40eeb511  statistics-0.16.5.0/tests/Tests/ApproxEq.hs
+formatted       2ae25961f71d  statistics-0.16.5.0/tests/Tests/Correlation.hs
+formatted       b0317e3f9b24  statistics-0.16.5.0/tests/Tests/Distribution.hs
+formatted       3d4db70bc7ca  statistics-0.16.5.0/tests/Tests/ExactDistribution.hs
+formatted       299f43f28485  statistics-0.16.5.0/tests/Tests/Function.hs
+formatted       9c5a618f3bf1  statistics-0.16.5.0/tests/Tests/Helpers.hs
+formatted       fec77bb7c2ff  statistics-0.16.5.0/tests/Tests/KDE.hs
+formatted       cf822ef362eb  statistics-0.16.5.0/tests/Tests/Matrix.hs
+formatted       27d419347379  statistics-0.16.5.0/tests/Tests/Matrix/Types.hs
+formatted       ea56dc62a57a  statistics-0.16.5.0/tests/Tests/NonParametric.hs
+formatted       4d0172724882  statistics-0.16.5.0/tests/Tests/NonParametric/Table.hs
+formatted       65adfee8e313  statistics-0.16.5.0/tests/Tests/Orphanage.hs
+formatted       bc01b981cd07  statistics-0.16.5.0/tests/Tests/Parametric.hs
+formatted       d94da0d75fed  statistics-0.16.5.0/tests/Tests/Quantile.hs
+formatted       4e08d3c82170  statistics-0.16.5.0/tests/Tests/Serialization.hs
+formatted       d60faa0d5f6c  statistics-0.16.5.0/tests/Tests/Transform.hs
+formatted       55f699624c9d  statistics-0.16.5.0/tests/doctest.hs
+formatted       f0e3d45c9159  statistics-0.16.5.0/tests/tests.hs
+formatted       2c4811cee336  stm-2.5.3.1/Control/Concurrent/STM.hs
+formatted       fd81deb0a4a0  stm-2.5.3.1/Control/Concurrent/STM/TArray.hs
+formatted       9e9c5d20cb7c  stm-2.5.3.1/Control/Concurrent/STM/TBQueue.hs
+formatted       643c4c4304ca  stm-2.5.3.1/Control/Concurrent/STM/TChan.hs
+formatted       5de1c73d983a  stm-2.5.3.1/Control/Concurrent/STM/TMVar.hs
+formatted       4fabec7ab606  stm-2.5.3.1/Control/Concurrent/STM/TQueue.hs
+formatted       0167cfd0c06a  stm-2.5.3.1/Control/Concurrent/STM/TSem.hs
+formatted       6a0ece958ded  stm-2.5.3.1/Control/Concurrent/STM/TVar.hs
+partly-checked  6aa0575474c4  stm-2.5.3.1/Control/Monad/STM.hs
+formatted       6aecb29a12ab  stm-2.5.3.1/Control/Sequential/STM.hs
+formatted       7474b7e1d4f5  stm-2.5.3.1/Setup.hs
+formatted       e290291970ca  stm-2.5.3.1/testsuite/src/Issue17.hs
+formatted       c3343c4d48cb  stm-2.5.3.1/testsuite/src/Issue9.hs
+formatted       9159857aaf7c  stm-2.5.3.1/testsuite/src/Main.hs
+formatted       5a7bdca5eb2f  stm-2.5.3.1/testsuite/src/Stm052.hs
+formatted       9b30ce222d29  stm-2.5.3.1/testsuite/src/Stm064.hs
+formatted       0f86f9b94d82  stm-2.5.3.1/testsuite/src/Stm065.hs
+formatted       0872066614e0  swagger2-2.9.1/Setup.hs
+formatted       e61f805d8652  swagger2-2.9.1/examples/hackage.hs
+formatted       a3ed3c0b3b85  swagger2-2.9.1/src/Data/HashMap/Strict/InsOrd/Compat.hs
+formatted       d71d272f220f  swagger2-2.9.1/src/Data/Swagger.hs
+formatted       f496ee0d4d0c  swagger2-2.9.1/src/Data/Swagger/Declare.hs
+formatted       5302fa19a1a8  swagger2-2.9.1/src/Data/Swagger/Internal.hs
+formatted       7dfa5b7b4803  swagger2-2.9.1/src/Data/Swagger/Internal/AesonUtils.hs
+formatted       be2b0df4ab34  swagger2-2.9.1/src/Data/Swagger/Internal/ParamSchema.hs
+formatted       e4da8109511e  swagger2-2.9.1/src/Data/Swagger/Internal/Schema.hs
+formatted       15b94738c187  swagger2-2.9.1/src/Data/Swagger/Internal/Schema/Validation.hs
+formatted       185e997df260  swagger2-2.9.1/src/Data/Swagger/Internal/TypeShape.hs
+formatted       abc8c961e8d8  swagger2-2.9.1/src/Data/Swagger/Internal/Utils.hs
+formatted       fac02daa06aa  swagger2-2.9.1/src/Data/Swagger/Lens.hs
+formatted       69c86ada5be4  swagger2-2.9.1/src/Data/Swagger/Operation.hs
+formatted       385ee16b2de5  swagger2-2.9.1/src/Data/Swagger/Optics.hs
+formatted       b74d3f8d9ea4  swagger2-2.9.1/src/Data/Swagger/ParamSchema.hs
+formatted       19a9a7c3a0de  swagger2-2.9.1/src/Data/Swagger/Schema.hs
+formatted       59f835605e15  swagger2-2.9.1/src/Data/Swagger/Schema/Generator.hs
+formatted       7770e1fe2353  swagger2-2.9.1/src/Data/Swagger/Schema/Validation.hs
+formatted       2fd313eb8746  swagger2-2.9.1/src/Data/Swagger/SchemaOptions.hs
+formatted       92d24f16cf77  swagger2-2.9.1/test/Data/Swagger/CommonTestTypes.hs
+formatted       88ae3e07f1d6  swagger2-2.9.1/test/Data/Swagger/ParamSchemaSpec.hs
+formatted       ba8d29dd4929  swagger2-2.9.1/test/Data/Swagger/Schema/GeneratorSpec.hs
+formatted       272a0817c6aa  swagger2-2.9.1/test/Data/Swagger/Schema/ValidationSpec.hs
+formatted       bc07fee39679  swagger2-2.9.1/test/Data/Swagger/SchemaSpec.hs
+formatted       b59e746b8895  swagger2-2.9.1/test/Data/SwaggerSpec.hs
+formatted       2fbd14b119a4  swagger2-2.9.1/test/Spec.hs
+formatted       1534dc51af48  swagger2-2.9.1/test/SpecCommon.hs
+formatted       cc17d35cb01d  swagger2-2.9.1/test/doctests.hs
+formatted       2620b9109dd2  tasty-1.5.4/Control/Concurrent/Async.hs
+formatted       e865ae48f11b  tasty-1.5.4/Setup.hs
+formatted       02df8ffe2eb3  tasty-1.5.4/Test/Tasty.hs
+formatted       da0dd4a5f265  tasty-1.5.4/Test/Tasty/CmdLine.hs
+formatted       3a5fcf3042c0  tasty-1.5.4/Test/Tasty/Core.hs
+formatted       dd00b52edeb7  tasty-1.5.4/Test/Tasty/Ingredients.hs
+formatted       9e13d30f1aac  tasty-1.5.4/Test/Tasty/Ingredients/Basic.hs
+formatted       0e632c2a7445  tasty-1.5.4/Test/Tasty/Ingredients/ConsoleReporter.hs
+formatted       8c6cf8ae3d46  tasty-1.5.4/Test/Tasty/Ingredients/IncludingOptions.hs
+formatted       095b09b1c146  tasty-1.5.4/Test/Tasty/Ingredients/ListTests.hs
+formatted       1d78b5b7b6d6  tasty-1.5.4/Test/Tasty/Options.hs
+formatted       3423011ddd29  tasty-1.5.4/Test/Tasty/Options/Core.hs
+formatted       d9fbf61e13b4  tasty-1.5.4/Test/Tasty/Options/Env.hs
+formatted       bc3c7e134e5c  tasty-1.5.4/Test/Tasty/Parallel.hs
+formatted       d8b2acdcc674  tasty-1.5.4/Test/Tasty/Patterns.hs
+formatted       0d97fca4d8c9  tasty-1.5.4/Test/Tasty/Patterns/Eval.hs
+formatted       4d5e43449879  tasty-1.5.4/Test/Tasty/Patterns/Expr.hs
+formatted       29b2bd9b3c0c  tasty-1.5.4/Test/Tasty/Patterns/Parser.hs
+formatted       3b88b836a8da  tasty-1.5.4/Test/Tasty/Patterns/Printer.hs
+formatted       76352e15e8e6  tasty-1.5.4/Test/Tasty/Patterns/Types.hs
+formatted       b2ce3b3d2ba6  tasty-1.5.4/Test/Tasty/Providers.hs
+formatted       1e9dd494aa0d  tasty-1.5.4/Test/Tasty/Providers/ConsoleFormat.hs
+formatted       b0fac1f874dc  tasty-1.5.4/Test/Tasty/Run.hs
+formatted       cb5862c8ea8c  tasty-1.5.4/Test/Tasty/Runners.hs
+formatted       a02b4c543c75  tasty-1.5.4/Test/Tasty/Runners/Reducers.hs
+formatted       b1a27c0f0bde  tasty-1.5.4/Test/Tasty/Runners/Utils.hs
+formatted       e865ae48f11b  tensorflow-0.2.0.1/Setup.hs
+formatted       fc583182d149  tensorflow-0.2.0.1/src/TensorFlow/Build.hs
+formatted       6a8867b44ef1  tensorflow-0.2.0.1/src/TensorFlow/BuildOp.hs
+formatted       77489c8b8f87  tensorflow-0.2.0.1/src/TensorFlow/ControlFlow.hs
+formatted       4cc5cc869f78  tensorflow-0.2.0.1/src/TensorFlow/Core.hs
+formatted       76a2093eefd8  tensorflow-0.2.0.1/src/TensorFlow/Internal/FFI.hs
+formatted       62d7a0995301  tensorflow-0.2.0.1/src/TensorFlow/Internal/VarInt.hs
+formatted       33a0218dc730  tensorflow-0.2.0.1/src/TensorFlow/Nodes.hs
+formatted       6079d89faf44  tensorflow-0.2.0.1/src/TensorFlow/Output.hs
+formatted       43470d2fc559  tensorflow-0.2.0.1/src/TensorFlow/Session.hs
+formatted       da3a7653404f  tensorflow-0.2.0.1/src/TensorFlow/Tensor.hs
+formatted       7e1723a7554a  tensorflow-0.2.0.1/src/TensorFlow/Types.hs
+formatted       7786d8f90a48  tensorflow-0.2.0.1/tests/FFITest.hs
+formatted       0f5db84dd77b  tensorflow-0.2.0.1/tests/VarIntTest.hs
+formatted       8ae0364c5862  text-2.1.4/benchmarks/haskell/Benchmarks.hs
+formatted       ffe091bc4536  text-2.1.4/benchmarks/haskell/Benchmarks/Builder.hs
+formatted       46dcd64eb8e5  text-2.1.4/benchmarks/haskell/Benchmarks/Concat.hs
+formatted       1e546a146930  text-2.1.4/benchmarks/haskell/Benchmarks/DecodeUtf8.hs
+formatted       41909e2de312  text-2.1.4/benchmarks/haskell/Benchmarks/EncodeUtf8.hs
+formatted       919f36b12c57  text-2.1.4/benchmarks/haskell/Benchmarks/Equality.hs
+formatted       a5d1f5795b29  text-2.1.4/benchmarks/haskell/Benchmarks/FileRead.hs
+formatted       09b54ec2d23a  text-2.1.4/benchmarks/haskell/Benchmarks/FileWrite.hs
+formatted       ad27e899bf04  text-2.1.4/benchmarks/haskell/Benchmarks/FoldLines.hs
+formatted       983d6f9117cd  text-2.1.4/benchmarks/haskell/Benchmarks/Micro.hs
+formatted       78b2688949ff  text-2.1.4/benchmarks/haskell/Benchmarks/Multilang.hs
+formatted       6ee308d7049c  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/BigTable.hs
+formatted       b1d195224e1a  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/Cut.hs
+formatted       2814a67c6d1b  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/Fold.hs
+formatted       2cebf4fe82ba  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/Sort.hs
+formatted       d9f35273ed3a  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/StripTags.hs
+formatted       760d861cf866  text-2.1.4/benchmarks/haskell/Benchmarks/Programs/Throughput.hs
+formatted       021d8145a2fe  text-2.1.4/benchmarks/haskell/Benchmarks/Pure.hs
+formatted       e54e95cc30f1  text-2.1.4/benchmarks/haskell/Benchmarks/ReadNumbers.hs
+formatted       bf7477bd4934  text-2.1.4/benchmarks/haskell/Benchmarks/Replace.hs
+formatted       36cf43ee1086  text-2.1.4/benchmarks/haskell/Benchmarks/Search.hs
+formatted       6630a0ba2adf  text-2.1.4/benchmarks/haskell/Benchmarks/Stream.hs
+formatted       582c824b5ff5  text-2.1.4/benchmarks/haskell/Benchmarks/WordFrequencies.hs
+formatted       352931675b25  text-2.1.4/scripts/ApiCompare.hs
+formatted       227860122661  text-2.1.4/scripts/Arsec.hs
+formatted       eb1cc9cf331c  text-2.1.4/scripts/CaseFolding.hs
+formatted       a0bdad468ca4  text-2.1.4/scripts/CaseMapping.hs
+formatted       57e97be5ba61  text-2.1.4/scripts/SpecialCasing.hs
+formatted       d775bb623580  text-2.1.4/scripts/UnicodeData.hs
+partly-checked  08b3c96288dc  text-2.1.4/src/Data/Text.hs
+formatted       5b72823ffe98  text-2.1.4/src/Data/Text/Array.hs
+formatted       4970b89f4e7e  text-2.1.4/src/Data/Text/Encoding.hs
+formatted       d6231f7ebe99  text-2.1.4/src/Data/Text/Encoding/Error.hs
+formatted       7580816061c0  text-2.1.4/src/Data/Text/Foreign.hs
+formatted       d26ae280631c  text-2.1.4/src/Data/Text/IO.hs
+formatted       8c24fec0de81  text-2.1.4/src/Data/Text/IO/Utf8.hs
+formatted       8c62dc2df371  text-2.1.4/src/Data/Text/Internal.hs
+formatted       48c631518261  text-2.1.4/src/Data/Text/Internal/ArrayUtils.hs
+formatted       e5f93165747b  text-2.1.4/src/Data/Text/Internal/Builder.hs
+formatted       3a05c951a914  text-2.1.4/src/Data/Text/Internal/Builder/Functions.hs
+formatted       f5f871c975a4  text-2.1.4/src/Data/Text/Internal/Builder/Int/Digits.hs
+formatted       ab51e88834e1  text-2.1.4/src/Data/Text/Internal/Builder/RealFloat/Functions.hs
+formatted       7fa192160c9b  text-2.1.4/src/Data/Text/Internal/ByteStringCompat.hs
+formatted       370cd9150da5  text-2.1.4/src/Data/Text/Internal/Encoding.hs
+formatted       43a1a670b3db  text-2.1.4/src/Data/Text/Internal/Encoding/Fusion.hs
+formatted       07ceae987c37  text-2.1.4/src/Data/Text/Internal/Encoding/Fusion/Common.hs
+formatted       875961737225  text-2.1.4/src/Data/Text/Internal/Encoding/Utf16.hs
+formatted       48ea4745d7e8  text-2.1.4/src/Data/Text/Internal/Encoding/Utf32.hs
+formatted       999f28ae046f  text-2.1.4/src/Data/Text/Internal/Encoding/Utf8.hs
+formatted       9b74d0d7d95a  text-2.1.4/src/Data/Text/Internal/Fusion.hs
+formatted       9ae139203b50  text-2.1.4/src/Data/Text/Internal/Fusion/CaseMapping.hs
+formatted       0858f0992142  text-2.1.4/src/Data/Text/Internal/Fusion/Common.hs
+formatted       eb26e26b5392  text-2.1.4/src/Data/Text/Internal/Fusion/Size.hs
+formatted       a8149e253de6  text-2.1.4/src/Data/Text/Internal/Fusion/Types.hs
+formatted       32b50634031b  text-2.1.4/src/Data/Text/Internal/IO.hs
+formatted       e2bb47936e11  text-2.1.4/src/Data/Text/Internal/IsAscii.hs
+formatted       538632ba614a  text-2.1.4/src/Data/Text/Internal/Lazy.hs
+formatted       513ae58ba231  text-2.1.4/src/Data/Text/Internal/Lazy/Encoding/Fusion.hs
+formatted       c627413119e8  text-2.1.4/src/Data/Text/Internal/Lazy/Fusion.hs
+formatted       a3c76abdf09c  text-2.1.4/src/Data/Text/Internal/Lazy/Search.hs
+formatted       7eee07692410  text-2.1.4/src/Data/Text/Internal/Measure.hs
+formatted       7635d57189ea  text-2.1.4/src/Data/Text/Internal/PrimCompat.hs
+formatted       634f3b2cbbde  text-2.1.4/src/Data/Text/Internal/Private.hs
+formatted       a41bd3d7edab  text-2.1.4/src/Data/Text/Internal/Read.hs
+formatted       ec56c867ca01  text-2.1.4/src/Data/Text/Internal/Reverse.hs
+formatted       eff6a5ffb928  text-2.1.4/src/Data/Text/Internal/Search.hs
+formatted       67bf06cca611  text-2.1.4/src/Data/Text/Internal/StrictBuilder.hs
+formatted       a739bca575a2  text-2.1.4/src/Data/Text/Internal/Transformation.hs
+formatted       18ae86a38924  text-2.1.4/src/Data/Text/Internal/Unsafe.hs
+formatted       d3b144e675ef  text-2.1.4/src/Data/Text/Internal/Unsafe/Char.hs
+formatted       66e47e950ff0  text-2.1.4/src/Data/Text/Internal/Validate.hs
+formatted       3597c6a4f1b6  text-2.1.4/src/Data/Text/Internal/Validate/Native.hs
+formatted       530d639cfd22  text-2.1.4/src/Data/Text/Internal/Validate/Simd.hs
+formatted       6d4a57a9277a  text-2.1.4/src/Data/Text/Lazy.hs
+formatted       38ff2d7cb674  text-2.1.4/src/Data/Text/Lazy/Builder.hs
+formatted       38666af96d86  text-2.1.4/src/Data/Text/Lazy/Builder/Int.hs
+formatted       29e65f5a5a13  text-2.1.4/src/Data/Text/Lazy/Builder/RealFloat.hs
+formatted       a19c3620d230  text-2.1.4/src/Data/Text/Lazy/Encoding.hs
+formatted       ac210eeb3b0e  text-2.1.4/src/Data/Text/Lazy/IO.hs
+formatted       737ca3b98c79  text-2.1.4/src/Data/Text/Lazy/Internal.hs
+formatted       4053796b9111  text-2.1.4/src/Data/Text/Lazy/Read.hs
+formatted       95185ba2e9b4  text-2.1.4/src/Data/Text/Read.hs
+formatted       1140737c74af  text-2.1.4/src/Data/Text/Show.hs
+formatted       5aa1e6b706a4  text-2.1.4/src/Data/Text/Unsafe.hs
+formatted       8c35444bb7ce  text-2.1.4/tests/LiteralRuleTest.hs
+formatted       6c129d5c79c5  text-2.1.4/tests/Tests.hs
+formatted       8c9ba4deec7f  text-2.1.4/tests/Tests/Lift.hs
+formatted       eea1f5be128d  text-2.1.4/tests/Tests/Properties.hs
+formatted       a1795fe9db0d  text-2.1.4/tests/Tests/Properties/Basics.hs
+formatted       4095b24da789  text-2.1.4/tests/Tests/Properties/Builder.hs
+formatted       0da554ece794  text-2.1.4/tests/Tests/Properties/CornerCases.hs
+formatted       966d6896eccc  text-2.1.4/tests/Tests/Properties/Folds.hs
+formatted       05ba3e128127  text-2.1.4/tests/Tests/Properties/Instances.hs
+formatted       85722c4277cd  text-2.1.4/tests/Tests/Properties/LowLevel.hs
+formatted       73ce8ac597c8  text-2.1.4/tests/Tests/Properties/Read.hs
+formatted       3429b9447ca6  text-2.1.4/tests/Tests/Properties/Substrings.hs
+formatted       bc4a76ea99f3  text-2.1.4/tests/Tests/Properties/Text.hs
+formatted       826bd37a7ee9  text-2.1.4/tests/Tests/Properties/Transcoding.hs
+formatted       cd2ce6693a46  text-2.1.4/tests/Tests/Properties/Validate.hs
+formatted       9ebdcbc8f461  text-2.1.4/tests/Tests/QuickCheckUtils.hs
+formatted       c6e25a3408e0  text-2.1.4/tests/Tests/RebindableSyntaxTest.hs
+formatted       939e997260ba  text-2.1.4/tests/Tests/Regressions.hs
+formatted       b7037d3f07cc  text-2.1.4/tests/Tests/ShareEmpty.hs
+formatted       f4e9f36f6be9  text-2.1.4/tests/Tests/SlowFunctions.hs
+formatted       375091fbe743  text-2.1.4/tests/Tests/Utils.hs
+formatted       e865ae48f11b  th-abstraction-0.7.2.0/Setup.hs
+formatted       57bdc5001ee0  th-abstraction-0.7.2.0/src/Language/Haskell/TH/Datatype.hs
+formatted       b67b7b9c968e  th-abstraction-0.7.2.0/src/Language/Haskell/TH/Datatype/Internal.hs
+formatted       505471744185  th-abstraction-0.7.2.0/src/Language/Haskell/TH/Datatype/TyVarBndr.hs
+formatted       5179ef6dc11e  th-abstraction-0.7.2.0/test/Harness.hs
+partly-checked  69d549cce6e9  th-abstraction-0.7.2.0/test/Main.hs
+formatted       cc537447a0e2  th-abstraction-0.7.2.0/test/Types.hs
+formatted       fd2ff7ad97e3  time-1.16.0.1/Setup.hs
+formatted       125260959da8  time-1.16.0.1/benchmark/Main.hs
+formatted       67b30ed4204b  time-1.16.0.1/lib/Data/Format.hs
+formatted       138e9cb35e13  time-1.16.0.1/lib/Data/Time.hs
+formatted       d808f69809c2  time-1.16.0.1/lib/Data/Time/Calendar.hs
+formatted       0f617301ba5b  time-1.16.0.1/lib/Data/Time/Calendar/CalendarDiffDays.hs
+formatted       e210a7d3456b  time-1.16.0.1/lib/Data/Time/Calendar/Days.hs
+formatted       03412f0b8356  time-1.16.0.1/lib/Data/Time/Calendar/Easter.hs
+formatted       f8d4d6f009e4  time-1.16.0.1/lib/Data/Time/Calendar/Gregorian.hs
+formatted       be538512fc07  time-1.16.0.1/lib/Data/Time/Calendar/Julian.hs
+formatted       625e7b428153  time-1.16.0.1/lib/Data/Time/Calendar/JulianYearDay.hs
+formatted       9ba18c758e02  time-1.16.0.1/lib/Data/Time/Calendar/Month.hs
+formatted       eee4b0761e17  time-1.16.0.1/lib/Data/Time/Calendar/MonthDay.hs
+formatted       fe021b5bb8e1  time-1.16.0.1/lib/Data/Time/Calendar/OrdinalDate.hs
+formatted       025bb4e6307c  time-1.16.0.1/lib/Data/Time/Calendar/Private.hs
+formatted       7d5d5b51baca  time-1.16.0.1/lib/Data/Time/Calendar/Quarter.hs
+formatted       61e7261c13da  time-1.16.0.1/lib/Data/Time/Calendar/Types.hs
+formatted       55892c430b7b  time-1.16.0.1/lib/Data/Time/Calendar/Week.hs
+formatted       8d6d0ff3c8ec  time-1.16.0.1/lib/Data/Time/Calendar/WeekDate.hs
+formatted       c2de888ee84b  time-1.16.0.1/lib/Data/Time/Clock.hs
+formatted       0b01b660df99  time-1.16.0.1/lib/Data/Time/Clock/Internal/AbsoluteTime.hs
+declined        -             time-1.16.0.1/lib/Data/Time/Clock/Internal/CTimeval.hs
+formatted       fde88246f337  time-1.16.0.1/lib/Data/Time/Clock/Internal/DiffTime.hs
+formatted       130201256efa  time-1.16.0.1/lib/Data/Time/Clock/Internal/NominalDiffTime.hs
+formatted       8ef6afa040bc  time-1.16.0.1/lib/Data/Time/Clock/Internal/POSIXTime.hs
+formatted       e9a83d4e7327  time-1.16.0.1/lib/Data/Time/Clock/Internal/SystemTime.hs
+formatted       310750655010  time-1.16.0.1/lib/Data/Time/Clock/Internal/UTCDiff.hs
+formatted       a58732cd7eb8  time-1.16.0.1/lib/Data/Time/Clock/Internal/UTCTime.hs
+formatted       acaedfdab698  time-1.16.0.1/lib/Data/Time/Clock/Internal/UniversalTime.hs
+formatted       cf441f809fdf  time-1.16.0.1/lib/Data/Time/Clock/POSIX.hs
+formatted       6dd6034d73b4  time-1.16.0.1/lib/Data/Time/Clock/System.hs
+formatted       7cdd69049dcf  time-1.16.0.1/lib/Data/Time/Clock/TAI.hs
+formatted       b600a5b5c744  time-1.16.0.1/lib/Data/Time/Format.hs
+formatted       6c005f66f0be  time-1.16.0.1/lib/Data/Time/Format/Format/Class.hs
+formatted       47f1688c0787  time-1.16.0.1/lib/Data/Time/Format/Format/Instances.hs
+formatted       3764319de19b  time-1.16.0.1/lib/Data/Time/Format/ISO8601.hs
+formatted       76aa49c9292b  time-1.16.0.1/lib/Data/Time/Format/Internal.hs
+formatted       b7ae7592bcb6  time-1.16.0.1/lib/Data/Time/Format/Locale.hs
+formatted       2cd514758801  time-1.16.0.1/lib/Data/Time/Format/Parse.hs
+formatted       05a7f0bf5554  time-1.16.0.1/lib/Data/Time/Format/Parse/Class.hs
+formatted       cb2ccd8c40fd  time-1.16.0.1/lib/Data/Time/Format/Parse/Instances.hs
+formatted       4489a4cdab49  time-1.16.0.1/lib/Data/Time/LocalTime.hs
+formatted       93986a8450d1  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/CalendarDiffTime.hs
+formatted       94f381fe1ad1  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/Foreign.hs
+formatted       ca98c37fb34c  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/LocalTime.hs
+formatted       9200ebaf067a  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/TimeOfDay.hs
+formatted       74496e557585  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/TimeZone.hs
+formatted       343d16749a70  time-1.16.0.1/lib/Data/Time/LocalTime/Internal/ZonedTime.hs
+formatted       c365d1aa63cd  time-1.16.0.1/test/ForeignCalls.hs
+formatted       fc8234c946fb  time-1.16.0.1/test/ShowDefaultTZAbbreviations.hs
+formatted       b51274826033  time-1.16.0.1/test/ShowTime.hs
+formatted       921506ceef7c  time-1.16.0.1/test/main/Main.hs
+formatted       4db8ebf798ab  time-1.16.0.1/test/main/Test/AddDiff.hs
+formatted       0ff201c42388  time-1.16.0.1/test/main/Test/Arbitrary.hs
+formatted       a31b50175d67  time-1.16.0.1/test/main/Test/Calendar/AddDays.hs
+formatted       5b09874748fc  time-1.16.0.1/test/main/Test/Calendar/AddDaysRef.hs
+formatted       1f2ab37cb077  time-1.16.0.1/test/main/Test/Calendar/CalendarProps.hs
+formatted       fe6ab3f07aa9  time-1.16.0.1/test/main/Test/Calendar/Calendars.hs
+formatted       ba59184d394c  time-1.16.0.1/test/main/Test/Calendar/CalendarsRef.hs
+formatted       e4ef550ce506  time-1.16.0.1/test/main/Test/Calendar/ClipDates.hs
+formatted       f707c1ddaec1  time-1.16.0.1/test/main/Test/Calendar/ClipDatesRef.hs
+formatted       d031fd80c27f  time-1.16.0.1/test/main/Test/Calendar/ConvertBack.hs
+formatted       168e9526852a  time-1.16.0.1/test/main/Test/Calendar/DayPeriod.hs
+formatted       2b4c5c903e40  time-1.16.0.1/test/main/Test/Calendar/Duration.hs
+formatted       56b1c2b8beea  time-1.16.0.1/test/main/Test/Calendar/Easter.hs
+formatted       3f35f96f7337  time-1.16.0.1/test/main/Test/Calendar/LongWeekYears.hs
+formatted       bdfb9e546ba3  time-1.16.0.1/test/main/Test/Calendar/LongWeekYearsRef.hs
+formatted       b5181d1d6218  time-1.16.0.1/test/main/Test/Calendar/MonthDay.hs
+formatted       c01cb667a9a8  time-1.16.0.1/test/main/Test/Calendar/MonthDayRef.hs
+formatted       fc8caea8866a  time-1.16.0.1/test/main/Test/Calendar/MonthOfYear.hs
+formatted       70ffc80a9b91  time-1.16.0.1/test/main/Test/Calendar/Valid.hs
+formatted       516d424dfa89  time-1.16.0.1/test/main/Test/Calendar/Week.hs
+formatted       96f42a259e5f  time-1.16.0.1/test/main/Test/Calendar/Year.hs
+formatted       868a03b5a657  time-1.16.0.1/test/main/Test/Clock/Conversion.hs
+formatted       5c09197a3ec5  time-1.16.0.1/test/main/Test/Clock/Pattern.hs
+formatted       449c0cf9b9bd  time-1.16.0.1/test/main/Test/Clock/Resolution.hs
+formatted       e5afef596413  time-1.16.0.1/test/main/Test/Clock/TAI.hs
+formatted       56759726b4b9  time-1.16.0.1/test/main/Test/Format/Compile.hs
+formatted       9a5ff5f775a0  time-1.16.0.1/test/main/Test/Format/Format.hs
+formatted       458676174a43  time-1.16.0.1/test/main/Test/Format/ISO8601.hs
+formatted       b9a6b11b9e1e  time-1.16.0.1/test/main/Test/Format/ParseTime.hs
+formatted       87d53b9f2df8  time-1.16.0.1/test/main/Test/LocalTime/CalendarDiffTime.hs
+formatted       3c6fcbef621e  time-1.16.0.1/test/main/Test/LocalTime/Time.hs
+formatted       4c37e59c357b  time-1.16.0.1/test/main/Test/LocalTime/TimeOfDay.hs
+formatted       db61298fae47  time-1.16.0.1/test/main/Test/LocalTime/TimeRef.hs
+formatted       274e9173e128  time-1.16.0.1/test/main/Test/TestUtil.hs
+formatted       41cfd788db10  time-1.16.0.1/test/main/Test/Types.hs
+formatted       2e8ad72db81a  time-1.16.0.1/test/template/Main.hs
+formatted       29972ed619e0  time-1.16.0.1/test/template/Test/TastyWrapper.hs
+formatted       ea580c874e6f  time-1.16.0.1/test/unix/Main.hs
+formatted       9d938426697b  time-1.16.0.1/test/unix/Test/Format/Format.hs
+formatted       21b333187684  time-1.16.0.1/test/unix/Test/LocalTime/TimeZone.hs
+formatted       f627f436f233  time-1.16.0.1/test/unix/Test/TestUtil.hs
+formatted       7917eb9d1f66  tls-2.4.3/Benchmarks/Benchmarks.hs
+formatted       489534a90c4b  tls-2.4.3/Network/TLS.hs
+formatted       7ce1364dcb4a  tls-2.4.3/Network/TLS/Backend.hs
+formatted       f9d4f25241e6  tls-2.4.3/Network/TLS/Cipher.hs
+formatted       a0fa75894b05  tls-2.4.3/Network/TLS/Compression.hs
+formatted       1228f4f8033d  tls-2.4.3/Network/TLS/Context.hs
+formatted       04740f1040b6  tls-2.4.3/Network/TLS/Context/Internal.hs
+formatted       8a2288d2bc96  tls-2.4.3/Network/TLS/Core.hs
+formatted       e1443ef58aff  tls-2.4.3/Network/TLS/Credentials.hs
+formatted       b6cc61acbea0  tls-2.4.3/Network/TLS/Crypto.hs
+formatted       a8fca7835f0d  tls-2.4.3/Network/TLS/Crypto/DH.hs
+formatted       446c8c8a07ed  tls-2.4.3/Network/TLS/Crypto/IES.hs
+formatted       b7e6a0d5aaac  tls-2.4.3/Network/TLS/Crypto/Types.hs
+formatted       025f72c75341  tls-2.4.3/Network/TLS/ErrT.hs
+formatted       427d32e6cdf8  tls-2.4.3/Network/TLS/Error.hs
+formatted       25c2c4064c31  tls-2.4.3/Network/TLS/Extension.hs
+formatted       2be304b6f83e  tls-2.4.3/Network/TLS/Extension.hs-boot
+formatted       49db661a445a  tls-2.4.3/Network/TLS/Extra.hs
+formatted       62633b825876  tls-2.4.3/Network/TLS/Extra/Cipher.hs
+formatted       0ee5bebb0e07  tls-2.4.3/Network/TLS/Extra/CipherCBC.hs
+formatted       5d51d07ab286  tls-2.4.3/Network/TLS/Extra/FFDHE.hs
+formatted       0003b888622d  tls-2.4.3/Network/TLS/Handshake.hs
+formatted       34fa3d5f9250  tls-2.4.3/Network/TLS/Handshake/Certificate.hs
+formatted       e0f2a684c93c  tls-2.4.3/Network/TLS/Handshake/Client.hs
+formatted       9c57a50d7cfc  tls-2.4.3/Network/TLS/Handshake/Client/ClientHello.hs
+formatted       fd3b33b247f9  tls-2.4.3/Network/TLS/Handshake/Client/Common.hs
+formatted       020fe94afa85  tls-2.4.3/Network/TLS/Handshake/Client/ServerHello.hs
+formatted       3f13588f75b3  tls-2.4.3/Network/TLS/Handshake/Client/TLS12.hs
+formatted       5c1bcf1c14e2  tls-2.4.3/Network/TLS/Handshake/Client/TLS13.hs
+formatted       a90b777adf6d  tls-2.4.3/Network/TLS/Handshake/Common.hs
+formatted       c5440404a04f  tls-2.4.3/Network/TLS/Handshake/Common13.hs
+formatted       02f97ef7593d  tls-2.4.3/Network/TLS/Handshake/Control.hs
+formatted       2c0676398aca  tls-2.4.3/Network/TLS/Handshake/Key.hs
+formatted       9dc05a147d3b  tls-2.4.3/Network/TLS/Handshake/Random.hs
+formatted       718a7715d422  tls-2.4.3/Network/TLS/Handshake/Server.hs
+formatted       b75e8a299fbb  tls-2.4.3/Network/TLS/Handshake/Server/ClientHello.hs
+formatted       17ae63748aa2  tls-2.4.3/Network/TLS/Handshake/Server/ClientHello12.hs
+formatted       d664c259f6af  tls-2.4.3/Network/TLS/Handshake/Server/ClientHello13.hs
+formatted       a2f2d3470f0f  tls-2.4.3/Network/TLS/Handshake/Server/Common.hs
+formatted       5c07986ccbf1  tls-2.4.3/Network/TLS/Handshake/Server/ServerHello12.hs
+formatted       d3df4765699c  tls-2.4.3/Network/TLS/Handshake/Server/ServerHello13.hs
+formatted       b29b9f3d0ef7  tls-2.4.3/Network/TLS/Handshake/Server/TLS12.hs
+formatted       dacd920cbf42  tls-2.4.3/Network/TLS/Handshake/Server/TLS13.hs
+formatted       6a8388c49af7  tls-2.4.3/Network/TLS/Handshake/Signature.hs
+formatted       4d5c61b9dc3d  tls-2.4.3/Network/TLS/Handshake/State.hs
+formatted       f55d027db091  tls-2.4.3/Network/TLS/Handshake/State13.hs
+formatted       f907190b60ed  tls-2.4.3/Network/TLS/Handshake/TranscriptHash.hs
+formatted       5e1320c4c161  tls-2.4.3/Network/TLS/HashAndSignature.hs
+formatted       7be5df148925  tls-2.4.3/Network/TLS/Hooks.hs
+formatted       b606b0451a2f  tls-2.4.3/Network/TLS/IO.hs
+formatted       4288557274dd  tls-2.4.3/Network/TLS/IO/Decode.hs
+formatted       a9013006f398  tls-2.4.3/Network/TLS/IO/Encode.hs
+formatted       6c20cf748535  tls-2.4.3/Network/TLS/Imports.hs
+formatted       21e9ce7c3507  tls-2.4.3/Network/TLS/Internal.hs
+formatted       92999e90c6b3  tls-2.4.3/Network/TLS/KeySchedule.hs
+formatted       febba7334e9e  tls-2.4.3/Network/TLS/MAC.hs
+formatted       9955ee0bd505  tls-2.4.3/Network/TLS/Measurement.hs
+formatted       426e8a75af01  tls-2.4.3/Network/TLS/Packet.hs
+formatted       41cbbbe9b09e  tls-2.4.3/Network/TLS/Packet13.hs
+formatted       a14ea5098afd  tls-2.4.3/Network/TLS/Parameters.hs
+formatted       29784d509f48  tls-2.4.3/Network/TLS/PostHandshake.hs
+formatted       8edf9e30c18b  tls-2.4.3/Network/TLS/QUIC.hs
+formatted       360a52dcf151  tls-2.4.3/Network/TLS/RNG.hs
+formatted       805eb6800681  tls-2.4.3/Network/TLS/Record.hs
+formatted       e0fdd96fb4fc  tls-2.4.3/Network/TLS/Record/Decrypt.hs
+formatted       58ae652319fd  tls-2.4.3/Network/TLS/Record/Encrypt.hs
+formatted       3d9c53507eaa  tls-2.4.3/Network/TLS/Record/Layer.hs
+formatted       a66c641fa8a1  tls-2.4.3/Network/TLS/Record/Recv.hs
+formatted       9fa588833e07  tls-2.4.3/Network/TLS/Record/Send.hs
+formatted       500b4c31d912  tls-2.4.3/Network/TLS/Record/State.hs
+formatted       932e2e5f3887  tls-2.4.3/Network/TLS/Record/Types.hs
+formatted       42bed44c3eaa  tls-2.4.3/Network/TLS/Session.hs
+formatted       04bdb49074e5  tls-2.4.3/Network/TLS/State.hs
+formatted       aedfbc85cbbc  tls-2.4.3/Network/TLS/Struct.hs
+formatted       4c783b0d9e9d  tls-2.4.3/Network/TLS/Struct13.hs
+formatted       ea0d39cd9f70  tls-2.4.3/Network/TLS/Types.hs
+formatted       253e29d81f4e  tls-2.4.3/Network/TLS/Types/Cipher.hs
+formatted       e6e9255220bb  tls-2.4.3/Network/TLS/Types/Secret.hs
+formatted       35bf4ee60be8  tls-2.4.3/Network/TLS/Types/Session.hs
+formatted       741cb1c84257  tls-2.4.3/Network/TLS/Types/Version.hs
+formatted       be921f75cb0a  tls-2.4.3/Network/TLS/Util.hs
+formatted       1d021bd7e9a7  tls-2.4.3/Network/TLS/Util/ASN1.hs
+formatted       9d70166f446f  tls-2.4.3/Network/TLS/Util/Serialization.hs
+formatted       32a205e8e871  tls-2.4.3/Network/TLS/Wire.hs
+formatted       5c85b406dea3  tls-2.4.3/Network/TLS/X509.hs
+formatted       e865ae48f11b  tls-2.4.3/Setup.hs
+formatted       45a83b6cde24  tls-2.4.3/test/API.hs
+formatted       0d25f1866c79  tls-2.4.3/test/Arbitrary.hs
+formatted       ba1557ab2831  tls-2.4.3/test/Certificate.hs
+formatted       37c216e39fd1  tls-2.4.3/test/CiphersSpec.hs
+formatted       ae18040b3401  tls-2.4.3/test/ECHSpec.hs
+formatted       a99d04d129f7  tls-2.4.3/test/EncodeSpec.hs
+formatted       a99713b7b244  tls-2.4.3/test/HandshakeSpec.hs
+formatted       23c51f587e8d  tls-2.4.3/test/PipeChan.hs
+formatted       338dcd8056de  tls-2.4.3/test/PubKey.hs
+formatted       9621232ed432  tls-2.4.3/test/Run.hs
+formatted       f2f3550cb17a  tls-2.4.3/test/Session.hs
+formatted       2fbd14b119a4  tls-2.4.3/test/Spec.hs
+formatted       9034972735e8  tls-2.4.3/test/ThreadSpec.hs
+formatted       199e7d71bfb6  tls-2.4.3/util/Client.hs
+formatted       c555911ae465  tls-2.4.3/util/Common.hs
+formatted       7dd3b5f2e44a  tls-2.4.3/util/Imports.hs
+formatted       6e9aa070c533  tls-2.4.3/util/Server.hs
+formatted       fa42557a0faa  tls-2.4.3/util/tls-client.hs
+formatted       0b4839d81970  tls-2.4.3/util/tls-server.hs
+partly-checked  36a6d2f6abb4  transformers-0.6.3.0/Control/Applicative/Backwards.hs
+partly-checked  1e0b5cb5f0b3  transformers-0.6.3.0/Control/Applicative/Lift.hs
+formatted       578b0e3c1682  transformers-0.6.3.0/Control/Monad/Signatures.hs
+partly-checked  903d26036ddf  transformers-0.6.3.0/Control/Monad/Trans/Accum.hs
+formatted       dc84c86bb82a  transformers-0.6.3.0/Control/Monad/Trans/Class.hs
+formatted       f620249e716e  transformers-0.6.3.0/Control/Monad/Trans/Cont.hs
+partly-checked  2f38844a0b53  transformers-0.6.3.0/Control/Monad/Trans/Except.hs
+partly-checked  6d8a76ff4396  transformers-0.6.3.0/Control/Monad/Trans/Identity.hs
+partly-checked  992296f3d968  transformers-0.6.3.0/Control/Monad/Trans/Maybe.hs
+formatted       6f7326668607  transformers-0.6.3.0/Control/Monad/Trans/RWS.hs
+formatted       74ae178e7877  transformers-0.6.3.0/Control/Monad/Trans/RWS/CPS.hs
+partly-checked  bbbde7e4b2ce  transformers-0.6.3.0/Control/Monad/Trans/RWS/Lazy.hs
+partly-checked  99cf9d466187  transformers-0.6.3.0/Control/Monad/Trans/RWS/Strict.hs
+partly-checked  b0dea6ec7a78  transformers-0.6.3.0/Control/Monad/Trans/Reader.hs
+formatted       b58555f08340  transformers-0.6.3.0/Control/Monad/Trans/Select.hs
+formatted       dc729d1936a2  transformers-0.6.3.0/Control/Monad/Trans/State.hs
+partly-checked  79758bb0ea7c  transformers-0.6.3.0/Control/Monad/Trans/State/Lazy.hs
+partly-checked  fa45dc7389ec  transformers-0.6.3.0/Control/Monad/Trans/State/Strict.hs
+formatted       6a9857bbd181  transformers-0.6.3.0/Control/Monad/Trans/Writer.hs
+formatted       63f9ddfce19f  transformers-0.6.3.0/Control/Monad/Trans/Writer/CPS.hs
+partly-checked  4c4d740d0f11  transformers-0.6.3.0/Control/Monad/Trans/Writer/Lazy.hs
+partly-checked  d70a600a810a  transformers-0.6.3.0/Control/Monad/Trans/Writer/Strict.hs
+declined        -             transformers-0.6.3.0/Data/Functor/Constant.hs
+partly-checked  d6d1f203de5b  transformers-0.6.3.0/Data/Functor/Reverse.hs
+formatted       e865ae48f11b  transformers-0.6.3.0/Setup.hs
+declined        -             transformers-0.6.3.0/legacy/pre709/Data/Functor/Identity.hs
+formatted       ee4ba7098a5c  transformers-0.6.3.0/legacy/pre711/Control/Monad/IO/Class.hs
+formatted       7d9fab9a0caf  transformers-0.6.3.0/legacy/pre711/Data/Functor/Classes.hs
+formatted       effc0109229f  transformers-0.6.3.0/legacy/pre711/Data/Functor/Compose.hs
+partly-checked  e96184ffa2ec  transformers-0.6.3.0/legacy/pre711/Data/Functor/Product.hs
+formatted       87f324f0c768  transformers-0.6.3.0/legacy/pre711/Data/Functor/Sum.hs
+formatted       e865ae48f11b  typed-process-0.2.13.0/Setup.hs
+formatted       5962b1150c46  typed-process-0.2.13.0/src/System/Process/Typed.hs
+formatted       25b5330661d4  typed-process-0.2.13.0/src/System/Process/Typed/Internal.hs
+formatted       2fbd14b119a4  typed-process-0.2.13.0/test/Spec.hs
+formatted       4eb03857d270  typed-process-0.2.13.0/test/System/Process/TypedSpec.hs
+formatted       e865ae48f11b  unliftio-0.2.25.1/Setup.hs
+formatted       86399961b28a  unliftio-0.2.25.1/bench/ConcBench.hs
+formatted       737706872ccf  unliftio-0.2.25.1/src/UnliftIO.hs
+formatted       713d1458fd8d  unliftio-0.2.25.1/src/UnliftIO/Async.hs
+formatted       5463e06f3adf  unliftio-0.2.25.1/src/UnliftIO/Chan.hs
+formatted       189c6c89bb81  unliftio-0.2.25.1/src/UnliftIO/Concurrent.hs
+partly-checked  c708a2f3ee0e  unliftio-0.2.25.1/src/UnliftIO/Directory.hs
+formatted       402fb486b3cf  unliftio-0.2.25.1/src/UnliftIO/Environment.hs
+formatted       c9305d3c9be9  unliftio-0.2.25.1/src/UnliftIO/Exception.hs
+formatted       e5401695da5a  unliftio-0.2.25.1/src/UnliftIO/Exception/Lens.hs
+formatted       ff1234d6ddbd  unliftio-0.2.25.1/src/UnliftIO/Foreign.hs
+formatted       a64a8ea6c117  unliftio-0.2.25.1/src/UnliftIO/IO.hs
+formatted       c940b0ac5eb1  unliftio-0.2.25.1/src/UnliftIO/IO/File.hs
+formatted       dad3d51a66aa  unliftio-0.2.25.1/src/UnliftIO/IO/File/Posix.hs
+formatted       2688f4b976d8  unliftio-0.2.25.1/src/UnliftIO/IORef.hs
+formatted       1738f330bd77  unliftio-0.2.25.1/src/UnliftIO/Internals/Async.hs
+formatted       2e37ab380c8b  unliftio-0.2.25.1/src/UnliftIO/MVar.hs
+formatted       25ab39f4a7d1  unliftio-0.2.25.1/src/UnliftIO/Memoize.hs
+formatted       5803964631a0  unliftio-0.2.25.1/src/UnliftIO/Process.hs
+formatted       f17d64d4c913  unliftio-0.2.25.1/src/UnliftIO/QSem.hs
+formatted       6e50df49a6ba  unliftio-0.2.25.1/src/UnliftIO/QSemN.hs
+formatted       ee3bf4d22673  unliftio-0.2.25.1/src/UnliftIO/STM.hs
+formatted       809c4f4424bb  unliftio-0.2.25.1/src/UnliftIO/Temporary.hs
+formatted       0f5f7167bc7b  unliftio-0.2.25.1/src/UnliftIO/Timeout.hs
+formatted       2fbd14b119a4  unliftio-0.2.25.1/test/Spec.hs
+formatted       3118f2133668  unliftio-0.2.25.1/test/UnliftIO/AsyncSpec.hs
+formatted       dda4d2f1b5ef  unliftio-0.2.25.1/test/UnliftIO/DirectorySpec.hs
+formatted       500e291fb7a1  unliftio-0.2.25.1/test/UnliftIO/ExceptionSpec.hs
+formatted       a899c691b2e6  unliftio-0.2.25.1/test/UnliftIO/IO/FileSpec.hs
+formatted       258e4c04879b  unliftio-0.2.25.1/test/UnliftIO/IOSpec.hs
+formatted       68c4411ed8f4  unliftio-0.2.25.1/test/UnliftIO/MemoizeSpec.hs
+formatted       f878ce9da222  unliftio-0.2.25.1/test/UnliftIO/PooledAsyncSpec.hs
+formatted       2651e43d4614  unordered-containers-0.2.21/Data/HashMap/Internal.hs
+declined        -             unordered-containers-0.2.21/Data/HashMap/Internal/Array.hs
+formatted       7be08d5816ff  unordered-containers-0.2.21/Data/HashMap/Internal/Debug.hs
+formatted       25f94316b17e  unordered-containers-0.2.21/Data/HashMap/Internal/List.hs
+formatted       08e073c2c7dd  unordered-containers-0.2.21/Data/HashMap/Internal/Strict.hs
+formatted       a4d22b20936f  unordered-containers-0.2.21/Data/HashMap/Lazy.hs
+formatted       b51d84ac0257  unordered-containers-0.2.21/Data/HashMap/Strict.hs
+formatted       d88b52d5dce2  unordered-containers-0.2.21/Data/HashSet.hs
+formatted       a238b77b05ef  unordered-containers-0.2.21/Data/HashSet/Internal.hs
+formatted       e865ae48f11b  unordered-containers-0.2.21/Setup.hs
+formatted       3375b823bad1  unordered-containers-0.2.21/benchmarks/Benchmarks.hs
+formatted       0ed2a6102dba  unordered-containers-0.2.21/benchmarks/FineGrained.hs
+formatted       b1cc4b50fa0e  unordered-containers-0.2.21/benchmarks/Key/Bytes.hs
+formatted       de9c7b30da36  unordered-containers-0.2.21/benchmarks/Util/ByteString.hs
+formatted       284694c5798b  unordered-containers-0.2.21/benchmarks/Util/Int.hs
+formatted       771e81db1b05  unordered-containers-0.2.21/benchmarks/Util/String.hs
+formatted       2b26017dfa9e  unordered-containers-0.2.21/tests/Main.hs
+formatted       27005a00112e  unordered-containers-0.2.21/tests/Properties.hs
+formatted       feff92267a82  unordered-containers-0.2.21/tests/Properties/HashMapLazy.hs
+formatted       f2a904c3a89a  unordered-containers-0.2.21/tests/Properties/HashMapStrict.hs
+formatted       a612762e1b58  unordered-containers-0.2.21/tests/Properties/HashSet.hs
+formatted       3584a01b2cdd  unordered-containers-0.2.21/tests/Properties/List.hs
+formatted       0a148c15ca33  unordered-containers-0.2.21/tests/Regressions.hs
+formatted       d094f07710f5  unordered-containers-0.2.21/tests/Strictness.hs
+formatted       00cf0a5ee0ea  unordered-containers-0.2.21/tests/Util/Key.hs
+formatted       e865ae48f11b  unpacked-containers-0/Setup.hs
+formatted       8523e9d3c669  unpacked-containers-0/example/Int.hs
+formatted       ba3a254765ca  unpacked-containers-0/example/Main.hs
+formatted       941a76a7e532  unpacked-containers-0/src/Key.hsig
+formatted       0ab7b95772b1  unpacked-containers-0/src/Map.hs
+formatted       85c3c57292d8  unpacked-containers-0/src/Map/Internal.hs
+formatted       412fdc3e3871  unpacked-containers-0/src/Map/Internal/Debug.hs
+formatted       88e3acab50fe  unpacked-containers-0/src/Map/Lazy.hs
+formatted       d160eb88e766  unpacked-containers-0/src/Map/Merge/Lazy.hs
+formatted       3401a14fe602  unpacked-containers-0/src/Map/Merge/Strict.hs
+formatted       1da0e231433b  unpacked-containers-0/src/Map/Strict.hs
+formatted       9b01f9961f71  unpacked-containers-0/src/Map/Strict/Internal.hs
+formatted       bb6c9398369f  unpacked-containers-0/src/Set.hs
+formatted       7f0b0b9590ea  unpacked-containers-0/src/Set/Internal.hs
+formatted       867c9afd504a  unpacked-containers-0/utils/Internal/BitQueue.hs
+formatted       7c96e08090d5  unpacked-containers-0/utils/Internal/BitUtil.hs
+formatted       a1134be4230d  unpacked-containers-0/utils/Internal/PtrEquality.hs
+formatted       534c12741bb9  unpacked-containers-0/utils/Internal/State.hs
+formatted       ed12f1faf0ed  unpacked-containers-0/utils/Internal/StrictFold.hs
+formatted       621944df674c  unpacked-containers-0/utils/Internal/StrictMaybe.hs
+formatted       b7a091ef4c77  unpacked-containers-0/utils/Internal/StrictPair.hs
+formatted       4a8ac51676df  uuid-types-1.0.6.1/Setup.hs
+formatted       e97eca400518  uuid-types-1.0.6.1/src/Data/UUID/Types.hs
+formatted       2dc18f83b9c9  uuid-types-1.0.6.1/src/Data/UUID/Types/Internal.hs
+formatted       d63508f44841  uuid-types-1.0.6.1/src/Data/UUID/Types/Internal/Builder.hs
+formatted       14a92dc8286f  uuid-types-1.0.6.1/tests/TestUUID.hs
+formatted       e865ae48f11b  vector-0.13.2.0/Setup.hs
+formatted       cb65eb293bd5  vector-0.13.2.0/benchlib/Bench/Vector/Algo/AwShCC.hs
+formatted       8a7c35b680c0  vector-0.13.2.0/benchlib/Bench/Vector/Algo/FindIndexR.hs
+formatted       7536358d3c8c  vector-0.13.2.0/benchlib/Bench/Vector/Algo/HybCC.hs
+formatted       31caf6daa18c  vector-0.13.2.0/benchlib/Bench/Vector/Algo/Leaffix.hs
+formatted       c647f14c61cb  vector-0.13.2.0/benchlib/Bench/Vector/Algo/ListRank.hs
+formatted       bbc9ffdd439f  vector-0.13.2.0/benchlib/Bench/Vector/Algo/MutableSet.hs
+formatted       49998369707c  vector-0.13.2.0/benchlib/Bench/Vector/Algo/NextPermutation.hs
+formatted       a1d4d3d489b4  vector-0.13.2.0/benchlib/Bench/Vector/Algo/Quickhull.hs
+formatted       cff7efe83577  vector-0.13.2.0/benchlib/Bench/Vector/Algo/Rootfix.hs
+formatted       bc96aa2b8cdf  vector-0.13.2.0/benchlib/Bench/Vector/Algo/Spectral.hs
+formatted       438dab6789ad  vector-0.13.2.0/benchlib/Bench/Vector/Algo/Tridiag.hs
+formatted       ec97bfaffec3  vector-0.13.2.0/benchlib/Bench/Vector/Tasty.hs
+formatted       368deb66d310  vector-0.13.2.0/benchlib/Bench/Vector/TestData/Graph.hs
+formatted       476c4f42945a  vector-0.13.2.0/benchlib/Bench/Vector/TestData/ParenTree.hs
+formatted       6b1b4aea2361  vector-0.13.2.0/benchmarks/Main.hs
+formatted       77ce7d3b1eda  vector-0.13.2.0/internal/GenUnboxTuple.hs
+formatted       7e257cfd7468  vector-0.13.2.0/src/Data/Vector.hs
+formatted       5524402837b5  vector-0.13.2.0/src/Data/Vector/Fusion/Bundle.hs
+formatted       6724b27a5182  vector-0.13.2.0/src/Data/Vector/Fusion/Bundle/Monadic.hs
+formatted       281a320dd1fd  vector-0.13.2.0/src/Data/Vector/Fusion/Bundle/Size.hs
+formatted       8b09b3b8c680  vector-0.13.2.0/src/Data/Vector/Fusion/Stream/Monadic.hs
+formatted       b52b6135f86c  vector-0.13.2.0/src/Data/Vector/Fusion/Util.hs
+formatted       a981b8dada8f  vector-0.13.2.0/src/Data/Vector/Generic.hs
+formatted       24e087932bf9  vector-0.13.2.0/src/Data/Vector/Generic/Base.hs
+formatted       6c34f319e085  vector-0.13.2.0/src/Data/Vector/Generic/Mutable.hs
+formatted       14ab0fea35a5  vector-0.13.2.0/src/Data/Vector/Generic/Mutable/Base.hs
+formatted       31ef8684e6a5  vector-0.13.2.0/src/Data/Vector/Generic/New.hs
+formatted       1842a6e1d83f  vector-0.13.2.0/src/Data/Vector/Internal/Check.hs
+formatted       3a331752a108  vector-0.13.2.0/src/Data/Vector/Mutable.hs
+formatted       c77c6d8b48f1  vector-0.13.2.0/src/Data/Vector/Primitive.hs
+formatted       7790a579fd85  vector-0.13.2.0/src/Data/Vector/Primitive/Mutable.hs
+formatted       d63a299a6982  vector-0.13.2.0/src/Data/Vector/Storable.hs
+formatted       f3208fa21c31  vector-0.13.2.0/src/Data/Vector/Storable/Internal.hs
+formatted       a312fe3ca55a  vector-0.13.2.0/src/Data/Vector/Storable/Mutable.hs
+formatted       ca6c3919dbe4  vector-0.13.2.0/src/Data/Vector/Strict.hs
+formatted       3bc69095cb4d  vector-0.13.2.0/src/Data/Vector/Strict/Mutable.hs
+formatted       5a349caedbaf  vector-0.13.2.0/src/Data/Vector/Unboxed.hs
+formatted       fa9e19a0d58d  vector-0.13.2.0/src/Data/Vector/Unboxed/Base.hs
+formatted       58ff39d532e3  vector-0.13.2.0/src/Data/Vector/Unboxed/Mutable.hs
+formatted       f4e17f002657  vector-0.13.2.0/tests-inspect/Inspect.hs
+formatted       992258e8ec96  vector-0.13.2.0/tests-inspect/Inspect/DerivingVia.hs
+formatted       005977089309  vector-0.13.2.0/tests-inspect/Inspect/DerivingVia/OtherFoo.hs
+formatted       c86daf6b0506  vector-0.13.2.0/tests-inspect/main.hs
+formatted       b27a545b7df5  vector-0.13.2.0/tests/Boilerplater.hs
+formatted       9d758ab214f1  vector-0.13.2.0/tests/Main.hs
+formatted       8061fe09f977  vector-0.13.2.0/tests/Tests/Bundle.hs
+formatted       1525be7e0a46  vector-0.13.2.0/tests/Tests/Move.hs
+formatted       43dd4c8d5a9c  vector-0.13.2.0/tests/Tests/Vector/Boxed.hs
+formatted       54a741f726e9  vector-0.13.2.0/tests/Tests/Vector/Primitive.hs
+formatted       3ef89840b582  vector-0.13.2.0/tests/Tests/Vector/Property.hs
+formatted       89d6f5f286c7  vector-0.13.2.0/tests/Tests/Vector/Storable.hs
+formatted       cc9e0bc6f8e0  vector-0.13.2.0/tests/Tests/Vector/Strict.hs
+formatted       891ffe33c45c  vector-0.13.2.0/tests/Tests/Vector/Unboxed.hs
+formatted       9a90ef543177  vector-0.13.2.0/tests/Tests/Vector/UnitTests.hs
+formatted       9c35c5c38daf  vector-0.13.2.0/tests/Utilities.hs
+formatted       88ed51490944  vector-0.13.2.0/tests/doctests.hs
+formatted       5561dc5bc4a0  vector-algorithms-0.9.1.0/bench/simple/Blocks.hs
+formatted       8f4b8b5057e3  vector-algorithms-0.9.1.0/bench/simple/Main.hs
+formatted       518a902d3c59  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms.hs
+formatted       553211019f78  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/AmericanFlag.hs
+formatted       5bc324a60b4f  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Common.hs
+formatted       a7c93d247f1d  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Heap.hs
+formatted       385f1aecc6ac  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Insertion.hs
+formatted       eaaf49335045  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Intro.hs
+formatted       4a50f751547a  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Merge.hs
+formatted       9a4c2dc71a47  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Optimal.hs
+formatted       b7b0f718deb2  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Radix.hs
+formatted       47f1d28b6145  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Search.hs
+formatted       0a376532e9cb  vector-algorithms-0.9.1.0/src/Data/Vector/Algorithms/Tim.hs
+formatted       a9ac57f13756  vector-algorithms-0.9.1.0/tests/properties/Optimal.hs
+formatted       b19d49d0db4b  vector-algorithms-0.9.1.0/tests/properties/Properties.hs
+formatted       9afd19dd61b7  vector-algorithms-0.9.1.0/tests/properties/Tests.hs
+formatted       68c72976d14e  vector-algorithms-0.9.1.0/tests/properties/Util.hs
+formatted       a090ecfca870  wai-3.2.5/Network/Wai.hs
+formatted       eebfbcd85364  wai-3.2.5/Network/Wai/Internal.hs
+formatted       76fdb58b6d05  wai-3.2.5/test/Network/WaiSpec.hs
+formatted       2fbd14b119a4  wai-3.2.5/test/Spec.hs
+formatted       c11484118aae  warp-3.4.15/Network/Wai/Handler/Warp.hs
+formatted       009ccfac9d51  warp-3.4.15/Network/Wai/Handler/Warp/Buffer.hs
+formatted       f910265f50d3  warp-3.4.15/Network/Wai/Handler/Warp/Conduit.hs
+formatted       c978e6eb627c  warp-3.4.15/Network/Wai/Handler/Warp/Counter.hs
+formatted       26b005936471  warp-3.4.15/Network/Wai/Handler/Warp/Date.hs
+formatted       f0898462d96f  warp-3.4.15/Network/Wai/Handler/Warp/FdCache.hs
+formatted       5c8ff344b068  warp-3.4.15/Network/Wai/Handler/Warp/File.hs
+formatted       e56514093065  warp-3.4.15/Network/Wai/Handler/Warp/FileInfoCache.hs
+formatted       73ea52fed850  warp-3.4.15/Network/Wai/Handler/Warp/HTTP1.hs
+formatted       fd0b552aaa71  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2.hs
+formatted       a7debda99dd6  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2/File.hs
+formatted       cd7ebbac04db  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2/PushPromise.hs
+formatted       40821f53b1d9  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2/Request.hs
+formatted       831c4440cde7  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2/Response.hs
+formatted       40e59aa92ecc  warp-3.4.15/Network/Wai/Handler/Warp/HTTP2/Types.hs
+formatted       69c55babd99e  warp-3.4.15/Network/Wai/Handler/Warp/HashMap.hs
+formatted       8abbc71d629a  warp-3.4.15/Network/Wai/Handler/Warp/Header.hs
+formatted       a036771b5a25  warp-3.4.15/Network/Wai/Handler/Warp/IO.hs
+formatted       d92af26eb2ec  warp-3.4.15/Network/Wai/Handler/Warp/Imports.hs
+formatted       98f2e1cfdade  warp-3.4.15/Network/Wai/Handler/Warp/Internal.hs
+formatted       e8583e08a2e4  warp-3.4.15/Network/Wai/Handler/Warp/MultiMap.hs
+formatted       ed16ebc20147  warp-3.4.15/Network/Wai/Handler/Warp/PackInt.hs
+formatted       22e5a5d6d3c9  warp-3.4.15/Network/Wai/Handler/Warp/ReadInt.hs
+formatted       e29d1517c375  warp-3.4.15/Network/Wai/Handler/Warp/Request.hs
+formatted       c7905b72682b  warp-3.4.15/Network/Wai/Handler/Warp/RequestHeader.hs
+formatted       9b74f110bcea  warp-3.4.15/Network/Wai/Handler/Warp/Response.hs
+formatted       27cae25ae83a  warp-3.4.15/Network/Wai/Handler/Warp/ResponseHeader.hs
+formatted       de4ca27b8a08  warp-3.4.15/Network/Wai/Handler/Warp/Run.hs
+formatted       47a04a642ad1  warp-3.4.15/Network/Wai/Handler/Warp/SendFile.hs
+formatted       bad8f2d42358  warp-3.4.15/Network/Wai/Handler/Warp/Settings.hs
+formatted       bc4925a06045  warp-3.4.15/Network/Wai/Handler/Warp/ShuttingDown.hs
+formatted       d916df760bae  warp-3.4.15/Network/Wai/Handler/Warp/Types.hs
+formatted       f1ff20ab87da  warp-3.4.15/Network/Wai/Handler/Warp/Windows.hs
+formatted       2bef9620132e  warp-3.4.15/Network/Wai/Handler/Warp/WithApplication.hs
+formatted       f3a2c7ee7659  warp-3.4.15/bench/Parser.hs
+formatted       8f739e595518  warp-3.4.15/test/BufferSpec.hs
+formatted       6d25fc643699  warp-3.4.15/test/ConduitSpec.hs
+formatted       103842d1ec84  warp-3.4.15/test/ConnectionSpec.hs
+formatted       3f7b8c3f5246  warp-3.4.15/test/EarlyHintsSpec.hs
+formatted       04c0408bb90a  warp-3.4.15/test/ExceptionSpec.hs
+formatted       6da076d7c2ae  warp-3.4.15/test/FdCacheSpec.hs
+formatted       f91844cc6a8f  warp-3.4.15/test/FileSpec.hs
+formatted       0ba618e41ab1  warp-3.4.15/test/GracefulShutdownSpec.hs
+formatted       4d81d4cdb7c7  warp-3.4.15/test/HTTP.hs
+formatted       70bab0349402  warp-3.4.15/test/PackIntSpec.hs
+formatted       c0ed531ac6d7  warp-3.4.15/test/ReadIntSpec.hs
+formatted       203ea20f13bf  warp-3.4.15/test/RequestSpec.hs
+formatted       4ef55f7e523c  warp-3.4.15/test/ResponseHeaderSpec.hs
+formatted       ac591a85b19f  warp-3.4.15/test/ResponseSpec.hs
+formatted       190ad2e064b1  warp-3.4.15/test/RunSpec.hs
+formatted       12d7c8bf7283  warp-3.4.15/test/SendFileSpec.hs
+formatted       56bf11ebdf68  warp-3.4.15/test/ServerStateSpec.hs
+formatted       2fbd14b119a4  warp-3.4.15/test/Spec.hs
+formatted       6239c41d8ad7  warp-3.4.15/test/WithApplicationSpec.hs
+formatted       c61ebeab72e9  warp-3.4.15/test/doctests.hs
+formatted       c3a0978b358e  xmonad-0.18.1/Main.hs
+formatted       407f3f6f01b9  xmonad-0.18.1/man/xmonad.hs
+formatted       1b9e38e5ffc2  xmonad-0.18.1/src/XMonad.hs
+formatted       6205e2286818  xmonad-0.18.1/src/XMonad/Config.hs
+formatted       51d04a4033c8  xmonad-0.18.1/src/XMonad/Core.hs
+formatted       003622fa6869  xmonad-0.18.1/src/XMonad/Layout.hs
+formatted       a8d1e71aa531  xmonad-0.18.1/src/XMonad/Main.hs
+formatted       fececd53a9f5  xmonad-0.18.1/src/XMonad/ManageHook.hs
+formatted       e11a33d9123d  xmonad-0.18.1/src/XMonad/Operations.hs
+formatted       92d9b2f9aecb  xmonad-0.18.1/src/XMonad/StackSet.hs
+formatted       710ec0764541  xmonad-0.18.1/tests/Instances.hs
+formatted       150f94b8a646  xmonad-0.18.1/tests/Properties.hs
+formatted       b9cbebbac632  xmonad-0.18.1/tests/Properties/Delete.hs
+formatted       2b2b85b4c7fe  xmonad-0.18.1/tests/Properties/Failure.hs
+formatted       2825306e83f9  xmonad-0.18.1/tests/Properties/Floating.hs
+formatted       ae9be34908bc  xmonad-0.18.1/tests/Properties/Focus.hs
+formatted       1418915d6ac8  xmonad-0.18.1/tests/Properties/GreedyView.hs
+formatted       ff83b882ad73  xmonad-0.18.1/tests/Properties/Insert.hs
+formatted       2d0f361b70f7  xmonad-0.18.1/tests/Properties/Layout/Full.hs
+formatted       d216f32ba806  xmonad-0.18.1/tests/Properties/Layout/Tall.hs
+formatted       65709ceae761  xmonad-0.18.1/tests/Properties/Screen.hs
+formatted       13ed9089c892  xmonad-0.18.1/tests/Properties/Shift.hs
+formatted       879d6f9db8a2  xmonad-0.18.1/tests/Properties/Stack.hs
+formatted       7384642a8941  xmonad-0.18.1/tests/Properties/StackSet.hs
+formatted       e48be0e8732d  xmonad-0.18.1/tests/Properties/Swap.hs
+formatted       f6f63b59cfb0  xmonad-0.18.1/tests/Properties/View.hs
+formatted       cd8d73c03759  xmonad-0.18.1/tests/Properties/Workspace.hs
+formatted       4e65334f7f2a  xmonad-0.18.1/tests/Utils.hs
+formatted       d8adcc5e8871  yesod-core-1.7.0.0/bench/widget.hs
+formatted       810a9b2932db  yesod-core-1.7.0.0/src/Yesod/Core.hs
+formatted       76a91abab9c7  yesod-core-1.7.0.0/src/Yesod/Core/Class/Breadcrumbs.hs
+formatted       d94322757109  yesod-core-1.7.0.0/src/Yesod/Core/Class/Dispatch.hs
+formatted       4e0e4c27884b  yesod-core-1.7.0.0/src/Yesod/Core/Class/Dispatch/ToParentRoute.hs
+formatted       f5e77d45ac7f  yesod-core-1.7.0.0/src/Yesod/Core/Class/Handler.hs
+formatted       55ca7aed8601  yesod-core-1.7.0.0/src/Yesod/Core/Class/Yesod.hs
+formatted       7b7185683c72  yesod-core-1.7.0.0/src/Yesod/Core/Content.hs
+formatted       8f8e6e5fb762  yesod-core-1.7.0.0/src/Yesod/Core/Dispatch.hs
+formatted       74c7648af879  yesod-core-1.7.0.0/src/Yesod/Core/Handler.hs
+formatted       88d4d8c2323a  yesod-core-1.7.0.0/src/Yesod/Core/Internal.hs
+formatted       212235b50682  yesod-core-1.7.0.0/src/Yesod/Core/Internal/LiteApp.hs
+formatted       b02eb40e75c3  yesod-core-1.7.0.0/src/Yesod/Core/Internal/Request.hs
+formatted       bbb065ca69ff  yesod-core-1.7.0.0/src/Yesod/Core/Internal/Response.hs
+formatted       356a82e11c3e  yesod-core-1.7.0.0/src/Yesod/Core/Internal/Run.hs
+formatted       da5ec533b3d0  yesod-core-1.7.0.0/src/Yesod/Core/Internal/Session.hs
+formatted       7d85bdcde5ef  yesod-core-1.7.0.0/src/Yesod/Core/Internal/TH.hs
+formatted       a4d70c77b953  yesod-core-1.7.0.0/src/Yesod/Core/Internal/Util.hs
+formatted       3c6023c01f8d  yesod-core-1.7.0.0/src/Yesod/Core/Json.hs
+formatted       3d3ea6cd2254  yesod-core-1.7.0.0/src/Yesod/Core/TypeCache.hs
+formatted       69979bd29865  yesod-core-1.7.0.0/src/Yesod/Core/Types.hs
+formatted       38102a09e32a  yesod-core-1.7.0.0/src/Yesod/Core/Types/Content.hs
+formatted       49991219fbf5  yesod-core-1.7.0.0/src/Yesod/Core/Types/ErrorResponse.hs
+formatted       2f42d728713c  yesod-core-1.7.0.0/src/Yesod/Core/Types/HandlerContents.hs
+formatted       eea90c376092  yesod-core-1.7.0.0/src/Yesod/Core/Types/TypedContent.hs
+formatted       abfe32d3eadd  yesod-core-1.7.0.0/src/Yesod/Core/Unsafe.hs
+formatted       1620502b047c  yesod-core-1.7.0.0/src/Yesod/Core/Widget.hs
+formatted       b35c9ac0daff  yesod-core-1.7.0.0/src/Yesod/Routes/Class.hs
+formatted       230bf54c2b5c  yesod-core-1.7.0.0/src/Yesod/Routes/Overlap.hs
+formatted       ca6f61d82ac7  yesod-core-1.7.0.0/src/Yesod/Routes/Parse.hs
+formatted       7bcf63c3b7e5  yesod-core-1.7.0.0/src/Yesod/Routes/TH.hs
+formatted       d14da8f68696  yesod-core-1.7.0.0/src/Yesod/Routes/TH/Dispatch.hs
+formatted       ecd2aee91940  yesod-core-1.7.0.0/src/Yesod/Routes/TH/Internal.hs
+formatted       28cf4bff1605  yesod-core-1.7.0.0/src/Yesod/Routes/TH/ParseRoute.hs
+formatted       fd3fd980369e  yesod-core-1.7.0.0/src/Yesod/Routes/TH/RenderRoute.hs
+formatted       f162f96e2b36  yesod-core-1.7.0.0/src/Yesod/Routes/TH/RouteAttrs.hs
+formatted       d689ca250357  yesod-core-1.7.0.0/src/Yesod/Routes/TH/Types.hs
+formatted       4cf83d0b0f07  yesod-core-1.7.0.0/test/Hierarchy.hs
+formatted       acf61854d2ec  yesod-core-1.7.0.0/test/Hierarchy/Admin.hs
+formatted       38126f8a1ed6  yesod-core-1.7.0.0/test/Hierarchy/Nest.hs
+formatted       a739150f03f1  yesod-core-1.7.0.0/test/Hierarchy/Nest2.hs
+formatted       1998d7e7b6f0  yesod-core-1.7.0.0/test/Hierarchy/Nest2/NestInner.hs
+formatted       6e683051218c  yesod-core-1.7.0.0/test/Hierarchy/Nest3.hs
+formatted       8f1d12dc181e  yesod-core-1.7.0.0/test/Hierarchy/ResourceTree.hs
+formatted       f70ab72cd608  yesod-core-1.7.0.0/test/Route/DeepAritySpec.hs
+formatted       1a22181a9cf2  yesod-core-1.7.0.0/test/Route/DeepArityTypes.hs
+formatted       6cf89c893af0  yesod-core-1.7.0.0/test/Route/DiscoveryModeSpec.hs
+formatted       8742e593c3d0  yesod-core-1.7.0.0/test/Route/FallthroughSpec.hs
+formatted       83547078da44  yesod-core-1.7.0.0/test/Route/FocusLeafConsSpec.hs
+formatted       b96279c392b7  yesod-core-1.7.0.0/test/Route/InlineParseClausesSpec.hs
+formatted       d8f6752d05e7  yesod-core-1.7.0.0/test/Route/InstanceProbeSpec.hs
+formatted       5f762e160869  yesod-core-1.7.0.0/test/Route/InstanceProbeTypes.hs
+formatted       66f474c75dbf  yesod-core-1.7.0.0/test/Route/MissingFocusTargetSpec.hs
+formatted       4ca53b8c21db  yesod-core-1.7.0.0/test/Route/MissingFocusTargetTypes.hs
+formatted       c4733044c565  yesod-core-1.7.0.0/test/Route/NestedParseClausesSpec.hs
+formatted       96c9db79de94  yesod-core-1.7.0.0/test/Route/PureQ.hs
+formatted       1084d2ca990f  yesod-core-1.7.0.0/test/Route/RenderRouteSpec.hs
+formatted       5cf00838dae7  yesod-core-1.7.0.0/test/Route/RouteAttrSpec.hs
+formatted       9303c7a203b3  yesod-core-1.7.0.0/test/Route/SubDispatchAritySpec.hs
+formatted       141148a01530  yesod-core-1.7.0.0/test/RouteSpec.hs
+formatted       456251f78b44  yesod-core-1.7.0.0/test/YesodCoreTest.hs
+formatted       f0034c742a78  yesod-core-1.7.0.0/test/YesodCoreTest/Auth.hs
+formatted       3a700bfeb45e  yesod-core-1.7.0.0/test/YesodCoreTest/BangSeparatorRuntime.hs
+formatted       e22fa3279a0b  yesod-core-1.7.0.0/test/YesodCoreTest/Breadcrumb.hs
+formatted       3380dd13fc46  yesod-core-1.7.0.0/test/YesodCoreTest/Cache.hs
+formatted       5731b7743f4b  yesod-core-1.7.0.0/test/YesodCoreTest/CleanPath.hs
+formatted       36a004c6a4e3  yesod-core-1.7.0.0/test/YesodCoreTest/Content.hs
+formatted       25b4b6405959  yesod-core-1.7.0.0/test/YesodCoreTest/Csrf.hs
+formatted       b5d6ec2cfe62  yesod-core-1.7.0.0/test/YesodCoreTest/ErrorHandling.hs
+formatted       d369eb73b47a  yesod-core-1.7.0.0/test/YesodCoreTest/ErrorHandling/CustomApp.hs
+formatted       59bcbb168336  yesod-core-1.7.0.0/test/YesodCoreTest/Exceptions.hs
+formatted       82e178e31f61  yesod-core-1.7.0.0/test/YesodCoreTest/FallthroughDispatch/Resources.hs
+formatted       e4f8f0ea3e72  yesod-core-1.7.0.0/test/YesodCoreTest/FallthroughDispatch/Runtime.hs
+formatted       4d5c1d9a3551  yesod-core-1.7.0.0/test/YesodCoreTest/FallthroughMatrix/FirstFoo.hs
+formatted       bd497866625d  yesod-core-1.7.0.0/test/YesodCoreTest/FallthroughMatrix/Resources.hs
+formatted       8c70739a50e7  yesod-core-1.7.0.0/test/YesodCoreTest/FallthroughMatrix/Runtime.hs
+formatted       69eb694028b1  yesod-core-1.7.0.0/test/YesodCoreTest/Header.hs
+formatted       58f029383018  yesod-core-1.7.0.0/test/YesodCoreTest/InternalRequest.hs
+formatted       f7afe29ae117  yesod-core-1.7.0.0/test/YesodCoreTest/JsAttributes.hs
+formatted       84646813873d  yesod-core-1.7.0.0/test/YesodCoreTest/JsLoader.hs
+formatted       f8cdd188f370  yesod-core-1.7.0.0/test/YesodCoreTest/JsLoaderSites/Bottom.hs
+formatted       bda9b1f5f2d2  yesod-core-1.7.0.0/test/YesodCoreTest/Json.hs
+formatted       23181a127cee  yesod-core-1.7.0.0/test/YesodCoreTest/Links.hs
+formatted       ab54e89c96fb  yesod-core-1.7.0.0/test/YesodCoreTest/LiteApp.hs
+formatted       418e263ba672  yesod-core-1.7.0.0/test/YesodCoreTest/Media.hs
+formatted       0078c3a7e79d  yesod-core-1.7.0.0/test/YesodCoreTest/MediaData.hs
+formatted       46b0e2d1153d  yesod-core-1.7.0.0/test/YesodCoreTest/Meta.hs
+formatted       d8beeb52123f  yesod-core-1.7.0.0/test/YesodCoreTest/MultiPieceNestedRuntime.hs
+formatted       fb29902bb9c5  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/InnerR.hs
+formatted       4c9ceb4fb663  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/NestR.hs
+formatted       4aed48f429ab  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/Parent0R.hs
+formatted       0f8ca6cd8fe6  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/Parent0R/Child0R.hs
+formatted       762195ad3d8f  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/ParentR.hs
+formatted       7587ed701299  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/Resources.hs
+formatted       a5347308f9b0  yesod-core-1.7.0.0/test/YesodCoreTest/NestedDispatch/Runtime.hs
+formatted       2c72e04ebbc2  yesod-core-1.7.0.0/test/YesodCoreTest/NoOverloadedStrings.hs
+formatted       320b6668f0c5  yesod-core-1.7.0.0/test/YesodCoreTest/NoOverloadedStringsSub.hs
+formatted       ab80a9a09e84  yesod-core-1.7.0.0/test/YesodCoreTest/ParamDefaultSplit/Data.hs
+formatted       a8472a7588f7  yesod-core-1.7.0.0/test/YesodCoreTest/ParamDefaultSplit/Runtime.hs
+formatted       3b1830a98315  yesod-core-1.7.0.0/test/YesodCoreTest/ParamFallthroughRuntime.hs
+formatted       9191317f2178  yesod-core-1.7.0.0/test/YesodCoreTest/ParamFocusSplit/Resources.hs
+formatted       0d171db106f1  yesod-core-1.7.0.0/test/YesodCoreTest/ParamFocusSplit/Runtime.hs
+formatted       6f7510d0b57c  yesod-core-1.7.0.0/test/YesodCoreTest/ParamFocusSplit/SubR.hs
+formatted       46dbd15fa23d  yesod-core-1.7.0.0/test/YesodCoreTest/ParamNestedNoFallthroughRuntime.hs
+formatted       32c5372b9148  yesod-core-1.7.0.0/test/YesodCoreTest/ParamNoExplicitArgs.hs
+formatted       30470908614f  yesod-core-1.7.0.0/test/YesodCoreTest/ParamNoFallthroughRuntime.hs
+formatted       cf6ee78ba4ee  yesod-core-1.7.0.0/test/YesodCoreTest/ParamSubsite/Data.hs
+formatted       e0dfb958d109  yesod-core-1.7.0.0/test/YesodCoreTest/ParamSubsite/InstanceRuntime.hs
+formatted       020a44aa16b1  yesod-core-1.7.0.0/test/YesodCoreTest/ParamSubsite/SplitNested.hs
+formatted       f8d1220c3bf2  yesod-core-1.7.0.0/test/YesodCoreTest/ParamSubsite/SplitRuntime.hs
+formatted       1981b86c26db  yesod-core-1.7.0.0/test/YesodCoreTest/ParamTopLevelRuntime.hs
+formatted       f991cd7adeb7  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSite.hs
+formatted       0476a7be2abf  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSite/Compat.hs
+formatted       b2b143cf4a47  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSite/PolyAny.hs
+formatted       eb56902b1432  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSite/PolyShow.hs
+formatted       acaebbfebc7a  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSite/SubRoute.hs
+formatted       48e797fc7ef7  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSubData.hs
+formatted       18a74bf9331c  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSubDispatch.hs
+formatted       eb2ad79d2f60  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSubDispatch/Data.hs
+formatted       c0c9e30ebea8  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSubDispatchRuntime.hs
+formatted       09c5b840c977  yesod-core-1.7.0.0/test/YesodCoreTest/ParameterizedSubDispatchRuntime/Data.hs
+formatted       4555e2245690  yesod-core-1.7.0.0/test/YesodCoreTest/RawResponse.hs
+formatted       03a668e5cea8  yesod-core-1.7.0.0/test/YesodCoreTest/Redirect.hs
+formatted       ddda63d607db  yesod-core-1.7.0.0/test/YesodCoreTest/RenderRouteSpec.hs
+formatted       139e78486aea  yesod-core-1.7.0.0/test/YesodCoreTest/RenderRouteSpec/TH.hs
+formatted       1db9d98dbf8c  yesod-core-1.7.0.0/test/YesodCoreTest/Reps.hs
+formatted       e18610f848a2  yesod-core-1.7.0.0/test/YesodCoreTest/RequestBodySize.hs
+formatted       bf72ad1f5d18  yesod-core-1.7.0.0/test/YesodCoreTest/RuntimeHarness.hs
+formatted       e78bf62c9259  yesod-core-1.7.0.0/test/YesodCoreTest/SplitSubsite/Data.hs
+formatted       d553ab39b43f  yesod-core-1.7.0.0/test/YesodCoreTest/SplitSubsite/NestedR.hs
+formatted       a55ad04cebf6  yesod-core-1.7.0.0/test/YesodCoreTest/SplitSubsite/Runtime.hs
+formatted       a05df238a9e5  yesod-core-1.7.0.0/test/YesodCoreTest/Ssl.hs
+formatted       203d5f3df4f0  yesod-core-1.7.0.0/test/YesodCoreTest/Streaming.hs
+formatted       4a163efbc574  yesod-core-1.7.0.0/test/YesodCoreTest/StubLaxSameSite.hs
+formatted       5831f923349c  yesod-core-1.7.0.0/test/YesodCoreTest/StubSslOnly.hs
+formatted       6510112ce4b4  yesod-core-1.7.0.0/test/YesodCoreTest/StubStrictSameSite.hs
+formatted       9cb2274c1880  yesod-core-1.7.0.0/test/YesodCoreTest/StubUnsecured.hs
+formatted       7b7f0025954e  yesod-core-1.7.0.0/test/YesodCoreTest/SubSub.hs
+formatted       b9e29405eb1b  yesod-core-1.7.0.0/test/YesodCoreTest/SubSubData.hs
+formatted       dbed829ecef5  yesod-core-1.7.0.0/test/YesodCoreTest/SubsiteFallthrough/Data.hs
+formatted       6ef87c226f01  yesod-core-1.7.0.0/test/YesodCoreTest/SubsiteFallthrough/Nested.hs
+formatted       d5e98e912280  yesod-core-1.7.0.0/test/YesodCoreTest/SubsiteFallthrough/Runtime.hs
+formatted       fffa6b1eb3e9  yesod-core-1.7.0.0/test/YesodCoreTest/SubsiteOptsFallthrough/Data.hs
+formatted       a30c02d77457  yesod-core-1.7.0.0/test/YesodCoreTest/SubsiteOptsFallthrough/Runtime.hs
+formatted       ce40781b74ec  yesod-core-1.7.0.0/test/YesodCoreTest/WaiSubsite.hs
 formatted       67eac096b1a7  yesod-core-1.7.0.0/test/YesodCoreTest/Widget.hs
 formatted       a3265609217d  yesod-core-1.7.0.0/test/YesodCoreTest/YesodTest.hs
 formatted       4c3c5fb5bdaf  yesod-core-1.7.0.0/test/YesodCoreTest/ZeroPieceShadow/FallApp.hs
diff --git a/corpora/hackage/hackage.report b/corpora/hackage/hackage.report
--- a/corpora/hackage/hackage.report
+++ b/corpora/hackage/hackage.report
@@ -6,7 +6,7 @@
 5202 examples, 5137 formatted.
 
 ==========================================================================
-broken (7)
+broken (8)
 ==========================================================================
 
 Agda-2.8.0/src/full/Agda/TypeChecking/Conversion.hs
@@ -64,6 +64,60 @@
      import Agda.TypeChecking.Conversion.Pure (pureCompareAs, runPureConversion)
     +import Agda.TypeChecking.Da
 
+ansi-terminal-1.1.5/win/System/Console/ANSI/Windows/Foreign.hs
+    comments, in one configuration: `{-\ntypedef struct _KEY_EVENT_RECORD {\n	BOOL bKeyDown;\n	WORD wRepeatCount;\n	WORD wVirtualKeyCode;\n	WORD wVirtualScanCode;\n	union {\n		WCHAR UnicodeChar;\n		CHAR AsciiChar;\n	} uChar;\n	DWORD dwControlKeyState;\n}\n\n/* gcc's alignment is not what win32 expects */\n PACKED\n\nKEY_EVENT_RECORD;\n-}` became `{-\ntypedef struct _KEY_EVENT_RECORD {\n	BOOL bKeyDown;\n	WORD wRepeatCount;\n	WORD wVirtualKeyCode;\n	WORD wVirtualScanCode;\n	union {\n		WCHAR UnicodeChar;\n		CHAR AsciiChar;\n	} uChar;\n	DWORD dwControlKeyState;\n}\n\n\n/* gcc's alignment is not what win32 expects */\n PACKED\n\n\n\n\n\n\n\nKEY_EVENT_RECORD;\n-}`
+    --- input
+    +++ output
+    @@ -1,51 +1,62 @@
+     {-# LANGUAGE DeriveDataTypeable #-}
+    -{-# LANGUAGE RankNTypes         #-}
+    -{-# LANGUAGE Trustworthy        #-}
+    +{-# LANGUAGE RankNTypes #-}
+    +{-# LANGUAGE Trustworthy #-}
+     
+     module System.Console.ANSI.Windows.Foreign
+    -  (
+    -    INPUT_RECORD (..)
+    -  , INPUT_RECORD_EVENT (..)
+    -  , KEY_EVENT_RECORD (..)
+    -  , getNumberOfConsoleInputEvents
+    -  , readConsoleInput
+    -  , cWcharsToChars
+    -  , unicodeAsciiChar
+    -  , eNABLE_VIRTUAL_TERMINAL_PROCESSING
+    -  , iNVALID_HANDLE_VALUE
+    -  , nullHANDLE
+    -  , getConsoleMode
+    -  , setConsoleMode
+    -  ) where
+    +  ( INPUT_RECORD (..),
+    +    INPUT_RECORD_EVENT (..),
+    +    KEY_EVENT_RECORD (..),
+    +    getNumberOfConsoleInputEvents,
+    +    readConsoleInput,
+    +    cWcharsToChars,
+    +    unicodeAsciiChar,
+    +    eNABLE_VIRTUAL_TERMINAL_PROCESSING,
+    +    iNVALID_HANDLE_VALUE,
+    +    nullHANDLE,
+    +    getConsoleMode,
+    +    setConsoleMode,
+    +  )
+    +where
+     
+    -import Control.Exception ( Exception )
+    -import Data.Char ( chr )
+    -import Data.Typeable ( Typeable )
+    -import Data.Word ( Word32 )
+    -import Foreign.C.Types ( CWchar (..) )
+    -import Foreign.Marshal.Alloc ( alloca )
+    -import Foreign.Marshal.Array ( allocaArray, peekArray, pokeArray )
+    -import Foreign.Ptr ( Ptr, castPtr, plusPtr, nullPtr )
+    -import Foreign.Storable ( Storable (..) )
+    +import Control.Exception (Exception)
+    +import Data.Char (chr)
+    +
+
 dlist-1.0/Data/DList.hs
     a configuration of the input does not parse: 54:13: parse error on input `Nil'
     --- input
@@ -292,11 +346,8 @@
     -  -- ** Arithmetic Exception
 
 ==========================================================================
-does-not-parse (2)
+does-not-parse (1)
 ==========================================================================
-
-ansi-terminal-1.1.5/win/System/Console/ANSI/Windows/Win32/Types.hs
-    49:1: parse error on input `#'
 
 leksah-0.16.2.2/src/IDE/Find.hs
     615:36: Bang pattern in expression context: !matchIndex
diff --git a/corpora/vendored/declaration/data/record-braces-out.hs b/corpora/vendored/declaration/data/record-braces-out.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/data/record-braces-out.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE LinearTypes #-}
+
+newtype Sku = Sku{unSku :: Text}
+
+data Crate = Crate{crateSku :: Sku, crateCount :: Int}
+
+data Parcel
+  = Letter{letterWeight :: Int}
+  | Box{boxWeight :: !Int, boxFragile :: {-# UNPACK #-} !Bool}
+  | Pallet
+      { palletCrates :: [Crate],
+        palletWrapped :: Bool
+      }
+
+data Lease a = Lease{leased %1 :: a, leaseDays :: Int}
+
+data Shipment where
+  Shipment :: {shipmentParcels :: [Parcel]} -> Shipment
+
+data Manifest = Manifest
+  { manifestId :: Int,
+    manifestShipments :: [Shipment]
+  }
diff --git a/corpora/vendored/declaration/data/record-braces.hs b/corpora/vendored/declaration/data/record-braces.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/data/record-braces.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE LinearTypes #-}
+
+newtype Sku = Sku {unSku :: Text}
+
+data Crate = Crate{crateSku :: Sku, crateCount :: Int}
+
+data Parcel
+  = Letter {letterWeight :: Int}
+  | Box {boxWeight :: !Int, boxFragile :: {-# UNPACK #-} !Bool}
+  | Pallet
+      { palletCrates :: [Crate],
+        palletWrapped :: Bool
+      }
+
+data Lease a = Lease {leased %1 :: a, leaseDays :: Int}
+
+data Shipment where
+  Shipment :: {shipmentParcels :: [Parcel]} -> Shipment
+
+data Manifest = Manifest {
+  manifestId :: Int,
+  manifestShipments :: [Shipment] }
diff --git a/corpora/vendored/declaration/value/comment-on-record-wildcard-out.hs b/corpora/vendored/declaration/value/comment-on-record-wildcard-out.hs
--- a/corpora/vendored/declaration/value/comment-on-record-wildcard-out.hs
+++ b/corpora/vendored/declaration/value/comment-on-record-wildcard-out.hs
@@ -19,7 +19,7 @@
       .. -- so they need no mention
     }
 
-wildcardInAPattern Shape {..} = name -- bound by the wildcard
+wildcardInAPattern Shape{..} = name -- bound by the wildcard
 
 wildcardInAPatternWithFields
   Shape
diff --git a/corpora/vendored/declaration/value/empty-case-out.hs b/corpora/vendored/declaration/value/empty-case-out.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/empty-case-out.hs
@@ -0,0 +1,7 @@
+f x = case x of
+  {}
+
+g x =
+  case aScrutineeTooLongToKeepOnTheLineTheCaseOpensOn
+    anotherArgumentThatPushesItFurtherStillOverTheEdge of
+    {}
diff --git a/corpora/vendored/declaration/value/empty-case.hs b/corpora/vendored/declaration/value/empty-case.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/empty-case.hs
@@ -0,0 +1,6 @@
+f x = case x of
+  {}
+
+g x =
+  case aScrutineeTooLongToKeepOnTheLineTheCaseOpensOn
+    anotherArgumentThatPushesItFurtherStillOverTheEdge of {}
diff --git a/corpora/vendored/declaration/value/function/record-pattern-braces-out.hs b/corpora/vendored/declaration/value/function/record-pattern-braces-out.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/function/record-pattern-braces-out.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE RecordWildCards #-}
+
+weight Letter{letterWeight} = letterWeight
+weight Box{boxWeight = w, ..} = if boxFragile then w + 1 else w
+weight Pallet{} = 0
+
+isLetter = \case Letter{} -> True; _ -> False
+
+heavier = \cases Box{boxWeight = a} Box{boxWeight = b} -> a > b; _ _ -> False
+
+describe p@Pallet{palletCrates = Crate{crateCount} : _} = (p, crateCount)
+
+counted crate = case crate of
+  Crate{crateCount = 0} -> "empty"
+  Crate{..} -> show crateCount
+
+unwrap
+  Pallet
+    { palletCrates,
+      palletWrapped = True
+    } = palletCrates
diff --git a/corpora/vendored/declaration/value/function/record-pattern-braces.hs b/corpora/vendored/declaration/value/function/record-pattern-braces.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/function/record-pattern-braces.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE RecordWildCards #-}
+
+weight Letter {letterWeight} = letterWeight
+weight Box {boxWeight = w, ..} = if boxFragile then w + 1 else w
+weight Pallet {} = 0
+
+isLetter = \case Letter {} -> True; _ -> False
+
+heavier = \cases Box {boxWeight = a} Box {boxWeight = b} -> a > b; _ _ -> False
+
+describe p@Pallet {palletCrates = Crate {crateCount} : _} = (p, crateCount)
+
+counted crate = case crate of
+  Crate {crateCount = 0} -> "empty"
+  Crate {..} -> show crateCount
+
+unwrap Pallet {
+  palletCrates,
+  palletWrapped = True } = palletCrates
diff --git a/corpora/vendored/declaration/value/pattern-synonym-record-braces-out.hs b/corpora/vendored/declaration/value/pattern-synonym-record-braces-out.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/pattern-synonym-record-braces-out.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE ViewPatterns #-}
+
+pattern Pair{left, right} = (left, right)
+
+pattern Dozen{dozenSku} <- Crate dozenSku 12
+  where
+    Dozen s = Crate s 12
+
+pattern Named{named} <- (lookupName -> Just named)
+
+pattern Spanning
+  { spanFrom,
+    spanTo
+  } =
+  Range spanFrom spanTo
diff --git a/corpora/vendored/declaration/value/pattern-synonym-record-braces.hs b/corpora/vendored/declaration/value/pattern-synonym-record-braces.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/pattern-synonym-record-braces.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE ViewPatterns #-}
+
+pattern Pair {left, right} = (left, right)
+
+pattern Dozen {dozenSku} <- Crate dozenSku 12
+  where
+    Dozen s = Crate s 12
+
+pattern Named {named} <- (lookupName -> Just named)
+
+pattern Spanning {
+  spanFrom,
+  spanTo } = Range spanFrom spanTo
diff --git a/corpora/vendored/declaration/value/record-construction-braces-out.hs b/corpora/vendored/declaration/value/record-construction-braces-out.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/record-construction-braces-out.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE RecordWildCards #-}
+
+emptyCrate = Crate{crateSku = Sku "none", crateCount = 0}
+
+unknownCrate = Crate{}
+
+crateOf crateSku crateCount = Crate{crateSku, crateCount}
+
+crateHere = let crateSku = Sku "here"; crateCount = 1 in Crate{..}
+
+weighted = Scale{(<+>) = (+), unit = 0}
+
+qualified = Inventory.Crate{Inventory.crateCount = 2, ..}
+  where
+    crateSku = Sku "q"
+
+nested = Pallet{palletCrates = [Crate{crateSku = Sku "a", crateCount = 1}], palletWrapped = True}
+
+argument = ship Letter{letterWeight = 20} (Sku "b")
+
+tall =
+  Box
+    { boxWeight = 12,
+      boxFragile = False
+    }
diff --git a/corpora/vendored/declaration/value/record-construction-braces.hs b/corpora/vendored/declaration/value/record-construction-braces.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/record-construction-braces.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE RecordWildCards #-}
+
+emptyCrate = Crate {crateSku = Sku "none", crateCount = 0}
+
+unknownCrate = Crate {}
+
+crateOf crateSku crateCount = Crate {crateSku, crateCount}
+
+crateHere = let crateSku = Sku "here"; crateCount = 1 in Crate {..}
+
+weighted = Scale {(<+>) = (+), unit = 0}
+
+qualified = Inventory.Crate {Inventory.crateCount = 2, ..}
+  where
+    crateSku = Sku "q"
+
+nested = Pallet {palletCrates = [Crate {crateSku = Sku "a", crateCount = 1}], palletWrapped = True}
+
+argument = ship Letter {letterWeight = 20} (Sku "b")
+
+tall = Box {
+  boxWeight = 12,
+  boxFragile = False }
diff --git a/corpora/vendored/declaration/value/record-update-braces-out.hs b/corpora/vendored/declaration/value/record-update-braces-out.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/record-update-braces-out.hs
@@ -0,0 +1,22 @@
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedRecordUpdate #-}
+
+restock c = c{crateCount = crateCount c + 10}
+
+emptied = (restock emptyCrate){crateCount = 0}
+
+twice c = c{crateCount = 1}{crateSku = Sku "x"}
+
+relabel = map (\c -> c{crateSku = Sku "y"}) . filter ((> 0) . crateCount) -- keep the full ones
+
+clear c = c{}
+
+deep m = m{origin.city = "Lyon", origin.postcode}
+
+byOperator s = s{(<+>) = max}
+
+spread c =
+  c
+    { crateCount = 3,
+      crateSku = Sku "z"
+    }
diff --git a/corpora/vendored/declaration/value/record-update-braces.hs b/corpora/vendored/declaration/value/record-update-braces.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/record-update-braces.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedRecordUpdate #-}
+
+restock c = c {crateCount = crateCount c + 10}
+
+emptied = (restock emptyCrate) {crateCount = 0}
+
+twice c = c {crateCount = 1} {crateSku = Sku "x"}
+
+relabel = map (\c -> c {crateSku = Sku "y"}) . filter ((> 0) . crateCount) -- keep the full ones
+
+clear c = c {}
+
+deep m = m {origin.city = "Lyon", origin.postcode}
+
+byOperator s = s {(<+>) = max}
+
+spread c = c {
+  crateCount = 3,
+  crateSku = Sku "z" }
diff --git a/corpora/vendored/declaration/value/specialise-without-a-head-variable-out.hs b/corpora/vendored/declaration/value/specialise-without-a-head-variable-out.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/specialise-without-a-head-variable-out.hs
@@ -0,0 +1,4 @@
+f :: (Ord a) => a -> a
+f = f
+
+{-# SPECIALIZE let x = 2 in f x #-}
diff --git a/corpora/vendored/declaration/value/specialise-without-a-head-variable.hs b/corpora/vendored/declaration/value/specialise-without-a-head-variable.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/declaration/value/specialise-without-a-head-variable.hs
@@ -0,0 +1,4 @@
+f :: (Ord a) => a -> a
+f = f
+
+{-# SPECIALISE let x = 2 in f x #-}
diff --git a/corpora/vendored/other/multiline-string-trailing-space-out.hs b/corpora/vendored/other/multiline-string-trailing-space-out.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/other/multiline-string-trailing-space-out.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE MultilineStrings #-}
+
+script :: String
+script =
+  """
+  (function (x) { 
+    log(x); 
+  })
+  """
diff --git a/corpora/vendored/other/multiline-string-trailing-space.hs b/corpora/vendored/other/multiline-string-trailing-space.hs
new file mode 100644
--- /dev/null
+++ b/corpora/vendored/other/multiline-string-trailing-space.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE MultilineStrings #-}
+
+script :: String
+script =
+  """
+  (function (x) { 
+    log(x); 
+  })
+  """
diff --git a/src/Tilia/Cabal/Package.hs b/src/Tilia/Cabal/Package.hs
new file mode 100644
--- /dev/null
+++ b/src/Tilia/Cabal/Package.hs
@@ -0,0 +1,415 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+-- | Information coming from @.cabal@ files.
+module Tilia.Cabal.Package
+  ( PackageProblem (..),
+    describePackageProblem,
+    PackageReader,
+    newPackageReader,
+    ComponentSection (..),
+    BranchSections,
+    libraryBranches,
+    executableBranches,
+    suiteBranches,
+    benchmarkBranches,
+    addedSources,
+    sourceExtensions,
+    joined,
+    setupScript,
+  )
+where
+
+import Data.ByteString qualified as BS
+import Data.IORef
+import Data.List (isSuffixOf, sortOn)
+import Data.List.NonEmpty qualified as NE
+import Data.Map.Strict (Map)
+import Data.Map.Strict qualified as Map
+import Data.Ord (Down (..))
+import Data.Set (Set)
+import Data.Set qualified as Set
+import Data.Text (Text)
+import Data.Text qualified as T
+import Distribution.Fields.ParseResult (runParseResult)
+import Distribution.ModuleName qualified as ModuleName
+import Distribution.PackageDescription
+  ( Benchmark (..),
+    BenchmarkInterface (..),
+    BuildInfo (..),
+    CondBranch (..),
+    CondTree (..),
+    Executable (..),
+    GenericPackageDescription (..),
+    Library (..),
+    TestSuite (..),
+    TestSuiteInterface (..),
+  )
+import Distribution.PackageDescription.Parsec (parseGenericPackageDescription)
+import Distribution.Parsec (showPError)
+#if MIN_VERSION_Cabal_syntax(3, 14, 0)
+import Distribution.Utils.Path (SymbolicPathX, getSymbolicPath)
+#else
+import Distribution.Utils.Path (getSymbolicPath)
+#endif
+import GHC.Driver.Session qualified as GHC
+import GHC.LanguageExtensions.Type (Extension)
+import Language.Haskell.Extension qualified as Cabal
+import System.Directory (canonicalizePath, doesDirectoryExist, listDirectory)
+import System.FilePath
+  ( dropExtension,
+    equalFilePath,
+    joinPath,
+    normalise,
+    splitDirectories,
+    takeDirectory,
+    takeExtension,
+    (</>),
+  )
+import Tilia.Pragma (lookupExtension)
+import Tilia.Utils (attempted, quietly)
+
+-- | Why a file's extensions could not be settled.
+data PackageProblem
+  = -- | No @.cabal@ file at or above the module.
+    NoPackageFile
+  | -- | A @.cabal@ file that could not be read at all, and what went wrong.
+    PackageUnreadable FilePath Text
+  | -- | A @.cabal@ file that was read but did not parse, and everything the
+    -- parser had to say about it. One message per line, each already
+    -- carrying the position it refers to.
+    PackageMalformed FilePath [Text]
+  | -- | A @.cabal@ file naming no component whose @hs-source-dirs@ holds
+    -- the module.
+    FileUnclaimed FilePath
+  deriving (Eq, Show)
+
+-- | Say what went wrong, in one line.
+describePackageProblem :: PackageProblem -> Text
+describePackageProblem = \case
+  NoPackageFile -> "no .cabal file above it"
+  PackageUnreadable file why -> T.pack file <> " could not be read: " <> why
+  PackageMalformed file complaints ->
+    T.pack file <> " does not parse:" <> foldMap ("\n  " <>) complaints
+  FileUnclaimed file ->
+    T.pack file <> " names no component whose hs-source-dirs holds it"
+
+-- | What we retain from reading a .cabal file.
+type PackageReader = FilePath -> IO (Either PackageProblem [Extension])
+
+-- | A 'PackageReader' that remembers what it has already worked out.
+newPackageReader :: IO PackageReader
+newPackageReader = do
+  covering <- newIORef Map.empty
+  described <- newIORef Map.empty
+  pure $ \path -> quietly (Left NoPackageFile) $ do
+    file <- canonicalizePath path
+    from <- startingDirectory file
+    findCabalFile covering from >>= \case
+      Nothing -> pure (Left NoPackageFile)
+      Just cabalFile ->
+        componentsOf described cabalFile >>= \case
+          Left problem -> pure (Left problem)
+          Right components
+            | equalFilePath file (takeDirectory cabalFile </> setupScript) ->
+                pure (Right (extensionsInForce mempty))
+            | otherwise -> pure $ case claiming file components of
+                Just c -> Right (componentExtensions c)
+                Nothing -> Left (FileUnclaimed cabalFile)
+
+-- | Where to start looking for a @.cabal@ file.
+startingDirectory :: FilePath -> IO FilePath
+startingDirectory path = do
+  isDirectory <- quietly False (doesDirectoryExist path)
+  pure (if isDirectory then path else takeDirectory path)
+
+-- | One branch of a component, with everything in force in it already
+-- worked out.
+data ComponentBranch = ComponentBranch
+  { -- | Its source directories, absolute and canonical.
+    componentDirs :: [FilePath],
+    -- | The modules this branch names, each as a path without an
+    -- extension relative to whichever of its source directories holds it.
+    componentModules :: Set FilePath,
+    -- | Its entry points, relative to its source directories in the same
+    -- way but with their extensions.
+    componentEntries :: Set FilePath,
+    -- | The extensions it puts in force.
+    componentExtensions :: [Extension]
+  }
+
+-- | Which branch holds the file, of those whose directories cover it.
+claiming :: FilePath -> [ComponentBranch] -> Maybe ComponentBranch
+claiming file components =
+  case sortOn (Down . fst) [((named c, nearness c), c) | c <- components, covered c] of
+    ((_, c) : _) -> Just c
+    [] -> Nothing
+  where
+    covered = not . null . covering
+    named c = any (declares c) (covering c)
+    declares c d =
+      let path = under d
+       in Set.member path (componentEntries c)
+            || ( takeExtension path `elem` sourceExtensions
+                   && Set.member (dropExtension path) (componentModules c)
+               )
+    under d = joinPath (drop (length (splitDirectories d)) (splitDirectories file))
+    nearness = maximum . fmap length . covering
+    covering c = [d | d <- componentDirs c, d `covers` file]
+
+-- | Whether a file is somewhere under a directory.
+covers :: FilePath -> FilePath -> Bool
+covers directory file = go (splitDirectories directory) (splitDirectories file)
+  where
+    go [] (_ : _) = True
+    go (d : ds) (f : fs) = equalFilePath d f && go ds fs
+    go _ _ = False
+
+-- | The nearest @.cabal@ file at or above a directory.
+findCabalFile ::
+  -- | What is known already, by directory: the file covering it, or
+  -- 'Nothing' for one with no @.cabal@ anywhere above it. Read before the
+  -- walk and added to after it, for every directory the walk passed through
+  -- rather than only the one asked about—none of the others held a @.cabal@
+  -- either, which is why the walk went through them, so the answer is
+  -- theirs as well.
+  IORef (Map FilePath (Maybe FilePath)) ->
+  -- | Where to start, which is walked upwards until a @.cabal@ file turns
+  -- up or the filesystem root is reached.
+  FilePath ->
+  IO (Maybe FilePath)
+findCabalFile ref = climb []
+  where
+    climb passed directory = do
+      known <- readIORef ref
+      case Map.lookup directory known of
+        Just answer -> settle passed answer
+        Nothing -> do
+          entries <- quietly [] (listDirectory directory)
+          case filter (".cabal" `isSuffixOf`) entries of
+            (named : _) -> settle (directory : passed) (Just (directory </> named))
+            [] ->
+              let parent = takeDirectory directory
+               in if parent == directory
+                    then settle (directory : passed) Nothing
+                    else climb (directory : passed) parent
+    settle passed answer = do
+      modifyIORef' ref (\m -> foldl' (\acc d -> Map.insert d answer acc) m passed)
+      pure answer
+
+-- | What a @.cabal@ file amounts to.
+componentsOf ::
+  IORef (Map FilePath (Either PackageProblem [ComponentBranch])) ->
+  FilePath ->
+  IO (Either PackageProblem [ComponentBranch])
+componentsOf ref cabalFile = do
+  known <- readIORef ref
+  case Map.lookup cabalFile known of
+    Just answer -> pure answer
+    Nothing -> do
+      answer <- settle
+      modifyIORef' ref (Map.insert cabalFile answer)
+      pure answer
+  where
+    settle =
+      attempted (BS.readFile cabalFile) >>= \case
+        Left why -> pure (Left (PackageUnreadable cabalFile why))
+        Right bytes ->
+          case snd (runParseResult (parseGenericPackageDescription bytes)) of
+            Left (_, complaints) ->
+              pure (Left (PackageMalformed cabalFile (fmap said (NE.toList complaints))))
+            Right description ->
+              Right
+                <$> traverse
+                  (componentBranch (takeDirectory cabalFile))
+                  (sectionsInForce description)
+    said = T.pack . showPError cabalFile
+
+-- | One branch, with its directories resolved and its extensions settled.
+componentBranch :: FilePath -> ComponentSection -> IO ComponentBranch
+componentBranch root ComponentSection{..} = do
+  dirs <- traverse (quietlyCanonical . (root </>)) (sourceDirsOf sectionInfo)
+  pure
+    ComponentBranch
+      { componentDirs = concat dirs,
+        componentModules = Set.fromList (fmap (uncurry joined) sectionModules),
+        componentEntries = Set.fromList (fmap (uncurry joined) sectionEntries),
+        componentExtensions = extensionsInForce sectionInfo
+      }
+  where
+    quietlyCanonical d =
+      quietly [] $
+        doesDirectoryExist d >>= \case
+          True -> pure <$> canonicalizePath d
+          False -> pure []
+
+-- | What is in force in each branch of every component, in the order they
+-- are declared.
+sectionsInForce :: GenericPackageDescription -> [ComponentSection]
+sectionsInForce described =
+  (\BranchSections{..} -> inheritedSection <> ownSection)
+    <$> concat
+      [ foldMap libraryBranches (condLibrary described),
+        concatMap (libraryBranches . snd) (condSubLibraries described),
+        concatMap (executableBranches . snd) (condExecutables described),
+        concatMap (suiteBranches . snd) (condTestSuites described),
+        concatMap (benchmarkBranches . snd) (condBenchmarks described)
+      ]
+
+-- | What one branch of a component declares.
+data ComponentSection = ComponentSection
+  { -- | Its build settings.
+    sectionInfo :: BuildInfo,
+    -- | Its modules, each as the directory that holds it relative to a
+    -- source directory and its file name without an extension.
+    sectionModules :: [(FilePath, FilePath)],
+    -- | Its entry points, each as the directory that holds it relative to a
+    -- source directory and its file name.
+    sectionEntries :: [(FilePath, FilePath)]
+  }
+
+instance Semigroup ComponentSection where
+  ComponentSection i m e <> ComponentSection i' m' e' =
+    ComponentSection (i <> i') (m <> m') (e <> e')
+
+instance Monoid ComponentSection where
+  mempty = ComponentSection mempty [] []
+
+-- | The sections of one branch of a component.
+data BranchSections = BranchSections
+  { -- | What it inherits from the branches around it.
+    inheritedSection :: ComponentSection,
+    -- | What it declares itself.
+    ownSection :: ComponentSection
+  }
+
+-- | Every branch of a library.
+libraryBranches :: CondTree v c Library -> [BranchSections]
+libraryBranches = branchesOf $ \l ->
+  declaring (libBuildInfo l) (exposedModules l <> signatures l) []
+
+-- | Every branch of an executable.
+executableBranches :: CondTree v c Executable -> [BranchSections]
+executableBranches = branchesOf $ \e ->
+  declaring (buildInfo e) [] [entryPoint (modulePath e)]
+
+-- | Every branch of a test suite.
+suiteBranches :: CondTree v c TestSuite -> [BranchSections]
+suiteBranches = branchesOf $ \s ->
+  case testInterface s of
+    TestSuiteExeV10 _ path -> declaring (testBuildInfo s) [] [entryPoint path]
+    TestSuiteLibV09 _ modName -> declaring (testBuildInfo s) [modName] []
+    _ -> declaring (testBuildInfo s) [] []
+
+-- | Every branch of a benchmark.
+benchmarkBranches :: CondTree v c Benchmark -> [BranchSections]
+benchmarkBranches = branchesOf $ \b ->
+  case benchmarkInterface b of
+    BenchmarkExeV10 _ path -> declaring (benchmarkBuildInfo b) [] [entryPoint path]
+    _ -> declaring (benchmarkBuildInfo b) [] []
+
+-- | Every branch of a component.
+branchesOf :: (a -> ComponentSection) -> CondTree v c a -> [BranchSections]
+branchesOf f = go mempty
+  where
+    go inherited node =
+      let own = f (condTreeData node)
+       in BranchSections inherited own
+            : concatMap (branches (inherited <> own)) (condTreeComponents node)
+    branches inherited (CondBranch _ yes no) =
+      go inherited yes <> foldMap (go inherited) no
+
+-- | Where the files a branch adds to its component may be: each source
+-- directory, with what it may hold.
+--
+-- Only what the branches around it have not already paired, which is its
+-- own declarations in every directory in force and what it inherits in the
+-- directories it adds. A pair made for one branch is thus never made again
+-- for the branches inside it.
+addedSources :: BranchSections -> [(FilePath, ComponentSection)]
+addedSources BranchSections{..} =
+  [ (d, ownSection)
+  | d <- sourceDirsOf (sectionInfo inheritedSection <> sectionInfo ownSection)
+  ]
+    <> [ (d, inheritedSection)
+       | d <- fmap getSymbolicPath (hsSourceDirs (sectionInfo ownSection))
+       ]
+
+-- | What a component's own section declares, modules together with the
+-- ones its build settings name.
+declaring ::
+  BuildInfo ->
+  [ModuleName.ModuleName] ->
+  [FilePath] ->
+  ComponentSection
+declaring bi ms entries =
+  ComponentSection
+    { sectionInfo = bi,
+      sectionModules = fmap split (ms <> otherModules bi),
+      sectionEntries = fmap splitPath entries
+    }
+  where
+    split m = case ModuleName.components m of
+      [] -> ("", "")
+      cs -> (joinPath (init cs), last cs)
+    splitPath path = case splitDirectories path of
+      [] -> ("", "")
+      ps -> (joinPath (init ps), last ps)
+
+-- | The extensions a Haskell source file can have.
+sourceExtensions :: [String]
+sourceExtensions = [".hs", ".hs-boot", ".hsig"]
+
+-- | Two relative paths one after the other, where either may be empty or
+-- @.@.
+joined :: FilePath -> FilePath -> FilePath
+joined a b
+  | a `elem` ["", "."] = b
+  | b `elem` ["", "."] = a
+  | otherwise = a </> b
+
+-- | The path of an entry point.
+--
+-- Cabal 3.14 made a component's entry point a symbolic path; before that
+-- it was already the plain path we want.
+#if MIN_VERSION_Cabal_syntax(3, 14, 0)
+entryPoint :: SymbolicPathX allowAbsolute from to -> FilePath
+entryPoint = normalise . getSymbolicPath
+#else
+entryPoint :: FilePath -> FilePath
+entryPoint = normalise
+#endif
+
+-- | The setup script of a package, beside its @.cabal@ file.
+--
+-- @cabal@ compiles it with no language or extensions of its own, whatever
+-- the components around it put in force.
+setupScript :: FilePath
+setupScript = "Setup.hs"
+
+-- | The @hs-source-dirs@ of a component, @.@ where it names none.
+sourceDirsOf :: BuildInfo -> [FilePath]
+sourceDirsOf bi = case fmap getSymbolicPath (hsSourceDirs bi) of
+  [] -> ["."]
+  ds -> ds
+
+-- | The extensions a component puts in force, before any module's pragmas.
+extensionsInForce :: BuildInfo -> [Extension]
+extensionsInForce bi =
+  foldl apply (GHC.languageExtensions edition) (defaultExtensions bi)
+  where
+    edition = ghcLanguage =<< defaultLanguage bi
+    apply acc = \case
+      Cabal.EnableExtension e
+        | Just on <- named e, on `notElem` acc -> acc <> [on]
+      Cabal.DisableExtension e
+        | Just off <- named e -> filter (/= off) acc
+      _ -> acc
+    named = lookupExtension . T.pack . show
+
+-- | GHC's name for a language edition, when it has one.
+ghcLanguage :: Cabal.Language -> Maybe GHC.Language
+ghcLanguage l = lookup (show l) [(show e, e) | e <- [minBound .. maxBound]]
diff --git a/src/Tilia/Cabal/Project.hs b/src/Tilia/Cabal/Project.hs
new file mode 100644
--- /dev/null
+++ b/src/Tilia/Cabal/Project.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Finding the project a file belongs to.
+module Tilia.Cabal.Project
+  ( ProjectRoot (..),
+    Marker (..),
+    markerFile,
+    findProjectRoot,
+  )
+where
+
+import Data.List (isSuffixOf)
+import Data.Maybe (listToMaybe)
+import System.Directory
+  ( canonicalizePath,
+    doesDirectoryExist,
+    listDirectory,
+  )
+import System.FilePath (takeDirectory)
+import Tilia.Utils (quietly)
+
+-- | A project, and what marked it out.
+data ProjectRoot = ProjectRoot
+  { -- | The directory.
+    prPath :: FilePath,
+    -- | What identified it.
+    prMarker :: Marker
+  }
+  deriving (Eq, Show)
+
+-- | What a project was recognised by.
+data Marker
+  = -- | A @cabal.project@, which names the packages.
+    ProjectFile
+  | -- | A @.cabal@ file, by its name: a package with no project around it.
+    PackageFile FilePath
+  deriving (Eq, Show)
+
+-- | The file a marker stands for, for reporting.
+markerFile :: Marker -> FilePath
+markerFile = \case
+  ProjectFile -> "cabal.project"
+  PackageFile named -> named
+
+-- | Walk upwards from a file or directory looking for a project.
+findProjectRoot :: FilePath -> IO (Maybe ProjectRoot)
+findProjectRoot start = quietly Nothing $ do
+  from <- startingDirectory
+  found <- traverse markersIn (from : ancestorsOf from)
+  pure (listToMaybe (concatMap fst found <> concatMap snd found))
+  where
+    startingDirectory = do
+      absolute <- canonicalizePath start
+      isDirectory <- doesDirectoryExist absolute
+      pure (if isDirectory then absolute else takeDirectory absolute)
+
+    ancestorsOf directory =
+      let parent = takeDirectory directory
+       in if parent == directory then [] else parent : ancestorsOf parent
+
+    markersIn directory = quietly ([], []) $ do
+      entries <- listDirectory directory
+      pure
+        ( [ProjectRoot directory ProjectFile | "cabal.project" `elem` entries],
+          [ ProjectRoot directory (PackageFile named)
+          | named <- take 1 (filter (".cabal" `isSuffixOf`) entries)
+          ]
+        )
diff --git a/src/Tilia/Cabal/Target.hs b/src/Tilia/Cabal/Target.hs
new file mode 100644
--- /dev/null
+++ b/src/Tilia/Cabal/Target.hs
@@ -0,0 +1,441 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- | Handling Cabal targets in order to figure out what to format.
+module Tilia.Cabal.Target
+  ( Target (..),
+    Kind (..),
+    parseTarget,
+    Component (..),
+    Wanted (..),
+    TargetProblem (..),
+    describeTargetProblem,
+    componentsOfTarget,
+    componentInPlan,
+    filesOfComponents,
+  )
+where
+
+import Control.Monad (filterM)
+import Data.ByteString qualified as BS
+import Data.ByteString.Char8 qualified as BS8
+import Data.Char (toLower)
+import Data.List (isPrefixOf, isSuffixOf, sort)
+import Data.List.NonEmpty qualified as NE
+import Data.Map.Strict (Map)
+import Data.Map.Strict qualified as Map
+import Data.Set (Set)
+import Data.Set qualified as Set
+import Data.Text (Text)
+import Data.Text qualified as T
+import Data.Text.Encoding qualified as T
+import Data.Text.IO qualified as T
+import Distribution.Fields.Field (Field (..), FieldLine (..), Name (..))
+import Distribution.Fields.ParseResult (runParseResult)
+import Distribution.Fields.Parser (readFields)
+import Distribution.PackageDescription
+  ( GenericPackageDescription (..),
+    PackageDescription (..),
+    unPackageName,
+    unUnqualComponentName,
+  )
+import Distribution.PackageDescription.Parsec (parseGenericPackageDescription)
+import Distribution.Parsec (showPError)
+import Distribution.Types.PackageId (PackageIdentifier (..))
+import System.Directory (doesFileExist, listDirectory)
+import System.FilePath
+  ( dropExtension,
+    dropTrailingPathSeparator,
+    normalise,
+    splitDirectories,
+    takeDirectory,
+    takeExtension,
+    (</>),
+  )
+import Tilia.Cabal.Package
+  ( ComponentSection (..),
+    addedSources,
+    benchmarkBranches,
+    executableBranches,
+    joined,
+    libraryBranches,
+    setupScript,
+    sourceExtensions,
+    suiteBranches,
+  )
+import Tilia.Cabal.Project (Marker (..), ProjectRoot (..), markerFile)
+import Tilia.Fixity.Plan (PlanComponent (..))
+import Tilia.Utils (attempted, quietly)
+
+-- | Which components a run was asked for.
+data Target
+  = -- | @all@, or nothing given at all: every component of every package.
+    Everything
+  | -- | One bare word, which may name a package or a component.
+    Called Text
+  | -- | @kind:name@, or @package:kind:name@.
+    Qualified (Maybe Text) Kind Text
+  deriving (Eq, Show)
+
+-- | The kinds of component a @.cabal@ file can declare, and the setup
+-- script beside it.
+data Kind = Lib | Exe | Test | Bench | Setup
+  deriving (Eq, Ord, Show)
+
+-- | Read a target as it was written on the command line.
+parseTarget :: String -> Either Text Target
+parseTarget written = case T.splitOn ":" (T.strip (T.pack written)) of
+  [""] -> Left "an empty target"
+  ["all"] -> Right Everything
+  [one] -> Right (Called one)
+  [k, name] | Just kind <- kindNamed k -> Right (Qualified Nothing kind name)
+  [package, k, name] | Just kind <- kindNamed k -> Right (Qualified (Just package) kind name)
+  _ -> Left unrecognised
+  where
+    unrecognised =
+      "unrecognised target "
+        <> T.pack (show written)
+        <> ": expected all, a package or component name, or one of\
+           \ lib:, exe:, test:, bench: followed by a name"
+    kindNamed = \case
+      "lib" -> Just Lib
+      "exe" -> Just Exe
+      "test" -> Just Test
+      "bench" -> Just Bench
+      "benchmark" -> Just Bench
+      _ -> Nothing
+
+-- | Does a target ask for this component?
+targetSelectsComponent :: Target -> Component -> Bool
+targetSelectsComponent target c = case target of
+  Everything -> True
+  Called name
+    | Setup <- componentKind c -> name == componentPackage c
+    | otherwise -> name == componentName c || name == componentPackage c
+  Qualified package kind name ->
+    all (== componentPackage c) package
+      && kind == componentKind c
+      && name == componentName c
+
+-- | One component of one package, as far as formatting cares.
+data Component = Component
+  { -- | The package it belongs to.
+    componentPackage :: Text,
+    -- | Which kind it is.
+    componentKind :: Kind,
+    -- | Its name, which for a library is the package's own.
+    componentName :: Text,
+    -- | The directory its @.cabal@ file sits in.
+    componentRoot :: FilePath,
+    -- | The directories its declared files may be in, relative to
+    -- 'componentRoot', across all of its conditional branches.
+    componentSources :: Map FilePath Wanted
+  }
+  deriving (Eq, Show)
+
+-- | What may be in one directory.
+data Wanted = Wanted
+  { -- | Modules, by file name without an extension.
+    wantedModules :: Set FilePath,
+    -- | Entry points, by file name.
+    wantedEntries :: Set FilePath
+  }
+  deriving (Eq, Show)
+
+instance Semigroup Wanted where
+  Wanted m e <> Wanted m' e' = Wanted (m <> m') (e <> e')
+
+-- | Is a directory entry one of the files wanted there?
+admits :: Wanted -> FilePath -> Bool
+admits Wanted{..} entry =
+  takeExtension entry `elem` sourceExtensions
+    && ( Set.member entry wantedEntries
+           || Set.member (dropExtension entry) wantedModules
+       )
+
+-- | Why a run could not work out what to format.
+data TargetProblem
+  = -- | A @cabal.project@ naming packages, none of which could be found.
+    NoPackages FilePath
+  | -- | A @.cabal@ file that would not parse, and what the parser said.
+    Unparseable FilePath [Text]
+  | -- | A target naming no component the project holds.
+    NoSuchTarget Text [Text]
+  deriving (Eq, Show)
+
+-- | Say what went wrong.
+describeTargetProblem :: TargetProblem -> Text
+describeTargetProblem = \case
+  NoPackages file ->
+    T.pack file <> " names no packages that exist"
+  Unparseable file complaints ->
+    T.pack file <> " does not parse:" <> foldMap ("\n  " <>) complaints
+  NoSuchTarget asked available ->
+    "no component matches "
+      <> asked
+      <> ", and the targets this project takes are"
+      <> foldMap ("\n  " <>) ("all" : available)
+
+-- | Every component of the project that the target asks for.
+componentsOfTarget ::
+  ProjectRoot ->
+  Target ->
+  IO (Either TargetProblem [Component])
+componentsOfTarget root target = do
+  files <- packageFilesOf root
+  if null files
+    then pure (Left (NoPackages (prPath root </> markerFile (prMarker root))))
+    else
+      traverse componentsInCabalFile files >>= \case
+        results
+          | (problem : _) <- [p | Left p <- results] -> pure (Left problem)
+          | otherwise -> do
+              let found = concat [cs | Right cs <- results]
+              pure $ case filter (targetSelectsComponent target) found of
+                [] | Everything <- target -> Right []
+                [] -> Left (NoSuchTarget (spellTarget target) (spellComponent <$> filter targetable found))
+                wanted -> Right wanted
+
+-- | Can a component be asked for on its own?
+targetable :: Component -> Bool
+targetable c = componentKind c /= Setup
+
+-- | How a component would have to be named to be asked for on its own.
+spellComponent :: Component -> Text
+spellComponent c =
+  componentPackage c
+    <> ":"
+    <> spellKind (componentKind c)
+    <> ":"
+    <> componentName c
+
+-- | How a build plan names this component, if it has an entry of its own.
+--
+-- A plan writes a library as @lib@ and everything else as its kind and
+-- name, which is not quite how a target is written: see 'spellComponent'.
+-- A setup script has an entry only when the build type is @Custom@, so a
+-- plan is never expected to say anything about it.
+componentInPlan :: Component -> Maybe PlanComponent
+componentInPlan c = case componentKind c of
+  Setup -> Nothing
+  kind ->
+    Just
+      PlanComponent
+        { pcPackage = componentPackage c,
+          pcName = case kind of
+            Lib -> "lib"
+            _ -> spellKind kind <> ":" <> componentName c
+        }
+
+-- | Render 'Kind' the way it would be accepted on the command line.
+spellKind :: Kind -> Text
+spellKind = \case
+  Lib -> "lib"
+  Exe -> "exe"
+  Test -> "test"
+  Bench -> "bench"
+  Setup -> "setup"
+
+-- | A target, written the way it would have been given.
+spellTarget :: Target -> Text
+spellTarget = \case
+  Everything -> "all"
+  Called name -> name
+  Qualified package kind name ->
+    T.intercalate ":" (foldMap pure package <> [spellKind kind, name])
+
+-- | Every Haskell file a set of components holds, each named once, less
+-- the ones the project's @.tiliaignore@ excludes.
+filesOfComponents :: ProjectRoot -> [Component] -> IO [FilePath]
+filesOfComponents root components = do
+  ignored <- ignoredPaths (prPath root)
+  let excluded path = any (`isPrefixOf` splitDirectories path) ignored
+  sort . filter (not . excluded) . concat
+    <$> traverse present (Map.toList directories)
+  where
+    directories =
+      Map.unionsWith
+        (<>)
+        [ Map.mapKeys (joined (directoryOf (componentRoot c))) (componentSources c)
+        | c <- components
+        ]
+    present (directory, wanted) = do
+      entries <- quietly [] (listDirectory directory)
+      filterM
+        (quietly False . doesFileExist)
+        [joined directory entry | entry <- entries, admits wanted entry]
+
+-- | What a project's @.tiliaignore@ excludes, each path as its segments.
+--
+-- An entry is a literal file or directory path relative to the project
+-- root, and a directory stands for everything below it. Blank lines and
+-- lines beginning with @#@ are ignored.
+ignoredPaths :: FilePath -> IO [[FilePath]]
+ignoredPaths root = do
+  exists <- doesFileExist file
+  if exists
+    then fmap entryPath . filter meant . fmap T.strip . T.lines <$> T.readFile file
+    else pure []
+  where
+    file = root </> ".tiliaignore"
+    meant entry = not (T.null entry) && not ("#" `T.isPrefixOf` entry)
+    entryPath = splitDirectories . normalise . (root </>) . T.unpack
+
+-- | A directory spelled so that a path can be appended to it without
+-- further normalisation.
+directoryOf :: FilePath -> FilePath
+directoryOf = dropTrailingPathSeparator . normalise
+
+-- | The @.cabal@ files the project is made of.
+--
+-- A @cabal.project@ names them, possibly through globs; anything else means
+-- the marker found by the walk upwards is itself the only package.
+packageFilesOf :: ProjectRoot -> IO [FilePath]
+packageFilesOf root = case prMarker root of
+  PackageFile named -> pure [prPath root </> named]
+  ProjectFile -> do
+    contents <-
+      quietly BS.empty (BS.readFile (prPath root </> "cabal.project"))
+    found <-
+      traverse
+        (packageToCabalFile (prPath root))
+        (packagesInCabalProjectContents contents)
+    pure (Set.toList (Set.fromList (concat found)))
+
+-- | The entries of a @cabal.project@'s @packages@ field.
+packagesInCabalProjectContents :: BS.ByteString -> [Text]
+packagesInCabalProjectContents contents = case readFields contents of
+  Left _ -> []
+  Right fields -> concatMap entries (packagesIn fields)
+  where
+    packagesIn = concatMap $ \case
+      Field (Name _ name) ls
+        | BS8.map toLower name `elem` ["packages", "optional-packages"] ->
+            [T.unwords [T.decodeUtf8Lenient value | FieldLine _ value <- ls]]
+        | otherwise -> []
+      Section _ _ inner -> packagesIn inner
+    entries =
+      filter (not . T.null)
+        . fmap T.strip
+        . concatMap (T.split (== ','))
+        . T.words
+
+-- | Turn one entry of a @packages@ field into the @.cabal@ files it names.
+packageToCabalFile :: FilePath -> Text -> IO [FilePath]
+packageToCabalFile root entry = do
+  paths <-
+    packageGlobToCabalFiles
+      root
+      (fmap T.unpack (T.split (== '/') (T.dropWhile (== '.') stripped)))
+  concat <$> traverse asPackage paths
+  where
+    stripped = T.dropWhile (== '/') (T.strip entry)
+    asPackage path
+      | ".cabal" `isSuffixOf` path = do
+          there <- quietly False (doesFileExist path)
+          pure [path | there]
+      | otherwise = cabalFilesIn path
+
+-- | Resolve a path whose components may contain @*@.
+packageGlobToCabalFiles :: FilePath -> [String] -> IO [FilePath]
+packageGlobToCabalFiles here = \case
+  [] -> pure [here]
+  ("" : rest) -> packageGlobToCabalFiles here rest
+  ("." : rest) -> packageGlobToCabalFiles here rest
+  (component : rest)
+    | '*' `elem` component -> do
+        entries <- quietly [] (listDirectory here)
+        concat
+          <$> traverse
+            (\e -> packageGlobToCabalFiles (here </> e) rest)
+            (sort (filter (globMatching component) entries))
+    | otherwise -> packageGlobToCabalFiles (here </> component) rest
+
+-- | Does a name match a pattern with @*@ in it?
+globMatching :: String -> String -> Bool
+globMatching pattern name = case break (== '*') pattern of
+  (before, []) -> before == name
+  (before, _ : after) ->
+    before `isPrefixOf` name
+      && after `isSuffixOf` drop (length before) name
+
+-- | The @.cabal@ files sitting directly in a directory.
+cabalFilesIn :: FilePath -> IO [FilePath]
+cabalFilesIn directory = quietly [] $ do
+  entries <- listDirectory directory
+  let named = sort (filter (".cabal" `isSuffixOf`) entries)
+  filterM doesFileExist (fmap (directory </>) named)
+
+-- | Every component one @.cabal@ file declares.
+componentsInCabalFile :: FilePath -> IO (Either TargetProblem [Component])
+componentsInCabalFile cabalFile =
+  attempted (BS.readFile cabalFile) >>= \case
+    Left why -> pure (Left (Unparseable cabalFile [why]))
+    Right bytes ->
+      case snd (runParseResult (parseGenericPackageDescription bytes)) of
+        Left (_, complaints) ->
+          pure (Left (Unparseable cabalFile (fmap said (NE.toList complaints))))
+          where
+            said = T.pack . showPError cabalFile
+        Right described -> do
+          let root = takeDirectory cabalFile
+              declared = declaredComponents root described
+          hasSetup <- quietly False (doesFileExist (root </> setupScript))
+          pure . Right $
+            declared
+              <> [ Component
+                     { componentPackage = packageOf described,
+                       componentKind = Setup,
+                       componentName = "setup",
+                       componentRoot = root,
+                       componentSources =
+                         Map.singleton "." (Wanted Set.empty (Set.singleton setupScript))
+                     }
+                 | hasSetup
+                 ]
+
+-- | The name of a package.
+packageOf :: GenericPackageDescription -> Text
+packageOf =
+  T.pack . unPackageName . pkgName . Distribution.PackageDescription.package . packageDescription
+
+-- | The directories a branch's declarations may be found in under one
+-- source directory.
+sourcesIn :: FilePath -> ComponentSection -> Map FilePath Wanted
+sourcesIn d ComponentSection{..} =
+  Map.fromListWith
+    (<>)
+    ( [(joined d sub, Wanted (Set.singleton name) Set.empty) | (sub, name) <- sectionModules]
+        <> [(joined d sub, Wanted Set.empty (Set.singleton name)) | (sub, name) <- sectionEntries]
+    )
+
+-- | The components of a parsed @.cabal@ file, in the order declared.
+declaredComponents :: FilePath -> GenericPackageDescription -> [Component]
+declaredComponents root described =
+  concat
+    [ foldMap
+        (pure . made Lib package . libraryBranches)
+        (condLibrary described),
+      [made Lib (nameOf n) (libraryBranches t) | (n, t) <- condSubLibraries described],
+      [made Exe (nameOf n) (executableBranches t) | (n, t) <- condExecutables described],
+      [made Test (nameOf n) (suiteBranches t) | (n, t) <- condTestSuites described],
+      [made Bench (nameOf n) (benchmarkBranches t) | (n, t) <- condBenchmarks described]
+    ]
+  where
+    package = packageOf described
+    nameOf = T.pack . unUnqualComponentName
+    made kind name branches =
+      Component
+        { componentPackage = package,
+          componentKind = kind,
+          componentName = name,
+          componentRoot = root,
+          componentSources =
+            Map.unionsWith
+              (<>)
+              [ sourcesIn (directoryOf d) declared
+              | branch <- branches,
+                (d, declared) <- addedSources branch
+              ]
+        }
diff --git a/src/Tilia/Comments.hs b/src/Tilia/Comments.hs
--- a/src/Tilia/Comments.hs
+++ b/src/Tilia/Comments.hs
@@ -17,8 +17,6 @@
     triggerEscaped,
     opensHaddock,
     commentsWithin,
-
-    -- * Pragmas
     Pragma (..),
     commentPragma,
   )
@@ -50,9 +48,6 @@
     -- | How it was written.
     commentStyle :: CommentStyle,
     -- | What was on the line above it.
-    --
-    -- What a comment lines up with is how its author said what it is about,
-    -- and the line above is the only thing it can line up with.
     commentAbove :: Above,
     -- | Where the code before it on its opening line stops: the column one
     -- past the last character of that code, or 'Nothing' when the comment
@@ -81,7 +76,7 @@
 
 -- | What was on the line above a comment.
 data Above
-  = -- | Nothing was: the comment begins on the first line of the file.
+  = -- | The comment begins on the first line of the file.
     TopOfFile
   | -- | An empty line.
     BlankLine
@@ -91,18 +86,15 @@
 
 -- | Every comment in a module, in source order.
 commentsOf ::
-  -- | The module's lines, which every comment is read against
+  -- | The module's lines, which every comment is read against.
   Lines ->
-  -- | Comments the tree does not carry
-  --
-  -- Everything above a signature's @signature@ keyword: the parser leaves
-  -- those in its own state rather than in an annotation.
+  -- | Comments the tree does not carry.
   [GHC.LEpaComment] ->
-  -- | Parsed module
+  -- | Parsed module.
   HsModule GhcPs ->
   [Comment]
 commentsOf ls loose hsModule =
-  map (uncurry (mkComment ls))
+  fmap (uncurry (mkComment ls))
     . dedupeOnSpan
     . sortOn (GHC.realSrcSpanStart . fst)
     . mapMaybe located
@@ -140,17 +132,11 @@
       GHC.EpaBlockComment s -> (BlockComment, T.pack s)
       GHC.EpaDocComment _ -> (DocComment, sliceSpan (lineTexts ls) spn)
       GHC.EpaDocOptions s -> (LineComment, T.pack s)
-
-    -- The lines the answers are read off, and where on the opening one the
-    -- comment starts. Indentation is how many characters precede, which is
-    -- not the column: see 'offsetOf'.
     startColumn = maybe 0 (`offsetOf` GHC.srcSpanStartCol spn) openingLine
     openingLine = lineAt (GHC.srcSpanStartLine spn) ls
     lineAbove
       | GHC.srcSpanStartLine spn <= 1 = Nothing
       | otherwise = lineAt (GHC.srcSpanStartLine spn - 1) ls
-
-    -- The rest in the order the fields are declared in.
     above = case lineAbove of
       Nothing -> TopOfFile
       Just l
@@ -172,7 +158,7 @@
   case NE.nonEmpty (T.lines raw) of
     Nothing -> spaceAfterDashes style raw :| []
     Just (first' :| rest) ->
-      fmap T.stripEnd (spaceAfterDashes style first' :| map dedent rest)
+      fmap T.stripEnd (spaceAfterDashes style first' :| fmap dedent rest)
   where
     dedent l = T.drop (min startColumn (T.length (T.takeWhile isSpace l))) l
 
@@ -201,7 +187,6 @@
       (if n == startLine then T.drop (offsetOf l startCol) else id)
         . (if n == endLine then T.take (offsetOf l endCol) else id)
         $ l
-
     startLine = GHC.srcSpanStartLine spn
     endLine = GHC.srcSpanEndLine spn
     startCol = GHC.srcSpanStartCol spn
@@ -240,7 +225,7 @@
     Just (upToTrigger, body) <- splitTrigger headLine,
     not (T.null body),
     not (" " `T.isPrefixOf` body) =
-      c {commentBody = (upToTrigger <> " " <> body) :| map shiftOne rest}
+      c{commentBody = (upToTrigger <> " " <> body) :| fmap shiftOne rest}
   | otherwise = c
   where
     shiftOne l = case openerWidth l of
@@ -266,7 +251,6 @@
     ordinaryStyle
       | "{-" `T.isPrefixOf` NE.head (commentBody c) = BlockComment
       | otherwise = LineComment
-
     escape l = case openerWidth l of
       Just n
         | (gap, rest) <- T.span (== ' ') (T.drop n l),
@@ -325,9 +309,6 @@
   where
     within c = startPoint s <= startPoint c && endPoint c <= endPoint s
 
-----------------------------------------------------------------------------
--- Pragmas
-
 -- | A compiler pragma, which is written as a block comment but is not one.
 --
 -- GHC reads pragmas only from the file header, so where a pragma sits
@@ -357,10 +338,7 @@
             pragmaBody = T.strip body
           }
   where
-    oneLine = T.unwords (map T.strip (NE.toList (commentBody c)))
-
-----------------------------------------------------------------------------
--- Columns and offsets
+    oneLine = T.unwords (fmap T.strip (NE.toList (commentBody c)))
 
 -- | How many characters of a line come before the compiler's column.
 --
diff --git a/src/Tilia/Comments/Attach.hs b/src/Tilia/Comments/Attach.hs
--- a/src/Tilia/Comments/Attach.hs
+++ b/src/Tilia/Comments/Attach.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE LambdaCase #-}
 
--- | Putting comments into the document.
+-- | Attaching a stream of comments to a 'Doc'.
 --
 -- Attachment happens once, on the finished document, before anything is
 -- rendered. A comment becomes an ordinary part of the document like any
@@ -21,18 +21,25 @@
 import Tilia.Doc.Internal (Doc (..))
 import Tilia.Span
 
--- | Put every comment into the document.
+-- | Attache comments to a 'Doc'.
 attachComments :: [Comment] -> Doc -> Doc
-attachComments cs doc = written <> afterEverything (unplaced left)
+attachComments cs doc = written <> closingComments (unplaced left)
   where
     (written, left) = walk (placeComments regions fences cs) doc
     (regions, fences) = markedSpans doc
 
 -- | The comments nothing came to collect, written after everything.
-afterEverything :: [Comment] -> Doc
-afterEverything = \case
+closingComments :: [Comment] -> Doc
+closingComments = \case
   [] -> mempty
-  (opening : rest) -> atEnd True opening <> foldMap (atEnd False) rest
+  (opening : rest) -> placeOne True opening <> foldMap (placeOne False) rest
+  where
+    placeOne opensTheRun c =
+      commentDoc c $
+        closeLine
+          <> includeWhen (opensTheRun || commentGapAbove c) blankLine
+          <> commentText c
+          <> closeLine
 
 -- | The spans of every 'DLocated' in the document, and of every 'DFence',
 -- in that order.
@@ -48,7 +55,14 @@
   DCppChoice bs e -> foldMap (markedSpans . snd) bs <> markedSpans e
   _ -> ([], [])
 
--- | Walk the document, giving each region what it was given.
+-- | Write the placed comments into the document, each one around the region
+-- it was given to. Taking is destructive: the 'Placements' is threaded
+-- through the walk and a region's comments are removed as they are written,
+-- so a span that occurs twice is served once. The two sides of a 'DVariant'
+-- are the exception—they are one piece of code laid out two ways, so both
+-- are walked from the same 'Placements' and both come out holding the
+-- comment, and only one of them is ever printed. What is still unwritten
+-- when the walk ends is returned next to the resulting 'Doc'.
 walk :: Placements -> Doc -> (Doc, Placements)
 walk = go
   where
@@ -58,10 +72,10 @@
             (b', p'') = go p' b
          in (DCat a' b', p'')
       DLocated s d ->
-        let (mine, p') = takePlaced s p
+        let (mine, p') = claimPlaced s p
             (d', p'') = go p' d
             write position cs =
-              foldMap (writtenAs (endOfAConstruct s) position) cs
+              foldMap (writtenAs (isEmptyAnchor s) position) cs
             before' = heldOffFrom d [c | (q, c) <- mine, q == Before]
             after' = [c | (q, c) <- mine, q == After]
          in (write Before before' <> DLocated s d' <> write After after', p'')
@@ -90,7 +104,7 @@
   Just (earlier, c)
     | not (bracketed c),
       opensWithHaddock d ->
-        earlier <> [c {commentGapBelow = True}]
+        earlier <> [c{commentGapBelow = True}]
   _ -> cs
 
 -- | Does this region begin its first line with a Haddock?
@@ -114,19 +128,18 @@
       DSoftBreak -> ([], layout == Broken)
       _ -> ([], False)
 
--- | Does this region stand for where a construct stops rather than for
--- anything written?
-endOfAConstruct :: Span -> Bool
-endOfAConstruct s = startPoint s == endPoint s
-
-----------------------------------------------------------------------------
--- What a comment looks like
+-- | Is this region an 'emptyAnchor' rather than one covering something
+-- written?
+isEmptyAnchor :: Span -> Bool
+isEmptyAnchor s = startPoint s == endPoint s
 
--- | One comment, written where it was placed.
+-- | Render one 'Comment' where it was placed.
 writtenAs ::
   -- | Does what follows only mark where the construct ends?
   Bool ->
+  -- | Comment position.
   Position ->
+  -- | The comment to render.
   Comment ->
   Doc
 writtenAs atTheEnd position c = commentDoc c $ case shapeOf position c of
@@ -141,45 +154,23 @@
     gapAbove = includeWhen (commentGapAbove c) (closeLine <> blankLine)
     gapBelow = includeWhen (commentGapBelow c && not atTheEnd) blankLine
 
--- | Turn a 'Comment' that trails the document into a 'Doc'.
-atEnd ::
-  -- | Is this the first of them, and so the one held off the code above?
-  Bool ->
-  Comment ->
-  Doc
-atEnd opensTheRun c =
-  commentDoc c $
-    closeLine
-      <> includeWhen (opensTheRun || commentGapAbove c) blankLine
-      <> commentText c
-      <> closeLine
-
 -- | A comment, and the spacing that goes with it, as one region.
---
--- One region and not several, because the empty line a comment is held off
--- by belongs to the comment and not to whatever it happens to sit next to.
--- Anything that takes a document apart and puts it back together—the merge
--- in "Tilia.Cpp" above all—works on what a region holds, and would
--- otherwise be free to keep the spacing and move the comment, which is how
--- a blank line comes to be left behind in a place that cannot produce it
--- again.
 commentDoc :: Comment -> Doc -> Doc
 commentDoc = located . commentSpan
 
 -- | The text of a comment, laid out as it was written.
 commentText :: Comment -> Doc
 commentText c =
-  align $ sepBy (verbatimBreak AtIndent) (map txt (NE.toList (commentBody c)))
-
-----------------------------------------------------------------------------
--- The two document atoms that exist for comments
+  align $
+    sepBy
+      (verbatimBreak AtIndent TrimWhitespace)
+      (fmap txt (NE.toList (commentBody c)))
 
--- | Text put at the end of the line this position falls on.
---
--- The argument must not contain a line break.
+-- | Put this text at the end of the line this position falls on.
 holdBack :: Text -> Doc
 holdBack = DHoldBack
 
--- | Close the line, absorbing a break that immediately follows.
+-- | End the current line and leave a mark so that a line break that follows
+-- it immediately (if any) will have no effect.
 closeLine :: Doc
 closeLine = DCloseLine
diff --git a/src/Tilia/Comments/Place.hs b/src/Tilia/Comments/Place.hs
--- a/src/Tilia/Comments/Place.hs
+++ b/src/Tilia/Comments/Place.hs
@@ -1,14 +1,11 @@
--- | Deciding where each comment goes.
+-- | Determine the placement of each 'Comment'.
 module Tilia.Comments.Place
-  ( -- * Where a comment goes
-    Position (..),
+  ( Position (..),
     Shape (..),
     shapeOf,
-
-    -- * The answers
     Placements,
     placeComments,
-    takePlaced,
+    claimPlaced,
     unplaced,
   )
 where
@@ -64,18 +61,19 @@
     | singleLine c -> HeldBack
     | otherwise -> EndsTheLine
 
--- | What each region was given, and what nothing could be found for.
+-- | Comment placements.
 data Placements = Placements
   { placedAt :: Map Span [(Position, Comment)],
     placedNowhere :: [Comment]
   }
 
--- | Give every comment to a region.
+-- | Determine comment placements.
 placeComments ::
-  -- | The regions a comment may be given to
+  -- | The regions a comment may be given to.
   [Span] ->
-  -- | The boundaries a comment printed in place may not be carried across
+  -- | The boundaries a comment printed in place may not be carried across.
   [Span] ->
+  -- | The comments to place.
   [Comment] ->
   Placements
 placeComments regions fences comments =
@@ -116,7 +114,7 @@
     regionsByEndLine =
       IntMap.fromListWith (<>) [(spanEndLine r, [r]) | r <- regions]
 
-    regionEndPoints = Set.fromList (map endPoint regions)
+    regionEndPoints = Set.fromList (fmap endPoint regions)
 
     regionsByStartPoint =
       Map.fromListWith wider [(startPoint r, r) | r <- regions]
@@ -164,8 +162,6 @@
         nothingBelowItLinesUp =
           all (\r -> spanStartColumn r < spanStartColumn here) next
 
-    -- Folded rather than sorted: this runs for every comment against every
-    -- region, and only the first of the order is ever wanted.
     nearest :: (Ord k) => (Span -> k) -> [Span] -> Maybe Span
     nearest key = fmap fst . foldl' closer Nothing
       where
@@ -177,10 +173,10 @@
 inside :: Span -> Span -> Bool
 inside a b = startPoint b <= startPoint a && endPoint a <= endPoint b
 
--- | Take what a region was given, so that nothing can take it again.
-takePlaced :: Span -> Placements -> ([(Position, Comment)], Placements)
-takePlaced s p = case Map.updateLookupWithKey forget s (placedAt p) of
-  (found, rest) -> (concat found, p {placedAt = rest})
+-- | Claim the comments that belong to the given 'Span'.
+claimPlaced :: Span -> Placements -> ([(Position, Comment)], Placements)
+claimPlaced s p = case Map.updateLookupWithKey forget s (placedAt p) of
+  (found, rest) -> (concat found, p{placedAt = rest})
   where
     forget _ _ = Nothing
 
@@ -188,4 +184,4 @@
 unplaced :: Placements -> [Comment]
 unplaced p =
   sortOn (startPoint . commentSpan) $
-    placedNowhere p <> [c | (_, c) <- concat (Map.elems (placedAt p))]
+    placedNowhere p <> foldMap (fmap snd) (placedAt p)
diff --git a/src/Tilia/Cpp.hs b/src/Tilia/Cpp.hs
--- a/src/Tilia/Cpp.hs
+++ b/src/Tilia/Cpp.hs
@@ -2,6 +2,10 @@
 {-# LANGUAGE OverloadedStrings #-}
 
 -- | Formatting a module with the C preprocessor involved.
+--
+-- Each configuration is printed on its own and the documents are merged.
+-- Working out what the configurations are is "Tilia.Cpp.Directives", whose
+-- vocabulary this module re-exports so that callers need only one import.
 module Tilia.Cpp
   ( -- * Formatting
     formatWithCpp,
@@ -17,6 +21,7 @@
     configurations,
     leaves,
     branchLeaves,
+    correspondingBranches,
     linearLeaves,
     countLeaves,
     answeredLeaves,
@@ -27,37 +32,37 @@
   )
 where
 
-import Data.Char (isAsciiLower)
 import Data.List (maximumBy, sortOn, transpose, unsnoc)
 import Data.Map.Strict (Map)
 import Data.Map.Strict qualified as Map
-import Data.Maybe (isJust, listToMaybe, maybeToList)
+import Data.Maybe (isJust, listToMaybe)
 import Data.Ord (comparing)
 import Data.Text (Text)
 import Data.Text qualified as T
-import GHC.LanguageExtensions.Type (Extension (..))
-import Tilia.Cpp.Macros (Macros, answerTo)
+import Tilia.Cpp.Directives
 import Tilia.Doc (defaultRenderOptions, printDoc)
 import Tilia.Doc.Combinators qualified as Doc
 import Tilia.Doc.Internal (Doc (..), Layout (..))
 import Tilia.Parser
-  ( ParseError,
-    ParserConfig,
-    describeParseError,
+  ( ParserConfig,
     parseConfiguration,
   )
 import Tilia.Render (RenderConfig (..), renderModule)
 import Tilia.Source
   ( Lines,
     Written (..),
-    blankAt,
-    blankBelow,
-    closesABranch,
+    directiveOnLine,
     dropping,
     lineTexts,
     linesOf,
   )
-import Tilia.Span (Span, covers, meets, mkSpan, spanEndLine, spanStartLine)
+import Tilia.Span
+  ( Span,
+    covers,
+    meets,
+    spanEndLine,
+    spanStartLine,
+  )
 
 ----------------------------------------------------------------------------
 -- Formatting
@@ -67,15 +72,15 @@
 -- Each configuration is formatted by the ordinary printer. The resulting
 -- documents are then merged.
 formatWithCpp ::
-  -- | What to parse each configuration with
+  -- | What to parse each configuration with.
   ParserConfig ->
-  -- | What to print each configuration with
+  -- | What to print each configuration with.
   RenderConfig ->
-  -- | The file this is, for the positions in an error
+  -- | The file this is, for the positions in an error.
   FilePath ->
-  -- | The module, directives and all
+  -- | The module, directives and all.
   Text ->
-  -- | The formatted module, or why not
+  -- | The formatted module, or why not.
   Either CppError Text
 formatWithCpp parser render path source =
   printDoc defaultRenderOptions . fst
@@ -88,62 +93,66 @@
       source
   where
     knowing c =
-      c {rcImportBarriers = maybe [] (map dLine) (scanDirectives source)}
+      c{rcImportBarriers = maybe [] (fmap dLine) (scanDirectives source)}
 
 -- | Format every configuration of a module, and merge them into one
 -- document.
 formatAllConfigs ::
-  -- | What to parse a configuration with
+  -- | What to parse a configuration with.
   ParserConfig ->
-  -- | What to print it with
+  -- | What to print it with.
   RenderConfig ->
-  -- | The file this is, for the positions in a parse error
+  -- | The file this is, for the positions in a parse error.
   FilePath ->
-  -- | How this configuration was reached
+  -- | How this configuration was reached.
   Reached ->
-  -- | Formattings left to spend
+  -- | Formattings left to spend.
   Int ->
+  -- | Input text.
   Text ->
   Either CppError (Doc, Int)
-formatAllConfigs parser render path reached budget source = case variations source of
-  Nothing
-    | any isDirective (T.lines left) -> Left (UnhandledDirective (unhandledIn left))
-    | budget <= 0 -> Left TooManyConfigurations
-    | otherwise -> do
-        document <-
-          formatSingleConfig
-            parser
-            render
-            path
-            reached
-            left
-        (,budget - 1)
-          <$> replacing
-            (reachedLines reached)
-            (reachedAnswers reached)
-            opaque
-            document
-    where
-      opaque = opaqueDirectives source
-      left = withoutOpaque source
-  Just apart -> case linearly apart of
-    Right built -> Right built
-    Left (Refused TooManyConfigurations, _) -> Left TooManyConfigurations
-    Left (_, left')
-      | Right many <- countLeaves source,
-        many > configurationsWorthTrying ->
-          Left TooManyConfigurations
-      | otherwise ->
-          maybe
-            (Left UnsplittableConditional)
-            (together parser render path reached left')
-            (configurations source)
+formatAllConfigs parser render path reached budget source =
+  case variations source of
+    Nothing
+      | any isDirective (T.lines left) ->
+          Left (UnhandledDirective (unhandledIn left))
+      | budget <= 0 -> Left TooManyConfigurations
+      | otherwise -> do
+          document <-
+            formatSingleConfig
+              parser
+              render
+              path
+              reached
+              left
+          (,budget - 1)
+            <$> replacing
+              (reachedLines reached)
+              (reachedAnswers reached)
+              opaque
+              document
+      where
+        opaque = opaqueDirectives source
+        left = withoutOpaque source
+    Just apart -> case linearly apart of
+      Right built -> Right built
+      Left (Refused TooManyConfigurations, _) ->
+        Left TooManyConfigurations
+      Left (_, left')
+        | Right many <- countLeaves source,
+          many > configurationsWorthTrying ->
+            Left TooManyConfigurations
+        | otherwise ->
+            maybe
+              (Left UnsplittableConditional)
+              (together parser render path reached left')
+              (configurations source)
   where
     linearly v =
       case separately parser render path reached budget v of
         Left why -> Left (Refused why, budget)
         Right (baseDoc, merged, budget') ->
-          case combine Broken baseDoc (zip (map cfgWholes (vaGroups v)) merged) of
+          case combine Broken baseDoc (zip (fmap cfgWholes (vaGroups v)) merged) of
             Just d -> Right (d, budget')
             Nothing -> Left (InOneConstruct, budget')
 
@@ -155,12 +164,11 @@
     -- land on one construct and cannot be put back one at a time.
     InOneConstruct
 
--- | What every question asked at the top level of a module splits it into,
--- each taken on its own.
+-- | A single variation.
 data Variation = Variation
   { -- | Every question answered with its first branch.
     vaBaseline :: Text,
-    -- | The branches that answer left out. See 'Tilia.Source.dropping'.
+    -- | The line ranges that answer leaves out.
     vaBaselineDropped :: [(Int, Int)],
     -- | One question varied, with all the others held at the baseline.
     vaGroups :: [Configurations]
@@ -175,9 +183,19 @@
     [] -> Nothing
     dimensions ->
       let blanked at =
-            concat [blankingFor g (at k) | (k, dim) <- zip [0 :: Int ..] dimensions, g <- dim]
+            concat
+              [ blankingFor g (at k)
+              | (k, dim) <-
+                  zip [0 :: Int ..] dimensions,
+                g <- dim
+              ]
           gone at =
-            concat [droppedFor g (at k) | (k, dim) <- zip [0 :: Int ..] dimensions, g <- dim]
+            concat
+              [ droppedFor g (at k)
+              | (k, dim) <-
+                  zip [0 :: Int ..] dimensions,
+                g <- dim
+              ]
           held at = blanking (blanked at) source
        in Just
             Variation
@@ -194,7 +212,7 @@
                           [ gone (\j -> if j == k then i else 0)
                           | i <- [0 .. gsCount gs - 1]
                           ],
-                        cfgWholes = Varied (map gsWhole dim)
+                        cfgWholes = Varied (fmap gsWhole dim)
                       }
                   | (k, dim@(gs : _)) <- zip [0 :: Int ..] dimensions
                   ]
@@ -203,17 +221,17 @@
 -- | Vary each conditional on its own, holding the others at their first
 -- branch.
 separately ::
-  -- | What to parse a configuration with
+  -- | What to parse a configuration with.
   ParserConfig ->
-  -- | What to print it with
+  -- | What to print it with.
   RenderConfig ->
-  -- | The file this is, for the positions in a parse error
+  -- | The file this is, for the positions in a parse error.
   FilePath ->
-  -- | How this configuration was reached
+  -- | How this configuration was reached.
   Reached ->
-  -- | Formattings left to spend
+  -- | Formattings left to spend.
   Int ->
-  -- | The conditionals to vary, and the baseline to hold them against
+  -- | The conditionals to vary, and the baseline to hold them against.
   Variation ->
   Either CppError (Doc, [Doc], Int)
 separately parser render path reached budget v = do
@@ -247,41 +265,86 @@
 
 -- | Vary the conditionals together, one group at a time.
 together ::
-  -- | What to parse a configuration with
+  -- | What to parse a configuration with.
   ParserConfig ->
-  -- | What to print it with
+  -- | What to print it with.
   RenderConfig ->
-  -- | The file this is, for the positions in a parse error
+  -- | The file this is, for the positions in a parse error.
   FilePath ->
-  -- | How this configuration was reached
+  -- | How this configuration was reached.
   Reached ->
-  -- | Formattings left to spend
+  -- | Formattings left to spend.
   Int ->
-  -- | The group to split on, and the branch texts to split it into
+  -- | The group to split on, and the branch texts to split it into.
   Configurations ->
   Either CppError (Doc, Int)
 together parser render path reached budget c = do
-  (docs, budget') <- eachBranch budget (zip [0 ..] (cfgTexts c))
+  (formatted, budget') <- eachBranch budget (zip [0 ..] (cfgTexts c))
+  docs <- traverse (complete formatted) (zip [0 ..] (cfgTexts c))
   pure (merge (freeOf reached) (cfgGuards c) (cfgWholes c) docs, budget')
   where
     inside = reached
     eachBranch b [] = Right ([], b)
+    eachBranch b ((_, t) : ts) | not (null (unconditionalErrors t)) = eachBranch b ts
     eachBranch b ((i, t) : ts) = do
       (d, b') <- formatAllConfigs parser render path (answering c i inside) b t
       (ds, b'') <- eachBranch b' ts
-      pure (d : ds, b'')
+      pure ((i, d) : ds, b'')
+    complete formatted (i, t) = case lookup i formatted of
+      Just d -> Right d
+      Nothing -> case listToMaybe formatted >>= errorBranch (cfgWholes c) t . snd of
+        Just d -> Right d
+        Nothing -> Left UnsplittableConditional
 
+-- | Preserve an error-only alternative without asking the Haskell parser to
+-- parse its missing expression or declaration. A successful sibling supplies
+-- the surrounding syntax; only nodes wholly inside the conditional are
+-- replaced. More complicated aborting alternatives are left unsupported.
+errorBranch :: Varied -> Text -> Doc -> Maybe Doc
+errorBranch (Varied ranges) source reference = foldl step (Just reference) ranges
+  where
+    sourceLines' = zip [1 ..] (T.lines source)
+    errors = unconditionalErrors source
+    step acc (from, to) = do
+      doc <- acc
+      let inside n = from <= n && n <= to
+          here = filter (inside . opLine) errors
+          errorLine n = any (\d -> opLine d <= n && n <= opLastLine d) here
+          onlyErrors =
+            all
+              (\(n, l) -> not (inside n) || errorLine n || T.null (T.strip l))
+              sourceLines'
+          body = mconcat [DCppDirective (opSpan d) (opText d) | d <- here]
+          contained s = inside (spanStartLine s) && inside (spanEndLine s)
+          walk seen d = case d of
+            DLocated s _ | contained s -> (True, if seen then mempty else body)
+            DCppDirective s _ | contained s -> (True, if seen then mempty else body)
+            DLocated s x -> fmap (DLocated s) (walk seen x)
+            DFence s x -> fmap (DFence s) (walk seen x)
+            DNest k x -> fmap (DNest k) (walk seen x)
+            DAlign x -> fmap DAlign (walk seen x)
+            DGroup l x -> fmap (DGroup l) (walk seen x)
+            DVariant a b ->
+              let (sa, a') = walk seen a; (sb, b') = walk seen b
+               in (sa || sb, DVariant a' b')
+            DCat a b ->
+              let (sa, a') = walk seen a; (sb, b') = walk sa b
+               in (sb, a' <> b')
+            _ -> (seen, d)
+          (placed, result) = walk False doc
+      if not (null here) && onlyErrors && placed then Just result else Nothing
+
 -- | Format one configuration with the ordinary printer.
 formatSingleConfig ::
-  -- | What to parse it with
+  -- | What to parse it with.
   ParserConfig ->
-  -- | What to print it with
+  -- | What to print it with.
   RenderConfig ->
-  -- | The file this is, for the positions in a parse error
+  -- | The file this is, for the positions in a parse error.
   FilePath ->
-  -- | How this configuration was reached
+  -- | How this configuration was reached.
   Reached ->
-  -- | The configuration itself, with no directives left in it
+  -- | The configuration itself, with no directives left in it.
   Text ->
   Either CppError Doc
 formatSingleConfig parser render path reached text =
@@ -311,7 +374,10 @@
 answering c i reached =
   reached
     { reachedAnswers = reachedAnswers reached <> [(cfgGuards c, i)],
-      reachedLines = dropping (concat (take 1 (drop i (cfgDropped c)))) (reachedLines reached)
+      reachedLines =
+        dropping
+          (concat (take 1 (drop i (cfgDropped c))))
+          (reachedLines reached)
     }
 
 -- | Leave out the branches a baseline does not take, without answering
@@ -319,7 +385,7 @@
 -- which question is being varied is not settled until 'answering'.
 without :: [(Int, Int)] -> Reached -> Reached
 without gone reached =
-  reached {reachedLines = dropping gone (reachedLines reached)}
+  reached{reachedLines = dropping gone (reachedLines reached)}
 
 -- | How many whole formattings of a module one call may spend.
 configurationBudget :: Int
@@ -361,7 +427,7 @@
       _ -> []
 
     reproduced = \case
-      DVerbatimBreak _ -> True
+      DVerbatimBreak _ _ -> True
       DNest _ x -> reproduced x
       DAlign x -> reproduced x
       DGroup _ x -> reproduced x
@@ -409,9 +475,7 @@
           _ -> Nothing
 
     startOf = fmap fst . boundsOf
-
     endOf = fmap snd . boundsOf
-
     boundsOf = \case
       DLocated s _ -> Just (spanStartLine s, spanEndLine s)
       DFence s _ -> Just (spanStartLine s, spanEndLine s)
@@ -426,15 +490,6 @@
         (Nothing, found) -> found
       _ -> Nothing
 
--- | A module with the directives that ask nothing blanked out of it.
---
--- The same blanking every branch gets, and for the same reason: what is
--- left occupies the lines it always did, so everything downstream can go on
--- lining documents up by where they came from.
-withoutOpaque :: Text -> Text
-withoutOpaque source =
-  blanking [(opLine d, opLastLine d) | d <- opaqueDirectives source] source
-
 -- | Merge the documents one conditional's branches printed to.
 --
 -- A structural walk that keeps what they all agree on and puts a choice
@@ -448,21 +503,21 @@
       | Just xs <- traverse only spines = alongside layout xs
       | otherwise = factored layout spines
       where
-        spines = map (spineAt layout) ds
+        spines = fmap (spineAt layout) ds
 
     alongside _ [] = mempty
     alongside layout xs@(x : _) = case x of
       DLocated s _
         | Just tds <- every (\case DLocated t d -> Just (t, d); _ -> Nothing),
           all (meets s . fst) tds ->
-            case go layout (map snd tds) of
+            case go layout (fmap snd tds) of
               DCppChoice _ _
-                | Just opened <- unwrapping layout (map fst tds) xs -> opened
+                | Just opened <- unwrapping layout (fmap fst tds) xs -> opened
               descended -> DLocated (hull s tds) descended
       DFence s _
         | Just tds <- every (\case DFence t d -> Just (t, d); _ -> Nothing),
           all (meets s . fst) tds ->
-            DFence (hull s tds) (go layout (map snd tds))
+            DFence (hull s tds) (go layout (fmap snd tds))
       DNest n _ | Just ds <- every (\case DNest m d | m == n -> Just d; _ -> Nothing) -> DNest n (go layout ds)
       DGroup _ _
         | Just ls <- every (\case DGroup l _ -> Just l; _ -> Nothing),
@@ -510,18 +565,18 @@
         _ -> False
 
     factored layout ss =
-      let exposed = map (exposing (filter split' (sharedDirectives ss))) ss
+      let exposed = fmap (exposing (filter split' (sharedDirectives ss))) ss
           split' d = d `elem` free && any (holds d) ss && not (all (holds d) ss)
           holds d = any (isNamed d)
           lining = alignable varied layout
           shared = foldl1 (lcs lining) exposed
-          cut = map (segments (anchored lining) shared) exposed
-          stretches = transpose (map fst cut)
-          anchors = transpose (map snd cut)
-       in mconcat (woven layout stretches (map (go layout) anchors))
+          cut = fmap (segments (anchored lining) shared) exposed
+          stretches = transpose (fmap fst cut)
+          anchors = transpose (fmap snd cut)
+       in mconcat (woven layout stretches (fmap (go layout) anchors))
 
     woven layout (s : ss) (c : cs) = varying layout s : c : woven layout ss cs
-    woven layout ss [] = map (varying layout) ss
+    woven layout ss [] = fmap (varying layout) ss
     woven _ [] _ = []
 
     varying layout ss =
@@ -537,12 +592,12 @@
     sharedStart layout ss
       | Just (h : hs) <- traverse listToMaybe ss,
         all (agree varied layout h) hs =
-          let (c, ss') = sharedStart layout (map (drop 1) ss) in (h : c, ss')
+          let (c, ss') = sharedStart layout (fmap (drop 1) ss) in (h : c, ss')
       | otherwise = ([], ss)
 
     sharedEnd layout ss =
-      let (c, ss') = sharedStart layout (map reverse ss)
-       in (map reverse ss', reverse c)
+      let (c, ss') = sharedStart layout (fmap reverse ss)
+       in (fmap reverse ss', reverse c)
 
     middle _ [] = mempty
     middle layout ss@(s : rest)
@@ -553,11 +608,11 @@
           merged
       | otherwise = apart
       where
-        apart = choice (map mconcat ss)
+        apart = choice (fmap mconcat ss)
 
     alongsideHeads layout ss = do
       heads <- traverse listToMaybe ss
-      let tails = map (drop 1) ss
+      let tails = fmap (drop 1) ss
       case heads of
         (h : hs)
           | all (sameKind h) hs,
@@ -571,7 +626,7 @@
 
     joined before after = case (endingChoice before, startingChoice after) of
       (Just (opening, bs, e, gap), Just (gap', cs, e', closing))
-        | map fst bs == map fst cs ->
+        | fmap fst bs == fmap fst cs ->
             opening
               <> Doc.cppChoice
                 [(g, x <> between <> y) | ((g, x), (_, y)) <- zip bs cs]
@@ -599,16 +654,16 @@
     hoisted layout ss = case filter (not . null . middleOf) peeled of
       [] ->
         ( widest [l | (l, _, _) <- peeled],
-          map (const []) ss,
+          fmap (const []) ss,
           widest [r | (_, _, r) <- peeled]
         )
       speaking ->
         ( widest [l | (l, _, _) <- speaking],
-          map middleOf peeled,
+          fmap middleOf peeled,
           widest [r | (_, _, r) <- speaking]
         )
       where
-        peeled = map peel ss
+        peeled = fmap peel ss
         middleOf (_, m, _) = m
         widest = \case
           [] -> []
@@ -628,7 +683,7 @@
       _ -> False
 
     choice ds = case unsnoc ds of
-      Just (branches, fallback) -> Doc.cppChoice (zip (map guardText guards) branches) fallback
+      Just (branches, fallback) -> Doc.cppChoice (zip (fmap guardText guards) branches) fallback
       Nothing -> mempty
 
     only [d] = Just d
@@ -647,13 +702,11 @@
   ]
   where
     depths = Map.fromList (zip [1 ..] (scanl step 0 (T.lines source)))
-    step depth l
-      | not (isDirective l) = depth
-      | keyword `elem` ["if", "ifdef", "ifndef"] = depth + 1
-      | keyword == "endif" = max 0 (depth - 1)
-      | otherwise = depth
-      where
-        keyword = T.takeWhile isAsciiLower (T.stripStart (T.drop 1 (T.stripStart l)))
+    step depth l = case directiveOnLine l of
+      Just (keyword, _)
+        | keyword `elem` ["if", "ifdef", "ifndef"] -> depth + 1
+        | keyword == "endif" -> max 0 (depth - 1)
+      _ -> depth
 
 -- | Is this spine element the named directive itself, bare?
 isNamed :: (Span, Text) -> Doc -> Bool
@@ -733,13 +786,11 @@
     alike (Right x : xs) (Right y : ys) = here x y && alike xs ys
     alike [] [] = True
     alike _ _ = False
-
     chunked ds =
       let (space, rest) = span isSpace' ds
        in Left (spaceOf layout space) : case rest of
             [] -> []
             x : more -> Right x : chunked more
-
     isSpace' = \case
       DEmpty -> True
       DSpace -> True
@@ -748,9 +799,7 @@
       DHardBreak -> True
       DCloseLine -> True
       _ -> False
-
     inside x y = agree varied layout x y
-
     here x y = case (x, y) of
       (DGroup l x', DGroup m y') -> l == m && agree varied l x' y'
       (DNest n x', DNest m y') -> n == m && inside x' y'
@@ -765,7 +814,7 @@
       (DText s, DText t) -> s == t
       (DCppDirective s u, DCppDirective t v) -> s == t && u == v
       (DHoldBack s, DHoldBack t) -> s == t
-      (DVerbatimBreak r, DVerbatimBreak q) -> r == q
+      (DVerbatimBreak r e, DVerbatimBreak q f) -> r == q && e == f
       (DSpace, DSpace) -> True
       (DBreak, DBreak) -> True
       (DSoftBreak, DSoftBreak) -> True
@@ -774,13 +823,6 @@
       _ -> False
 
 -- | What a run of space comes to on the page.
---
--- How many lines it ends, which is all that can be told of it afterwards
--- since the printer never writes two empty lines in a row, and whether it
--- holds the text either side of it apart on a line it did not end.
---
--- The 'Ord' instance is how much space it is, which is why the fields are in
--- that order: nothing, then a space, then a line ended, then two.
 data Space = Space !Int !Bool
   deriving (Eq, Ord)
 
@@ -808,16 +850,6 @@
             | closed = go ended False apart rest
             | otherwise = go (ended + 1) False apart rest
 
--- | The lines one conditional could have printed differently.
-newtype Varied = Varied {variedLines :: [(Int, Int)]}
-  deriving (Eq, Show)
-
--- | Was this region printed from lines the conditional left alone?
-untouched :: Varied -> Span -> Bool
-untouched (Varied ranges) s = not (any reaches ranges)
-  where
-    reaches (from, to) = spanStartLine s <= to && from <= spanEndLine s
-
 -- | Put several documents' differences from a baseline into one document.
 --
 -- Each of them is the baseline except inside one conditional's lines, and
@@ -840,17 +872,17 @@
       DLocated s i
         | Just tds <- every (\case DLocated t d -> Just (t, d); _ -> Nothing),
           all (meets s . fst . snd) tds ->
-            DLocated (hull s (map snd tds)) <$> combine layout i (inner tds)
+            DLocated (hull s (fmap snd tds)) <$> combine layout i (inner tds)
       DFence s i
         | Just tds <- every (\case DFence t d -> Just (t, d); _ -> Nothing),
           all (meets s . fst . snd) tds ->
-            DFence (hull s (map snd tds)) <$> combine layout i (inner tds)
+            DFence (hull s (fmap snd tds)) <$> combine layout i (inner tds)
       DNest n i | Just is <- every (\case DNest m d | m == n -> Just d; _ -> Nothing) -> DNest n <$> combine layout i is
       DAlign i | Just is <- every (\case DAlign d -> Just d; _ -> Nothing) -> DAlign <$> combine layout i is
       DGroup l i
         | Just ls <- every (\case DGroup m _ -> Just m; _ -> Nothing),
           Just is <- every (\case DGroup _ d -> Just d; _ -> Nothing) ->
-            let inside = if Broken `elem` (l : map snd ls) then Broken else Flat
+            let inside = if Broken `elem` (l : fmap snd ls) then Broken else Flat
              in DGroup inside <$> combine inside i is
       _ -> Nothing
       where
@@ -889,8 +921,8 @@
             <$> combine layout b xs
       | otherwise = Nothing
       where
-        from = minimum (map chFrom cs)
-        to = maximum (map chTo cs)
+        from = minimum (fmap chFrom cs)
+        to = maximum (fmap chTo cs)
 
     applied bs = go 0
       where
@@ -905,8 +937,11 @@
 
 -- | A stretch of the baseline, and what one document put there instead.
 data Change = Change
-  { chFrom :: !Int,
+  { -- | Where the stretch begins, as an index into the baseline.
+    chFrom :: !Int,
+    -- | Where it ends, one past the last element replaced.
     chTo :: !Int,
+    -- | What the document put there instead.
     chWith :: [Doc],
     -- | The lines the conditional this change came from could have reached.
     -- Carried so that a cluster of two of them can be combined without
@@ -918,9 +953,9 @@
 -- replaced and what it put in each of their places.
 changesAgainst ::
   Varied ->
-  -- | Whether two elements stand for the same thing, which lines the spines up
+  -- | Whether two elements stand for the same thing, which lines the spines up.
   (Doc -> Doc -> Bool) ->
-  -- | Whether two elements print the same, which says nothing changed
+  -- | Whether two elements print the same, which says nothing changed.
   (Doc -> Doc -> Bool) ->
   [Doc] ->
   [Doc] ->
@@ -940,7 +975,7 @@
 
     held j (Just b') (Just x')
       | not (plain b' x') =
-          [Change {chFrom = j, chTo = j + 1, chWith = [x'], chVaried = varied}]
+          [Change{chFrom = j, chTo = j + 1, chWith = [x'], chVaried = varied}]
     held _ _ _ = []
 
     between i b x =
@@ -979,7 +1014,7 @@
     let opening = mconcat (reverse earlier)
         gap = mconcat (reverse trailing)
         around w (o, bs, e, g) =
-          (opening <> w o, map (fmap w) bs, w e, w g <> gap)
+          (opening <> w o, fmap (fmap w) bs, w e, w g <> gap)
      in case x of
           DCppChoice bs e -> Just (opening, bs, e, gap)
           DGroup l y -> around (DGroup l) <$> endingChoice y
@@ -996,7 +1031,7 @@
     let gap = mconcat leading
         closing = mconcat later
         around w (g, bs, e, c) =
-          (gap <> w g, map (fmap w) bs, w e, w c <> closing)
+          (gap <> w g, fmap (fmap w) bs, w e, w c <> closing)
      in case x of
           DCppChoice bs e -> Just (gap, bs, e, closing)
           DGroup l y -> around (DGroup l) <$> startingChoice y
@@ -1054,7 +1089,7 @@
         go (case layout of Flat -> flatD; Broken -> brokenD)
       DLocated _ d -> go d
       DFence _ d -> go d
-      DCppChoice bs e -> sum (map (go . snd) bs) + go e
+      DCppChoice bs e -> sum (fmap (go . snd) bs) + go e
       DText t -> T.length t
       DCppDirective _ t -> T.length t
       DHoldBack t -> T.length t
@@ -1125,20 +1160,24 @@
   DSoftBreak -> False
   DHardBreak -> False
   DCloseLine -> False
-  DVerbatimBreak _ -> False
+  DVerbatimBreak _ _ -> False
   _ -> True
 
 -- | A spine cut at the elements it shares with the others: one stretch
 -- before each of them, and one after the last, and the elements themselves.
 --
--- Always one more stretch than there are shared elements, either end of
--- which may be empty. Leftmost matching is enough to find each of them,
--- since what is being matched is a subsequence of this spine to begin with.
---
 -- The matched elements come back rather than being dropped because the
 -- caller cannot assume they are interchangeable: what lined them up is
 -- 'alignable', and only 'agree' would say they print the same.
-segments :: (Doc -> Doc -> Bool) -> [Doc] -> [Doc] -> ([[Doc]], [Doc])
+segments ::
+  -- | Whether an element of the spine is the shared one being looked for.
+  (Doc -> Doc -> Bool) ->
+  -- | The shared elements, in order, to cut at.
+  [Doc] ->
+  -- | The spine to cut.
+  [Doc] ->
+  -- | The stretches between the cuts, and the elements cut at.
+  ([[Doc]], [Doc])
 segments same = go
   where
     go [] s = ([s], [])
@@ -1148,511 +1187,6 @@
       where
         keeping before' matched (stretches, anchors) =
           (before' : stretches, matched : anchors)
-
--- | Would the preprocessor be run over this module, and find anything to
--- do?
-usesCpp :: [Extension] -> Text -> Bool
-usesCpp extensions source =
-  Cpp `elem` extensions && any isDirective (T.lines source)
-
--- | Blank out the directive lines, keeping every branch.
-blankCpp :: Text -> Text
-blankCpp = T.unlines . go False . T.lines
-  where
-    go _ [] = []
-    go continuing (l : ls)
-      | continuing || isDirective l = "" : go (runsOn l) ls
-      | otherwise = l : go False ls
-    runsOn = T.isSuffixOf "\\" . T.stripEnd
-
--- | Blank out every branch the macros rule out, and the conditionals that
--- ask about them.
---
--- This is for reading a module, not for printing one. What it takes out is
--- text the file contains and the output must keep, so nothing that builds
--- the output may be given the result.
-withoutRuledOut :: Macros -> Text -> Text
-withoutRuledOut macros source = case scanDirectives source of
-  Nothing -> source
-  Just ds ->
-    blanking
-      [ range
-      | group <- allGroups ds,
-        Just gs <- [groupSpec group],
-        Just taken <- [branchTaken macros gs],
-        range <- blankingFor gs taken
-      ]
-      source
-
--- | Which branch of a conditional the macros settle on, where they settle
--- one.
---
--- A branch is taken when its own condition holds and every condition before
--- it failed, so one unanswered condition leaves every branch after it
--- unanswered too. Where they all fail the answer is the last branch, which
--- is the @#else@ where there is one and nothing at all where there is not:
--- the same numbering 'blankingFor' uses.
-branchTaken :: Macros -> GroupSpec -> Maybe Int
-branchTaken macros = go 0 . gsGuards
-  where
-    go i = \case
-      [] -> Just i
-      g : rest -> case answerTo macros (guardText g) of
-        Just True -> Just i
-        Just False -> go (i + 1) rest
-        Nothing -> Nothing
-
--- | Why a module using the preprocessor could not be formatted.
-data CppError
-  = -- | A directive we do not handle, and its keyword.
-    UnhandledDirective Text
-  | -- | Conditionals that do not nest, or an @#else@ out of place.
-    UnsplittableConditional
-  | -- | More configurations than 'configurationBudget' allows.
-    TooManyConfigurations
-  | -- | A configuration the parser rejected, and which one it was.
-    ConfigurationNotParsed [([Guard], Int)] ParseError
-  | -- | A directive whose place in the document could not be found.
-    DirectiveUnplaceable [([Guard], Int)] Text
-  | -- | A directive written inside a quasiquote or other verbatim text.
-    DirectiveInQuotedText [([Guard], Int)] Text
-
--- | Say what went wrong, in one line. The edge of the system.
-describeCppError :: CppError -> Text
-describeCppError = \case
-  UnhandledDirective k -> "a #" <> k <> " directive, which we do not handle"
-  UnsplittableConditional -> "conditionals that do not nest, or an #else out of place"
-  TooManyConfigurations -> "too many configurations to format"
-  ConfigurationNotParsed c e -> describeParseError e <> inConfiguration c
-  DirectiveUnplaceable c k -> "nowhere to put the #" <> k <> inConfiguration c
-  DirectiveInQuotedText c k ->
-    "a #" <> k <> " inside something quoted verbatim" <> inConfiguration c
-
--- | Which configuration, in words. Empty where there is only one.
-inConfiguration :: [([Guard], Int)] -> Text
-inConfiguration [] = ""
-inConfiguration answers =
-  ", in the configuration taking " <> T.intercalate ", then " (map said answers)
-  where
-    said (guards, i) = case (drop i guards, guards) of
-      (g : _, _) -> "#" <> guardText g
-      ([], g : _) -> "no branch of #" <> guardText g
-      ([], []) -> "no branch"
-
--- | The keyword of the first directive here that we do not handle.
-unhandledIn :: Text -> Text
-unhandledIn source =
-  case [keywordOf l | l <- T.lines source, isDirective l] of
-    k : _ -> k
-    [] -> ""
-  where
-    keywordOf = T.takeWhile isAsciiLower . T.stripStart . T.drop 1 . T.stripStart
-
-----------------------------------------------------------------------------
--- Splitting
-
--- | One conditional directive, as written after its hash.
-newtype Guard = Guard {guardText :: Text}
-  deriving (Eq, Ord, Show)
-
--- | What one conditional splits a module into.
-data Configurations = Configurations
-  { -- | The directives: the @#if@ of the group, and then one per @#elif@.
-    cfgGuards :: [Guard],
-    -- | One module text per branch, in the same order as the directives, and
-    -- then one more for the @#else@.
-    cfgTexts :: [Text],
-    -- | What each of those branches leaves out, in the same order.
-    cfgDropped :: [[(Int, Int)]],
-    -- | From each tied group's @#if@ to its @#endif@, inclusive.
-    --
-    -- Everything a branch of this conditional can be responsible for lies
-    -- between one of these pairs, because that is what a group /is/. What
-    -- reads them is 'Varied', and what it does with them is skip the rest of
-    -- the module.
-    cfgWholes :: Varied
-  }
-  deriving (Eq, Show)
-
--- | Split a module on its first outermost conditional, and on every other one
--- written behind the same directives, wherever in the module it sits.
-configurations :: Text -> Maybe Configurations
-configurations source = do
-  ds <- scanDirectives source
-  gs <- groupSpec =<< listToMaybe (groupsAtLevel 0 ds)
-  let tied = sameGuard gs ds
-  pure
-    Configurations
-      { cfgGuards = gsGuards gs,
-        cfgTexts =
-          [ blanking (concatMap (`blankingFor` i) tied) source
-          | i <- [0 .. gsCount gs - 1]
-          ],
-        cfgDropped =
-          [concatMap (`droppedFor` i) tied | i <- [0 .. gsCount gs - 1]],
-        cfgWholes = Varied (map gsWhole tied)
-      }
-
--- | One conditional group, read off the directives that make it up.
-data GroupSpec = GroupSpec
-  { gsGuards :: [Guard],
-    gsHasElse :: Bool,
-    gsOwnLines :: [Int],
-    gsBranches :: [(Int, Int)],
-    gsWhole :: (Int, Int)
-  }
-
--- | Read a group off its directives, refusing one that is malformed.
-groupSpec :: [Directive] -> Maybe GroupSpec
-groupSpec group = do
-  (separators, end) <- unsnoc group
-  opener <- listToMaybe separators
-  require (dKeyword opener `elem` opensGroup)
-  require (dKeyword end == "endif")
-  require (all ((`elem` continuesGroup) . dKeyword) (drop 1 separators))
-  require (all ((/= "else") . dKeyword) (drop 1 (reverse separators)))
-  pure
-    GroupSpec
-      { gsGuards = [dGuard d | d <- separators, dKeyword d /= "else"],
-        gsHasElse = any ((== "else") . dKeyword) separators,
-        gsOwnLines = map dLine group,
-        gsBranches = [(dLine a + 1, dLine b - 1) | (a, b) <- zip group (drop 1 group)],
-        gsWhole = (dLine opener, dLine end)
-      }
-  where
-    require b = if b then Just () else Nothing
-
--- | How many configurations a group has: one per condition, and one more
--- for when none of them holds.
-gsCount :: GroupSpec -> Int
-gsCount gs = length (gsGuards gs) + 1
-
--- | The lines to blank so that configuration @i@ of a group is what is left.
---
--- The branches this configuration does not take, and the directives
--- themselves: a directive belongs to no configuration, which is the whole of
--- what separates this from 'droppedFor'.
-blankingFor :: GroupSpec -> Int -> [(Int, Int)]
-blankingFor gs i = droppedFor gs i <> [(n, n) | n <- gsOwnLines gs]
-
--- | The lines a configuration of a group is not including.
-droppedFor :: GroupSpec -> Int -> [(Int, Int)]
-droppedFor gs i
-  | i < length (gsGuards gs) || gsHasElse gs =
-      [r | (k, r) <- zip [0 :: Int ..] (gsBranches gs), k /= i]
-  | otherwise = gsBranches gs
-
--- | Every conditional in a module, at whatever depth it sits.
-allGroups :: [Directive] -> [[Directive]]
-allGroups ds = concat [groupsAtLevel l ds | l <- [0 .. deepest]]
-  where
-    deepest = maximum (0 : map dLevel ds)
-
--- | Every group in a module written behind the same directives as this one.
-sameGuard :: GroupSpec -> [Directive] -> [GroupSpec]
-sameGuard gs ds =
-  [g | grp <- allGroups ds, Just g <- [groupSpec grp], gsGuards g == gsGuards gs]
-
--- | The directives at one level of nesting, split into the groups they make
--- up.
-groupsAtLevel :: Int -> [Directive] -> [[Directive]]
-groupsAtLevel level = split . filter ((== level) . dLevel)
-  where
-    split ds = case break ((== "endif") . dKeyword) ds of
-      (_, []) -> []
-      (before', end : rest) -> (before' <> [end]) : split rest
-
--- | One preprocessor directive, and how deep in the conditionals it sits.
-data Directive = Directive
-  { dLine :: !Int,
-    dKeyword :: !Text,
-    dGuard :: !Guard,
-    dLevel :: !Int
-  }
-  deriving (Eq, Show)
-
--- | Every conditional directive in a module, or 'Nothing' if its
--- conditionals do not make sense.
-scanDirectives :: Text -> Maybe [Directive]
-scanDirectives source = go 0 (zip [1 ..] (T.lines source))
-  where
-    go 0 [] = Just []
-    go _ [] = Nothing -- the lines ran out inside a conditional
-    go level ((n, l) : ls)
-      | not (isDirective l) = go level ls
-      | keyword `elem` opensGroup = at level (level + 1)
-      | keyword `elem` continuesGroup, level > 0 = at (level - 1) level
-      | keyword == "endif", level > 0 = at (level - 1) (level - 1)
-      | keyword `notElem` conditionalKeywords = go level ls
-      | otherwise = Nothing
-      where
-        at here next =
-          (Directive {dLine = n, dKeyword = keyword, dGuard = Guard (T.stripEnd body), dLevel = here} :)
-            <$> go next ls
-        keyword = T.takeWhile isAsciiLower body
-        body = T.stripStart (T.drop 1 (T.stripStart l))
-
--- | Every directive the C preprocessor takes, whether or not this module
--- can do anything with the ones it names.
-directiveKeywords :: [Text]
-directiveKeywords = conditionalKeywords <> opaqueKeywords
-
--- | The directives that ask a question, and so split a module in two.
-conditionalKeywords :: [Text]
-conditionalKeywords = opensGroup <> continuesGroup <> ["endif"]
-
--- | The keywords that open a group, continue one, and close one.
-opensGroup, continuesGroup :: [Text]
-opensGroup = ["if", "ifdef", "ifndef"]
-continuesGroup = ["elif", "elifdef", "elifndef", "else"]
-
-opaqueKeywords :: [Text]
-opaqueKeywords =
-  ["define", "undef", "include", "line", "error", "warning", "pragma"]
-
--- | Does this line begin with a preprocessor directive?
---
--- A hash at the start of a line is not enough to say so, which is worth
--- being careful about: the closing @#-}@ of a pragma written across several
--- lines begins one too, and that is Haskell. What settles it is the word
--- after the hash.
-isDirective :: Text -> Bool
-isDirective l = case T.stripPrefix "#" (T.stripStart l) of
-  Just rest -> T.takeWhile isAsciiLower (T.stripStart rest) `elem` directiveKeywords
-  Nothing -> False
-
--- | Directives that do not introduce configurations.
-opaqueDirectives :: Text -> [Opaque]
-opaqueDirectives source =
-  [ Opaque
-      { opLine = n,
-        opLastLine = end n,
-        opText = T.stripEnd (T.intercalate "\n" (body : map lineOf below))
-      }
-  | (n, l) <- numbered,
-    isDirective l,
-    let body = T.stripStart (T.drop 1 (T.stripStart l)),
-    T.takeWhile isAsciiLower body `elem` opaqueKeywords,
-    let below = continuing n
-  ]
-  where
-    numbered = zip [1 ..] (T.lines source)
-    byLine = Map.fromList numbered
-    lineOf n = Map.findWithDefault "" n byLine
-    end n = last (n : continuing n)
-    continuing n
-      | maybe False runsOn (Map.lookup n byLine) = n + 1 : continuing (n + 1)
-      | otherwise = []
-    runsOn = T.isSuffixOf "\\" . T.stripEnd
-
--- | Did the author leave an empty line anywhere between these two lines?
-gapWritten :: Lines -> Int -> Int -> Bool
-gapWritten written from to = any (`blankAt` written) [from .. to]
-
--- | One directive that asks nothing, and what is known about it.
-data Opaque = Opaque
-  { -- | The line it was written on.
-    opLine :: Int,
-    -- | The last line it takes up, which is 'opLine' unless it was written
-    -- across several with backslashes.
-    opLastLine :: Int,
-    -- | What follows its hash, kept whole and never read.
-    opText :: Text
-  }
-  deriving (Eq, Show)
-
--- | The lines a directive was written on, as a span, which is what the
--- document carries so that two directives written the same can be told
--- apart.
-opSpan :: Opaque -> Span
-opSpan d = mkSpan (opLine d, 1) (opLastLine d, 1)
-
--- | Did the author leave an empty line under this directive?
---
--- Not one that stands at the end of a branch: see 'closesABranch'.
-gapUnder :: Lines -> Opaque -> Bool
-gapUnder written d =
-  (blankAt n written || blankBelow n written) && not (closesABranch n written)
-  where
-    n = opLastLine d
-
--- | Replace the given line ranges with empty lines, keeping every other line
--- where it was.
-blanking :: [(Int, Int)] -> Text -> Text
-blanking ranges source =
-  T.unlines
-    [ if any (holds n) ranges then "" else l
-    | (n, l) <- zip [1 ..] (T.lines source)
-    ]
-  where
-    holds n (from, to) = from <= n && n <= to
-
--- | One configuration for every branch of every conditional, and no more.
---
--- 'leaves' takes every combination of answers, of which there are as many as
--- the branches multiplied together: a module of moderate size can have tens
--- of thousands, and a reader that has to look at all of them cannot look at
--- it at all. These are the sum instead of the product—one configuration per
--- branch, with every other conditional taking its first—which is few enough
--- to read even for the worst of them.
---
--- What that buys is coverage rather than completeness: every line of the
--- module appears in at least one of these, so nothing written under a
--- directive goes unseen. What it does not buy is every /combination/ of
--- lines, so this answers questions asked of the parts and not of the whole.
--- Conditionals asking the same question are answered the same way
--- throughout, as they are everywhere else here, so no configuration
--- contradicts itself.
-branchLeaves :: Text -> Either CppError [Text]
-branchLeaves source = case scanDirectives source of
-  Nothing -> Left (UnhandledDirective (unhandledIn source))
-  Just ds -> case nesting 0 ds of
-    Nothing -> Left UnsplittableConditional
-    Just forest -> traverse resolved (distinct (map configuration (assignments forest)))
-  where
-    reachable = go Map.empty
-      where
-        go asked ns =
-          concat
-            [ (asked, gs)
-                : concat
-                  [ go (Map.insert (gsGuards gs) i asked) nested
-                  | (i, nested) <- zip [0 ..] branches
-                  ]
-            | Nest gs branches <- ns
-            ]
-    assignments forest =
-      Map.empty
-        : [ Map.insert (gsGuards gs) i asked
-          | (asked, gs) <- reachable forest,
-            i <- [0 .. gsCount gs - 1]
-          ]
-    configuration answers =
-      blanking
-        [ r
-        | grp <- allGroups (concat (maybeToList (scanDirectives source))),
-          Just gs <- [groupSpec grp],
-          r <- blankingFor gs (Map.findWithDefault 0 (gsGuards gs) answers)
-        ]
-        source
-
-    distinct = Map.elems . Map.fromList . map (\t -> (t, t))
-
--- | Every configuration of a module, with every conditional resolved.
---
--- What 'formatWithCpp' formats, without the formatting. This is what the
--- @forall cfg@ quantifies over, and keeping it apart from the building is
--- what lets a test ask whether the building agreed with it.
-leaves :: Text -> Either CppError [Text]
-leaves = fmap (map snd) . answeredLeaves
-
--- | The configurations reached by varying one conditional at a time.
-linearLeaves :: Text -> Either CppError [Text]
-linearLeaves = fmap (map snd) . answeredLinearLeaves
-
--- | How many configurations a module has, without building any of them.
-countLeaves :: Text -> Either CppError Integer
-countLeaves source = case scanDirectives source of
-  Nothing -> Left (UnhandledDirective (unhandledIn source))
-  Just ds -> case nesting 0 ds of
-    Nothing -> Left UnsplittableConditional
-    Just forest ->
-      Right (sum [across answers forest | answers <- combinations (afforded forest)])
-  where
-    across answers = product . map (one answers)
-    one answers (Nest gs nested) = case lookup (gsGuards gs) answers of
-      Just i -> across answers (branch nested i)
-      Nothing -> sum [across answers (branch nested i) | i <- [0 .. gsCount gs - 1]]
-    branch nested i = concat (take 1 (drop i nested))
-    combinations = traverse (\(g, k) -> [(g, i) | i <- [0 .. k - 1]])
-    afforded forest = go 1 (repeated forest)
-      where
-        go _ [] = []
-        go n ((g, k) : rest)
-          | n * toInteger k <= guardsToTie = (g, k) : go (n * toInteger k) rest
-          | otherwise = []
-
--- | A module's conditionals as a forest: each group, with the groups nested
--- inside each of its branches.
-data Nest = Nest GroupSpec [[Nest]]
-
--- | Read the forest off the directives, refusing a group 'groupSpec' refuses.
-nesting :: Int -> [Directive] -> Maybe [Nest]
-nesting level ds = traverse one (groupsAtLevel level ds)
-  where
-    one group = do
-      gs <- groupSpec group
-      Nest gs <$> traverse (\r -> nesting (level + 1) (inside r ds)) (gsBranches gs)
-    inside (from, to) = filter (\d -> from <= dLine d && dLine d <= to)
-
--- | The guards a module asks more than once, and how many answers each has.
---
--- In the order they were written, and each named once however often it
--- appears.
-repeated :: [Nest] -> [([Guard], Int)]
-repeated forest = distinct Map.empty [q | q@(g, _) <- asked forest, twice g]
-  where
-    asked ns = concat [(gsGuards gs, gsCount gs) : asked (concat nested) | Nest gs nested <- ns]
-    times = Map.fromListWith (+) [(g, 1 :: Int) | (g, _) <- asked forest]
-    twice g = Map.findWithDefault 0 g times >= 2
-
-    distinct _ [] = []
-    distinct seen (q@(g, _) : rest)
-      | Map.member g seen = distinct seen rest
-      | otherwise = q : distinct (Map.insert g () seen) rest
-
--- | How many combinations of answers 'countLeaves' will enumerate.
-guardsToTie :: Integer
-guardsToTie = 4096
-
--- | Which branch every question was answered with to reach a configuration.
-type Answers = Map [Guard] Int
-
--- | Every configuration, and the answers that reach it.
-answeredLeaves :: Text -> Either CppError [(Answers, Text)]
-answeredLeaves = go Map.empty
-  where
-    go answers source = case configurations source of
-      Nothing -> (\t -> [(answers, t)]) <$> resolved source
-      Just c ->
-        concat
-          <$> traverse
-            (\(i, t) -> go (Map.insert (cfgGuards c) i answers) t)
-            (zip [0 ..] (cfgTexts c))
-
--- | The same, labelled by the answers that reach each one, and for the same
--- reason as 'answeredLeaves'.
-answeredLinearLeaves :: Text -> Either CppError [(Answers, Text)]
-answeredLinearLeaves = go Map.empty
-  where
-    go answers source = case configurations source of
-      Nothing -> (\t -> [(answers, t)]) <$> resolved source
-      Just c -> case zip [0 ..] (cfgTexts c) of
-        [] -> Right []
-        (i, first) : rest ->
-          (<>)
-            <$> go (Map.insert (cfgGuards c) i answers) first
-            <*> traverse (held answers (cfgGuards c)) rest
-      where
-        held before gs (i, t) = answeredBaseline (Map.insert gs i before) t
-
--- | The configuration in which every question still to be asked takes its
--- first branch, and the answers that gives.
-answeredBaseline :: Answers -> Text -> Either CppError (Answers, Text)
-answeredBaseline answers source = case configurations source of
-  Nothing -> (answers,) <$> resolved source
-  Just c -> case cfgTexts c of
-    [] -> Right (answers, source)
-    t : _ -> answeredBaseline (Map.insert (cfgGuards c) 0 answers) t
-
--- | A module with no conditionals left in it, or the reason it is not one.
-resolved :: Text -> Either CppError Text
-resolved source
-  | any isDirective (T.lines left) =
-      Left (UnhandledDirective (unhandledIn left))
-  | otherwise = Right left
-  where
-    left = withoutOpaque source
 
 ----------------------------------------------------------------------------
 -- Diagnostics
diff --git a/src/Tilia/Cpp/Directives.hs b/src/Tilia/Cpp/Directives.hs
new file mode 100644
--- /dev/null
+++ b/src/Tilia/Cpp/Directives.hs
@@ -0,0 +1,636 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Reading the preprocessor directives of a module, and blanking lines.
+module Tilia.Cpp.Directives
+  ( -- * Reading a module
+    usesCpp,
+    blankCpp,
+    withoutRuledOut,
+    withoutOpaque,
+    CppError (..),
+    describeCppError,
+    unhandledIn,
+
+    -- * Splitting
+    Guard (..),
+    Configurations (..),
+    configurations,
+    Varied (..),
+    untouched,
+    leaves,
+    branchLeaves,
+    correspondingBranches,
+    unconditionalErrors,
+    linearLeaves,
+    countLeaves,
+    answeredLeaves,
+    answeredLinearLeaves,
+    resolved,
+
+    -- * The directives themselves
+    Directive (..),
+    scanDirectives,
+    isDirective,
+    GroupSpec (..),
+    groupSpec,
+    gsCount,
+    allGroups,
+    groupsAtLevel,
+    blanking,
+    blankingFor,
+    droppedFor,
+    Opaque (..),
+    opaqueDirectives,
+    opSpan,
+    gapUnder,
+    gapWritten,
+  )
+where
+
+import Data.Char (isSpace)
+import Data.List (unsnoc)
+import Data.Map.Strict (Map)
+import Data.Map.Strict qualified as Map
+import Data.Maybe (fromMaybe, listToMaybe, maybeToList)
+import Data.Text (Text)
+import Data.Text qualified as T
+import GHC.LanguageExtensions.Type (Extension (..))
+import Tilia.Cpp.Macros (Macros, guardHolds)
+import Tilia.Parser (ParseError, describeParseError)
+import Tilia.Source
+  ( Lines,
+    blankAt,
+    blankBelow,
+    closesABranch,
+    directiveOnLine,
+  )
+import Tilia.Span
+  ( Span,
+    mkSpan,
+    spanEndLine,
+    spanStartLine,
+  )
+
+----------------------------------------------------------------------------
+-- Reading a module
+
+-- | Is CPP enabled and there is at least one CPP directive present?
+usesCpp :: [Extension] -> Text -> Bool
+usesCpp extensions source =
+  Cpp `elem` extensions && any isDirective (T.lines source)
+
+-- | Blank out the directive lines, keeping every branch.
+blankCpp :: Text -> Text
+blankCpp = T.unlines . go False . T.lines
+  where
+    go _ [] = []
+    go continuing (l : ls)
+      | continuing || isDirective l = "" : go (runsOn l) ls
+      | otherwise = l : go False ls
+    runsOn = T.isSuffixOf "\\" . T.stripEnd
+
+-- | Blank out every branch the macros rule out, and the conditionals that
+-- ask about them.
+withoutRuledOut :: Macros -> Text -> Text
+withoutRuledOut macros source = case scanDirectives source of
+  Nothing -> source
+  Just ds ->
+    blanking
+      [ range
+      | group <- allGroups ds,
+        Just gs <- [groupSpec group],
+        Just taken <- [branchTaken macros gs],
+        range <- blankingFor gs taken
+      ]
+      source
+
+-- | Which branch of a conditional the macros settle on.
+branchTaken :: Macros -> GroupSpec -> Maybe Int
+branchTaken macros = go 0 . gsGuards
+  where
+    go i = \case
+      [] -> Just i
+      g : rest -> case guardHolds macros (guardText g) of
+        Just True -> Just i
+        Just False -> go (i + 1) rest
+        Nothing -> Nothing
+
+-- | A module with the opaque directives blanked out.
+withoutOpaque :: Text -> Text
+withoutOpaque source =
+  blanking [(opLine d, opLastLine d) | d <- opaqueDirectives source] source
+
+-- | Why a module using the preprocessor could not be formatted.
+data CppError
+  = -- | A directive we do not handle, and its keyword.
+    UnhandledDirective Text
+  | -- | Conditionals that do not nest, or an @#else@ out of place.
+    UnsplittableConditional
+  | -- | More configurations than 'configurationBudget' allows.
+    TooManyConfigurations
+  | -- | A configuration the parser rejected, and which one it was.
+    ConfigurationNotParsed [([Guard], Int)] ParseError
+  | -- | A directive whose place in the document could not be found.
+    DirectiveUnplaceable [([Guard], Int)] Text
+  | -- | A directive written inside a quasiquote or other verbatim text.
+    DirectiveInQuotedText [([Guard], Int)] Text
+
+-- | Say what went wrong, in one line. The edge of the system.
+describeCppError :: CppError -> Text
+describeCppError = \case
+  UnhandledDirective k -> "a #" <> k <> " directive, which we do not handle"
+  UnsplittableConditional -> "conditionals that do not nest, or an #else out of place"
+  TooManyConfigurations -> "too many configurations to format"
+  ConfigurationNotParsed c e -> describeParseError e <> inConfiguration c
+  DirectiveUnplaceable c k -> "nowhere to put the #" <> k <> inConfiguration c
+  DirectiveInQuotedText c k ->
+    "a #" <> k <> " inside something quoted verbatim" <> inConfiguration c
+
+-- | Which configuration, in words. Empty where there is only one.
+inConfiguration :: [([Guard], Int)] -> Text
+inConfiguration [] = ""
+inConfiguration answers =
+  ", in the configuration taking " <> T.intercalate ", then " (fmap said answers)
+  where
+    said (guards, i) = case (drop i guards, guards) of
+      (g : _, _) -> "#" <> guardText g
+      ([], g : _) -> "no branch of #" <> guardText g
+      ([], []) -> "no branch"
+
+-- | The keyword of the first directive here that we do not handle.
+unhandledIn :: Text -> Text
+unhandledIn source =
+  case [ k
+       | l <- T.lines source,
+         Just (k, _) <- [directiveOnLine l],
+         k `elem` directiveKeywords
+       ] of
+    k : _ -> k
+    [] -> ""
+
+----------------------------------------------------------------------------
+-- Splitting
+
+-- | One conditional directive, as written after its hash.
+newtype Guard = Guard{guardText :: Text}
+  deriving (Eq, Ord, Show)
+
+-- | What one conditional splits a module into.
+data Configurations = Configurations
+  { -- | The directives: the @#if@ of the group, and then one per @#elif@.
+    cfgGuards :: [Guard],
+    -- | One module text per branch, in the same order as the directives,
+    -- and then one more for the @#else@.
+    cfgTexts :: [Text],
+    -- | What each of those branches leaves out, in the same order.
+    cfgDropped :: [[(Int, Int)]],
+    -- | From each tied group's @#if@ to its @#endif@, inclusive.
+    cfgWholes :: Varied
+  }
+  deriving (Eq, Show)
+
+-- | Split a module on its first outermost conditional, and on every other
+-- one written behind the same directives, wherever in the module it sits.
+configurations :: Text -> Maybe Configurations
+configurations source = do
+  ds <- scanDirectives source
+  gs <- groupSpec =<< listToMaybe (groupsAtLevel 0 ds)
+  let tied = sameGuard gs ds
+  pure
+    Configurations
+      { cfgGuards = gsGuards gs,
+        cfgTexts =
+          [ blanking (concatMap (`blankingFor` i) tied) source
+          | i <- [0 .. gsCount gs - 1]
+          ],
+        cfgDropped =
+          [concatMap (`droppedFor` i) tied | i <- [0 .. gsCount gs - 1]],
+        cfgWholes = Varied (fmap gsWhole tied)
+      }
+
+-- | Every group in a module written behind the same directives as this one.
+sameGuard :: GroupSpec -> [Directive] -> [GroupSpec]
+sameGuard gs ds =
+  [ g
+  | grp <- allGroups ds,
+    Just g <- [groupSpec grp],
+    gsGuards g == gsGuards gs
+  ]
+
+-- | The lines one conditional could have printed differently.
+newtype Varied = Varied{variedLines :: [(Int, Int)]}
+  deriving (Eq, Show)
+
+-- | Was this region printed from lines the conditional left alone?
+untouched :: Varied -> Span -> Bool
+untouched (Varied ranges) s = not (any reaches ranges)
+  where
+    reaches (from, to) = spanStartLine s <= to && from <= spanEndLine s
+
+-- | Every configuration of a module, with every conditional resolved.
+leaves :: Text -> Either CppError [Text]
+leaves = fmap (fmap snd) . answeredLeaves
+
+-- | One configuration for every branch of every conditional, and no more.
+branchLeaves :: Text -> Either CppError [Text]
+branchLeaves source = case scanDirectives source of
+  Nothing -> Left (UnhandledDirective (unhandledIn source))
+  Just ds -> case nesting 0 ds of
+    Nothing -> Left UnsplittableConditional
+    Just forest ->
+      traverse
+        resolved
+        ( filter
+            (null . unconditionalErrors)
+            (distinct (fmap configuration (assignments forest)))
+        )
+  where
+    reachable = go Map.empty
+      where
+        go asked ns =
+          concat
+            [ (asked, gs)
+                : concat
+                  [ go (Map.insert (gsGuards gs) i asked) nested
+                  | (i, nested) <- zip [0 ..] branches
+                  ]
+            | Nest gs branches <- ns
+            ]
+    assignments forest =
+      Map.empty
+        : [ Map.insert (gsGuards gs) i asked
+          | (asked, gs) <- reachable forest,
+            i <- [0 .. gsCount gs - 1]
+          ]
+    configuration answers =
+      blanking
+        [ r
+        | grp <- allGroups (concat (maybeToList (scanDirectives source))),
+          Just gs <- [groupSpec grp],
+          r <- blankingFor gs (Map.findWithDefault 0 (gsGuards gs) answers)
+        ]
+        source
+    distinct = Map.elems . Map.fromList . fmap (\t -> (t, t))
+
+-- | A module's conditionals as a forest: each group, with the groups nested
+-- inside each of its branches.
+data Nest = Nest GroupSpec [[Nest]]
+
+-- | Read the forest off the directives, refusing a group 'groupSpec' refuses.
+nesting :: Int -> [Directive] -> Maybe [Nest]
+nesting level ds = traverse one (groupsAtLevel level ds)
+  where
+    one group = do
+      gs <- groupSpec group
+      Nest gs <$> traverse (\r -> nesting (level + 1) (inside r ds)) (gsBranches gs)
+    inside (from, to) = filter (\d -> from <= dLine d && dLine d <= to)
+
+-- | Read both spellings under the same CPP choices.
+--
+-- Sorting or deduplicating the resulting source text separately loses the
+-- association with the guards: formatting can change that order or make two
+-- formerly different strings identical. Cover every branch of either
+-- spelling, including its ancestors. 'Nothing' denotes a configuration
+-- deliberately rejected by @#error@.
+correspondingBranches ::
+  -- | Before.
+  Text ->
+  -- | After.
+  Text ->
+  Either CppError [(Maybe Text, Maybe Text)]
+correspondingBranches before after = do
+  left <- forest before
+  right <- forest after
+  let defaults = Map.fromList [(gsGuards gs, 0) | (_, gs) <- reachable Map.empty (left <> right)]
+      choices = Map.keys (Map.fromList [(Map.union a defaults, ()) | a <- assignments left <> assignments right])
+  traverse (\a -> (,) <$> reading before a <*> reading after a) choices
+  where
+    forest source = do
+      ds <- maybe (Left (UnhandledDirective (unhandledIn source))) Right (scanDirectives source)
+      maybe (Left UnsplittableConditional) Right (nesting 0 ds)
+    reachable :: Answers -> [Nest] -> [(Answers, GroupSpec)]
+    reachable asked ns =
+      concat
+        [ (asked, gs)
+            : concat
+              [ reachable (Map.insert (gsGuards gs) i asked) nested
+              | (i, nested) <- zip [0 ..] branches
+              ]
+        | Nest gs branches <- ns
+        ]
+    assignments nodes =
+      Map.empty
+        : [ Map.insert (gsGuards gs) i asked
+          | (asked, gs) <- reachable Map.empty nodes,
+            i <- [0 .. gsCount gs - 1]
+          ]
+    reading source answers =
+      let selected =
+            blanking
+              [ r
+              | ds <- maybeToList (scanDirectives source),
+                grp <- allGroups ds,
+                Just gs <- [groupSpec grp],
+                r <- blankingFor gs (Map.findWithDefault 0 (gsGuards gs) answers)
+              ]
+              source
+       in if null (unconditionalErrors selected)
+            then Just <$> resolved selected
+            else Right Nothing
+
+-- | An unconditional @#error@ means this configuration has no Haskell
+-- program to parse. Conditional errors are only considered after choosing a
+-- branch.
+unconditionalErrors :: Text -> [Opaque]
+unconditionalErrors source =
+  [ d
+  | d <- opaqueDirectives source,
+    T.takeWhile (not . isSpace) (opText d) == "error",
+    not (any (encloses (opLine d)) groups)
+  ]
+  where
+    groups = [gsWhole g | ds <- maybeToList (scanDirectives source), grp <- allGroups ds, Just g <- [groupSpec grp]]
+    encloses n (from, to) = from < n && n < to
+
+-- | The configurations reached by varying one conditional at a time.
+linearLeaves :: Text -> Either CppError [Text]
+linearLeaves = fmap (fmap snd) . answeredLinearLeaves
+
+-- | How many configurations a module has, without building any of them.
+countLeaves :: Text -> Either CppError Integer
+countLeaves source = case scanDirectives source of
+  Nothing -> Left (UnhandledDirective (unhandledIn source))
+  Just ds -> case nesting 0 ds of
+    Nothing -> Left UnsplittableConditional
+    Just forest ->
+      Right (sum [across answers forest | answers <- combinations (afforded forest)])
+  where
+    across answers = product . fmap (one answers)
+    one answers (Nest gs nested) = case lookup (gsGuards gs) answers of
+      Just i -> across answers (branch nested i)
+      Nothing -> sum [across answers (branch nested i) | i <- [0 .. gsCount gs - 1]]
+    branch nested i = concat (take 1 (drop i nested))
+    combinations = traverse (\(g, k) -> [(g, i) | i <- [0 .. k - 1]])
+    afforded forest = go 1 (repeated forest)
+      where
+        go _ [] = []
+        go n ((g, k) : rest)
+          | n * toInteger k <= guardsToTie = (g, k) : go (n * toInteger k) rest
+          | otherwise = []
+
+-- | The guards a module asks more than once, and how many answers each has.
+repeated :: [Nest] -> [([Guard], Int)]
+repeated forest = distinct Map.empty [q | q@(g, _) <- asked forest, twice g]
+  where
+    asked ns = concat [(gsGuards gs, gsCount gs) : asked (concat nested) | Nest gs nested <- ns]
+    times = Map.fromListWith (+) [(g, 1 :: Int) | (g, _) <- asked forest]
+    twice g = Map.findWithDefault 0 g times >= 2
+
+    distinct _ [] = []
+    distinct seen (q@(g, _) : rest)
+      | Map.member g seen = distinct seen rest
+      | otherwise = q : distinct (Map.insert g () seen) rest
+
+-- | How many combinations of answers 'countLeaves' will enumerate.
+guardsToTie :: Integer
+guardsToTie = 4096
+
+-- | Every configuration, and the answers that reach it.
+answeredLeaves :: Text -> Either CppError [(Answers, Text)]
+answeredLeaves = go Map.empty
+  where
+    go answers source = case configurations source of
+      Nothing | not (null (unconditionalErrors source)) -> Right []
+      Nothing -> (\t -> [(answers, t)]) <$> resolved source
+      Just c ->
+        concat
+          <$> traverse
+            (\(i, t) -> go (Map.insert (cfgGuards c) i answers) t)
+            (zip [0 ..] (cfgTexts c))
+
+-- | Which branch every question was answered with to reach a configuration.
+type Answers = Map [Guard] Int
+
+-- | The same, labelled by the answers that reach each one, and for the same
+-- reason as 'answeredLeaves'.
+answeredLinearLeaves :: Text -> Either CppError [(Answers, Text)]
+answeredLinearLeaves = go Map.empty
+  where
+    go answers source = case configurations source of
+      Nothing -> (\t -> [(answers, t)]) <$> resolved source
+      Just c -> case zip [0 ..] (cfgTexts c) of
+        [] -> Right []
+        (i, first) : rest ->
+          (<>)
+            <$> go (Map.insert (cfgGuards c) i answers) first
+            <*> traverse (held answers (cfgGuards c)) rest
+      where
+        held before gs (i, t) = answeredBaseline (Map.insert gs i before) t
+
+-- | The configuration in which every question still to be asked takes its
+-- first branch, and the answers that gives.
+answeredBaseline :: Answers -> Text -> Either CppError (Answers, Text)
+answeredBaseline answers source = case configurations source of
+  Nothing -> (answers,) <$> resolved source
+  Just c -> case cfgTexts c of
+    [] -> Right (answers, source)
+    t : _ -> answeredBaseline (Map.insert (cfgGuards c) 0 answers) t
+
+-- | A module with no conditionals left in it, or the reason it is not one.
+resolved :: Text -> Either CppError Text
+resolved source
+  | any isDirective (T.lines left) =
+      Left (UnhandledDirective (unhandledIn left))
+  | otherwise = Right left
+  where
+    left = withoutOpaque source
+
+----------------------------------------------------------------------------
+-- The directives themselves
+
+-- | One preprocessor directive, and how deep in the conditionals it sits.
+data Directive = Directive
+  { dLine :: !Int,
+    dKeyword :: !Text,
+    dGuard :: !Guard,
+    dLevel :: !Int
+  }
+  deriving (Eq, Show)
+
+-- | Every conditional directive in a module, or 'Nothing' if its
+-- conditionals do not make sense.
+scanDirectives :: Text -> Maybe [Directive]
+scanDirectives source = go 0 (zip [1 ..] (T.lines source))
+  where
+    go 0 [] = Just []
+    go _ [] = Nothing -- the lines ran out inside a conditional
+    go level ((n, l) : ls)
+      | Nothing <- directiveOnLine l = go level ls
+      | keyword `elem` opensGroup = at level (level + 1)
+      | keyword `elem` continuesGroup, level > 0 = at (level - 1) level
+      | keyword == "endif", level > 0 = at (level - 1) (level - 1)
+      | keyword `notElem` conditionalKeywords = go level ls
+      | otherwise = Nothing
+      where
+        at here next =
+          ( Directive
+              { dLine = n,
+                dKeyword = keyword,
+                dGuard = Guard (T.stripEnd body),
+                dLevel = here
+              }
+              :
+          )
+            <$> go next ls
+        (keyword, body) = fromMaybe ("", "") (directiveOnLine l)
+
+-- | The directives that ask a question, and so split a module in two.
+conditionalKeywords :: [Text]
+conditionalKeywords = opensGroup <> continuesGroup <> ["endif"]
+
+-- | The keywords that open a group or continue one.
+opensGroup, continuesGroup :: [Text]
+opensGroup = ["if", "ifdef", "ifndef"]
+continuesGroup = ["elif", "elifdef", "elifndef", "else"]
+
+-- | Does this line begin with a preprocessor directive?
+isDirective :: Text -> Bool
+isDirective l = case directiveOnLine l of
+  Just (keyword, _) -> keyword `elem` directiveKeywords
+  Nothing -> False
+
+-- | Every directive the C preprocessor takes, whether or not this module
+-- can do anything with the ones it names.
+directiveKeywords :: [Text]
+directiveKeywords = conditionalKeywords <> opaqueKeywords
+
+-- | The unconditional directives that do not split the source code.
+opaqueKeywords :: [Text]
+opaqueKeywords =
+  ["define", "undef", "include", "line", "error", "warning", "pragma"]
+
+-- | One conditional group, read off the directives that make it up.
+data GroupSpec = GroupSpec
+  { gsGuards :: [Guard],
+    gsHasElse :: Bool,
+    gsOwnLines :: [Int],
+    gsBranches :: [(Int, Int)],
+    gsWhole :: (Int, Int)
+  }
+
+-- | Read a group off its directives, refusing one that is malformed.
+groupSpec :: [Directive] -> Maybe GroupSpec
+groupSpec group = do
+  (separators, end) <- unsnoc group
+  opener <- listToMaybe separators
+  require (dKeyword opener `elem` opensGroup)
+  require (dKeyword end == "endif")
+  require (all ((`elem` continuesGroup) . dKeyword) (drop 1 separators))
+  require (all ((/= "else") . dKeyword) (drop 1 (reverse separators)))
+  pure
+    GroupSpec
+      { gsGuards = [dGuard d | d <- separators, dKeyword d /= "else"],
+        gsHasElse = any ((== "else") . dKeyword) separators,
+        gsOwnLines = fmap dLine group,
+        gsBranches = [(dLine a + 1, dLine b - 1) | (a, b) <- zip group (drop 1 group)],
+        gsWhole = (dLine opener, dLine end)
+      }
+  where
+    require b = if b then Just () else Nothing
+
+-- | How many configurations a group has: one per condition, and one more
+-- for when none of them holds.
+gsCount :: GroupSpec -> Int
+gsCount gs = length (gsGuards gs) + 1
+
+-- | Every conditional in a module, at whatever depth it sits.
+allGroups :: [Directive] -> [[Directive]]
+allGroups ds = concat [groupsAtLevel l ds | l <- [0 .. deepest]]
+  where
+    deepest = maximum (0 : fmap dLevel ds)
+
+-- | The directives at one level of nesting, split into the groups they make
+-- up.
+groupsAtLevel :: Int -> [Directive] -> [[Directive]]
+groupsAtLevel level = split . filter ((== level) . dLevel)
+  where
+    split ds = case break ((== "endif") . dKeyword) ds of
+      (_, []) -> []
+      (before', end : rest) -> (before' <> [end]) : split rest
+
+-- | Replace the given line ranges with empty lines, keeping every other line
+-- where it was.
+blanking :: [(Int, Int)] -> Text -> Text
+blanking ranges source =
+  T.unlines
+    [ if any (holds n) ranges then "" else l
+    | (n, l) <- zip [1 ..] (T.lines source)
+    ]
+  where
+    holds n (from, to) = from <= n && n <= to
+
+-- | The lines to blank so that configuration @i@ of a group is what is left.
+--
+-- The branches this configuration does not take, and the directives
+-- themselves: a directive belongs to no configuration, which is the whole of
+-- what separates this from 'droppedFor'.
+blankingFor :: GroupSpec -> Int -> [(Int, Int)]
+blankingFor gs i = droppedFor gs i <> [(n, n) | n <- gsOwnLines gs]
+
+-- | The lines a configuration of a group is not including.
+droppedFor :: GroupSpec -> Int -> [(Int, Int)]
+droppedFor gs i
+  | i < length (gsGuards gs) || gsHasElse gs =
+      [r | (k, r) <- zip [0 :: Int ..] (gsBranches gs), k /= i]
+  | otherwise = gsBranches gs
+
+-- | One opaque directive and what is known about it.
+data Opaque = Opaque
+  { -- | The line it was written on.
+    opLine :: Int,
+    -- | The last line it takes up, which is 'opLine' unless it was written
+    -- across several with backslashes.
+    opLastLine :: Int,
+    -- | What follows its hash, kept whole and never read.
+    opText :: Text
+  }
+  deriving (Eq, Show)
+
+-- | Directives that do not introduce configurations.
+opaqueDirectives :: Text -> [Opaque]
+opaqueDirectives source =
+  [ Opaque
+      { opLine = n,
+        opLastLine = end n,
+        opText = T.stripEnd (T.intercalate "\n" (body : fmap lineOf below))
+      }
+  | (n, l) <- numbered,
+    Just (keyword, body) <- [directiveOnLine l],
+    keyword `elem` opaqueKeywords,
+    let below = continuing n
+  ]
+  where
+    numbered = zip [1 ..] (T.lines source)
+    byLine = Map.fromList numbered
+    lineOf n = Map.findWithDefault "" n byLine
+    end n = last (n : continuing n)
+    continuing n
+      | maybe False runsOn (Map.lookup n byLine) = n + 1 : continuing (n + 1)
+      | otherwise = []
+    runsOn = T.isSuffixOf "\\" . T.stripEnd
+
+-- | The lines a directive was written on, as a span.
+opSpan :: Opaque -> Span
+opSpan d = mkSpan (opLine d, 1) (opLastLine d, 1)
+
+-- | Did the author leave an empty line under this directive?
+gapUnder :: Lines -> Opaque -> Bool
+gapUnder written d =
+  (blankAt n written || blankBelow n written) && not (closesABranch n written)
+  where
+    n = opLastLine d
+
+-- | Did the author leave an empty line anywhere between these two lines?
+gapWritten :: Lines -> Int -> Int -> Bool
+gapWritten written from to = any (`blankAt` written) [from .. to]
diff --git a/src/Tilia/Cpp/Macros.hs b/src/Tilia/Cpp/Macros.hs
--- a/src/Tilia/Cpp/Macros.hs
+++ b/src/Tilia/Cpp/Macros.hs
@@ -1,11 +1,11 @@
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | The questions a module's conditionals ask that the build plan has
--- already answered.
+-- | Inferences regarding CPP macros that we can make based on the build
+-- plan.
 module Tilia.Cpp.Macros
   ( Macros (..),
-    answerTo,
+    guardHolds,
   )
 where
 
@@ -15,10 +15,10 @@
 import Data.Text (Text)
 import Data.Text qualified as T
 
--- | What the preprocessor would have been told.
+-- | Known macro expansions.
 data Macros = Macros
   { -- | The macros that take a version apart and compare it:
-    -- @MIN_VERSION_containers@ and its like, each under the version the
+    -- @MIN_VERSION_containers@ and the like, each under the version the
     -- plan resolved that package to. @MIN_VERSION_GLASGOW_HASKELL@ is one
     -- of these, under the compiler's four-part version.
     macroVersions :: Map Text [Integer],
@@ -28,16 +28,13 @@
   }
   deriving (Eq, Show)
 
--- | What a conditional's guard comes to, where what is known settles it.
---
--- The text is the whole directive as it was written after its hash, keyword
--- and all, because @#if@ and @#ifdef@ ask about their rest in different
--- ways.
-answerTo :: Macros -> Text -> Maybe Bool
-answerTo macros written = case T.span isNameChar (T.stripStart written) of
+-- | Does a conditional's guard hold, where what is known settles it?
+-- 'Nothing' is no answer rather than a negative one.
+guardHolds :: Macros -> Text -> Maybe Bool
+guardHolds macros written = case T.span isNameChar (T.stripStart written) of
   (keyword, rest) -> case keyword of
-    "if" -> (/= 0) <$> evaluate macros rest
-    "elif" -> (/= 0) <$> evaluate macros rest
+    "if" -> (/= 0) <$> valueOf macros rest
+    "elif" -> (/= 0) <$> valueOf macros rest
     "ifdef" -> nameIsKnown rest
     "elifdef" -> nameIsKnown rest
     "ifndef" -> not <$> nameIsKnown rest
@@ -48,22 +45,49 @@
       Just [Name n] | known macros n -> Just True
       _ -> Nothing
 
--- | Is this a macro whose value we know?
+-- | Is this a macro whose expansion we know?
 known :: Macros -> Text -> Bool
 known macros n =
   Map.member n (macroVersions macros) || Map.member n (macroNumbers macros)
 
-----------------------------------------------------------------------------
--- The expression
-
--- | What an expression came to, where it came to anything.
-evaluate :: Macros -> Text -> Maybe Integer
-evaluate macros written = case tokensOf written of
+-- | What the expression of an @#if@ or @#elif@ evaluates to, if anything.
+valueOf :: Macros -> Text -> Maybe Integer
+valueOf macros written = case tokensOf written of
   Nothing -> Nothing
   Just ts -> case orExpr macros ts of
     Just (value, []) -> value
     _ -> Nothing
 
+-- | One piece of a guard.
+data Token
+  = Name Text
+  | Number Integer
+  | Punct Text
+  deriving (Eq, Show)
+
+-- | Take a guard apart, or refuse it whole.
+tokensOf :: Text -> Maybe [Token]
+tokensOf = go . T.stripStart
+  where
+    go t
+      | T.null t = Just []
+      | Just (c, _) <- T.uncons t,
+        isNameStart c =
+          let (n, rest) = T.span isNameChar t in (Name n :) <$> next rest
+      | Just (c, _) <- T.uncons t,
+        isDigit c =
+          let (digits, rest) = T.span isDigit t
+              rest' = T.dropWhile (`T.elem` "uUlL") rest
+           in case T.uncons rest' of
+                Just (c', _) | isNameChar c' || c' == '.' -> Nothing
+                _ -> (Number (readDigits digits) :) <$> next rest'
+      | Just punct <- firstThat (`T.stripPrefix` t) punctuation =
+          (Punct (T.take (T.length t - T.length punct) t) :) <$> next punct
+      | otherwise = Nothing
+    next = go . T.stripStart
+    firstThat f = foldr (\x acc -> maybe acc Just (f x)) Nothing
+    readDigits = T.foldl' (\n c -> n * 10 + toInteger (fromEnum c - fromEnum '0')) 0
+
 -- | An expression, and what is left of the tokens after it.
 --
 -- The outer 'Maybe' is whether it could be read at all; the inner one is
@@ -152,12 +176,6 @@
         width = max (length held) (length wanted)
         pad v = take width (v <> repeat 0)
 
--- | What an application was given, and what follows its closing bracket.
---
--- Every argument has to be a plain number. One written as an expression is
--- not something to work out—a module that writes one is not asking the
--- question this can answer—but its brackets are still counted through, so
--- that the rest of the guard can be read and go on deciding what it can.
 argumentList :: [Token] -> Maybe (Maybe [Integer], [Token])
 argumentList ts = do
   (inside, rest) <- upToClose (0 :: Int) [] ts
@@ -174,43 +192,6 @@
       [Number n] -> Just [n]
       Number n : Punct "," : rest -> (n :) <$> numbersOf rest
       _ -> Nothing
-
-----------------------------------------------------------------------------
--- The tokens
-
--- | One piece of a guard.
-data Token
-  = Name Text
-  | Number Integer
-  | Punct Text
-  deriving (Eq, Show)
-
--- | Take a guard apart, or refuse it whole.
---
--- Refusing is not a failure. A guard with arithmetic in it, or a character
--- literal, or a hexadecimal constant, is one this does not read, and a
--- guard it does not read is a question left open.
-tokensOf :: Text -> Maybe [Token]
-tokensOf = go . T.stripStart
-  where
-    go t
-      | T.null t = Just []
-      | Just (c, _) <- T.uncons t,
-        isNameStart c =
-          let (n, rest) = T.span isNameChar t in (Name n :) <$> next rest
-      | Just (c, _) <- T.uncons t,
-        isDigit c =
-          let (digits, rest) = T.span isDigit t
-              rest' = T.dropWhile (`T.elem` "uUlL") rest
-           in case T.uncons rest' of
-                Just (c', _) | isNameChar c' || c' == '.' -> Nothing
-                _ -> (Number (readDigits digits) :) <$> next rest'
-      | Just punct <- firstThat (`T.stripPrefix` t) punctuation =
-          (Punct (T.take (T.length t - T.length punct) t) :) <$> next punct
-      | otherwise = Nothing
-    next = go . T.stripStart
-    firstThat f = foldr (\x acc -> maybe acc Just (f x)) Nothing
-    readDigits = T.foldl' (\n c -> n * 10 + toInteger (fromEnum c - fromEnum '0')) 0
 
 -- | The punctuation of the expressions we read, longest first so that @<=@
 -- is never taken for @<@.
diff --git a/src/Tilia/Diff.hs b/src/Tilia/Diff.hs
--- a/src/Tilia/Diff.hs
+++ b/src/Tilia/Diff.hs
@@ -21,14 +21,14 @@
 data Mark = Context | Removed | Added
   deriving (Eq)
 
--- | A unified diff of two texts, cut short once it has said enough.
+-- | A unified diff of two texts.
 diff ::
   Palette ->
-  -- | What to call the two sides
+  -- | What to call the two sides.
   (Text, Text) ->
-  -- | Before
+  -- | Before.
   Text ->
-  -- | After
+  -- | After.
   Text ->
   Text
 diff palette = unified palette (Just roomFor) []
@@ -37,11 +37,11 @@
 -- headed the way @git diff@ heads one.
 diffInFull ::
   Palette ->
-  -- | The file, named as it was given on the command line
+  -- | The file, named as it was given on the command line.
   FilePath ->
-  -- | What is in it
+  -- | What is in it.
   Text ->
-  -- | What would be
+  -- | What would be.
   Text ->
   Text
 diffInFull palette path =
@@ -54,17 +54,18 @@
     before = "a/" <> T.pack path
     after = "b/" <> T.pack path
 
+-- | A unified diff, with whatever heading and limit the caller wants.
 unified ::
   Palette ->
-  -- | How many lines are worth printing, where there is a limit at all
+  -- | How many lines are worth printing, where there is a limit at all.
   Maybe Int ->
-  -- | Whatever goes above the two file names
+  -- | Whatever goes above the two file names.
   [Text] ->
-  -- | What to call the two sides
+  -- | What to call the two sides.
   (Text, Text) ->
-  -- | Before
+  -- | Before.
   Text ->
-  -- | After
+  -- | After.
   Text ->
   Text
 unified palette limit above (beforeName, afterName) before after
@@ -91,7 +92,7 @@
 
     body = concatMap render hunks
 
-    render range = hunkHeading range : map line (slice range)
+    render range = hunkHeading range : fmap line (slice range)
 
     hunkHeading range =
       paint palette Meta $
@@ -121,7 +122,7 @@
     changed = [i | (i, Line m _ _ _) <- zip [0 ..] lines', m /= Context]
     total = length lines'
     lines' = tag (D.getGroupedDiff (split before) (split after))
-    split = map withoutReturn . T.splitOn "\n"
+    split = fmap withoutReturn . T.splitOn "\n"
     withoutReturn l = fromMaybe l (T.stripSuffix "\r" l)
 
 -- | How many unchanged lines to show either side of a change.
diff --git a/src/Tilia/Doc.hs b/src/Tilia/Doc.hs
--- a/src/Tilia/Doc.hs
+++ b/src/Tilia/Doc.hs
@@ -1,9 +1,6 @@
 -- | Turning a printed document into source text.
 module Tilia.Doc
-  ( -- * Documents
-    Doc,
-
-    -- * Rendering
+  ( Doc,
     RenderOptions (..),
     defaultRenderOptions,
     printDoc,
diff --git a/src/Tilia/Doc/Body.hs b/src/Tilia/Doc/Body.hs
--- a/src/Tilia/Doc/Body.hs
+++ b/src/Tilia/Doc/Body.hs
@@ -1,4 +1,4 @@
--- | Constructs that can stand as the body of an enclosing one.
+-- | Something that can appear as the body of an enclosing construct.
 module Tilia.Doc.Body
   ( Body (..),
     attachBody,
@@ -16,9 +16,5 @@
   bodyPlacement :: a -> Placement
 
 -- | Print a body and join it to whatever precedes it.
---
--- This is the whole of what an enclosing construct needs, which is why it
--- is worth having: a caller that reaches for 'printBody' and
--- 'bodyPlacement' separately is about to reimplement it.
 attachBody :: (Body a) => a -> Doc
 attachBody x = attach (bodyPlacement x) (printBody x)
diff --git a/src/Tilia/Doc/Combinators.hs b/src/Tilia/Doc/Combinators.hs
--- a/src/Tilia/Doc/Combinators.hs
+++ b/src/Tilia/Doc/Combinators.hs
@@ -13,7 +13,8 @@
     breakOrNothing,
     hardBreak,
     blankLine,
-    Resume (..),
+    LineStart (..),
+    TrailingWhitespace (..),
     verbatimBreak,
     verbatim,
     emptyAnchor,
@@ -31,7 +32,6 @@
     -- * Attachment
     Placement (..),
     attach,
-    hangingIfSingleLine,
 
     -- * Indentation
     nest,
@@ -43,7 +43,6 @@
     vsep,
     sepBy,
     joinedBy,
-    punctuate,
 
     -- * Wrapping
     ClosingIndent (..),
@@ -75,10 +74,11 @@
 import Tilia.Doc.Internal
   ( Doc (..),
     Layout (..),
-    Resume (..),
+    LineStart (..),
+    TrailingWhitespace (..),
     groupLayout,
   )
-import Tilia.Span (Span, isSingleLine)
+import Tilia.Span (Span)
 
 ----------------------------------------------------------------------------
 -- Atoms
@@ -119,16 +119,19 @@
 --
 -- Only for text that is being reproduced rather than laid out: the lines of
 -- a block comment, of a multi-line string literal, of a quasi-quotation.
--- Unlike every other break this one collapses nothing, because an empty line
--- among those is the author's and not spacing.
-verbatimBreak :: Resume -> Doc
+verbatimBreak :: LineStart -> TrailingWhitespace -> Doc
 verbatimBreak = DVerbatimBreak
 
 -- | Text reproduced exactly, line breaks and all.
 verbatim :: Text -> Doc
-verbatim = sepBy (verbatimBreak AtMargin) . map txt . T.splitOn "\n"
+verbatim =
+  sepBy (verbatimBreak AtMargin KeepWhitespace)
+    . fmap txt
+    . T.splitOn "\n"
 
--- | An anchor for a construct that contains nothing.
+-- | An empty anchor so that comments can attach to it in situations when
+-- nothing more substantial is present but the position is such that it
+-- permits comments.
 emptyAnchor :: Span -> Doc
 emptyAnchor s = located s mempty
 
@@ -151,12 +154,11 @@
 -- | Choose according to the layout the enclosing 'group' settled on.
 --
 -- Reach for this only when the two layouts differ by more than where the
--- breaks fall; when they differ only in that, 'breakOrSpace' and
--- 'breakOrNothing' already say so and read better.
+-- breaks fall.
 variant ::
-  -- | When flat
+  -- | When flat.
   Doc ->
-  -- | When broken
+  -- | When broken.
   Doc ->
   Doc
 variant = DVariant
@@ -177,27 +179,29 @@
 -- | Alternatives the preprocessor chooses between.
 cppChoice ::
   -- | One alternative per directive, each directive as written after its
-  -- hash
+  -- hash.
   [(Text, Doc)] ->
-  -- | What holds when none of them applies
+  -- | The else clause.
   Doc ->
   Doc
 cppChoice branches fallback
-  | all (silent . snd) branches && silent fallback = DEmpty
-  | otherwise = DCppChoice branches (if silent fallback then DEmpty else fallback)
-
--- | Does this document put nothing at all on the page?
-silent :: Doc -> Bool
-silent = \case
-  DEmpty -> True
-  DCat a b -> silent a && silent b
-  DNest _ d -> silent d
-  DAlign d -> silent d
-  DGroup _ d -> silent d
-  DLocated _ d -> silent d
-  DFence _ d -> silent d
-  DVariant flatD brokenD -> silent flatD && silent brokenD
-  _ -> False
+  | all (printsNothing . snd) branches && printsNothing fallback = DEmpty
+  | otherwise =
+      DCppChoice
+        branches
+        (if printsNothing fallback then DEmpty else fallback)
+  where
+    printsNothing = \case
+      DEmpty -> True
+      DCat a b -> printsNothing a && printsNothing b
+      DNest _ d -> printsNothing d
+      DAlign d -> printsNothing d
+      DGroup _ d -> printsNothing d
+      DLocated _ d -> printsNothing d
+      DFence _ d -> printsNothing d
+      DVariant flatD brokenD ->
+        printsNothing flatD && printsNothing brokenD
+      _ -> False
 
 ----------------------------------------------------------------------------
 -- Attachment
@@ -216,16 +220,6 @@
 attach Normal body = breakOrSpace <> indent body
 
 -- | 'Hanging' if the span was a single line in the input, 'Normal'
--- otherwise.
---
--- A handful of constructs hang only when what comes before their own break
--- was written on one line—a lambda whose parameters ran on, for instance,
--- would leave the body indented under nothing legible. Those constructs
--- consult the input, exactly as 'group' does, and this is the shared
--- spelling of that question so that it reads as policy rather than as a
--- special case repeated in each classifier.
-hangingIfSingleLine :: Span -> Placement
-hangingIfSingleLine s = if isSingleLine s then Hanging else Normal
 
 ----------------------------------------------------------------------------
 -- Indentation
@@ -268,11 +262,6 @@
 --
 -- For the cases where the separator has to travel with the element rather
 -- than sit between elements, such as a trailing comma that must stay on the
--- line above a break.
-punctuate :: Doc -> [Doc] -> [Doc]
-punctuate _ [] = []
-punctuate _ [x] = [x]
-punctuate s (x : xs) = (x <> s) : punctuate s xs
 
 ----------------------------------------------------------------------------
 -- Wrapping
@@ -280,11 +269,11 @@
 -- | Surround with the given opening and closing documents, adding nothing
 -- of its own.
 enclose ::
-  -- | Opening bracket
+  -- | Opening bracket.
   Doc ->
-  -- | Closing bracket
+  -- | Closing bracket.
   Doc ->
-  -- | Body
+  -- | Body.
   Doc ->
   Doc
 enclose open close body = open <> body <> close
@@ -298,38 +287,28 @@
   deriving (Eq, Show)
 
 -- | Surround with a bracket pair that opens up when broken.
---
--- Flat, this is @open body close@ with nothing added. Broken, the opening
--- bracket keeps the first line of the body company and the rest of the body
--- lines up under it, with the closing bracket alone on the last line:
---
--- > ( first,
--- >   second
--- > )
 bracket ::
-  -- | Opening bracket
+  -- | Opening bracket.
   Text ->
-  -- | Closing bracket
+  -- | Closing bracket.
   Text ->
-  -- | Body
+  -- | Body.
   Doc ->
   Doc
 bracket = bracketWith Outdented
 
 -- | 'bracket', with a say in where the closing bracket goes.
 bracketWith ::
-  -- | Where the closing bracket goes
+  -- | Where the closing bracket goes.
   ClosingIndent ->
-  -- | Opening bracket
+  -- | Opening bracket.
   Text ->
-  -- | Closing bracket
+  -- | Closing bracket.
   Text ->
-  -- | Body
+  -- | Body.
   Doc ->
   Doc
 bracketWith closing open close body =
-  -- The pair is aligned as a whole so that the closing bracket comes back
-  -- out to the column the opening one is on, wherever on its line that was.
   align $
     txt open
       <> variant body (space <> align body <> hardBreak)
@@ -342,13 +321,13 @@
 -- an operator beginning with @#@ would lex as part of the bracket. Broken,
 -- the body goes on its own indented lines.
 spacedBracket ::
-  -- | Where the closing bracket goes
+  -- | Where the closing bracket goes.
   ClosingIndent ->
-  -- | Opening bracket
+  -- | Opening bracket.
   Text ->
-  -- | Closing bracket
+  -- | Closing bracket.
   Text ->
-  -- | Body
+  -- | Body.
   Doc ->
   Doc
 spacedBracket closing open close body =
@@ -368,9 +347,9 @@
 
 -- | @(@ and @)@, with a say in where the closing bracket goes.
 parensWith ::
-  -- | Where the closing parenthesis goes
+  -- | Where the closing parenthesis goes.
   ClosingIndent ->
-  -- | Body
+  -- | Body.
   Doc ->
   Doc
 parensWith closing = bracketWith closing "(" ")"
@@ -381,9 +360,9 @@
 
 -- | @[@ and @]@, with a say in where the closing bracket goes.
 bracketsWith ::
-  -- | Where the closing bracket goes
+  -- | Where the closing bracket goes.
   ClosingIndent ->
-  -- | Body
+  -- | Body.
   Doc ->
   Doc
 bracketsWith closing = bracketWith closing "[" "]"
@@ -395,9 +374,9 @@
 -- | @(|@ and @|)@, from arrow notation, with a say in where the closing
 -- bracket goes.
 bananaWith ::
-  -- | Where the closing banana goes
+  -- | Where the closing banana goes.
   ClosingIndent ->
-  -- | Body
+  -- | Body.
   Doc ->
   Doc
 bananaWith closing = spacedBracket closing "(|" "|)"
@@ -408,9 +387,9 @@
 
 -- | @(#@ and @#)@, with a say in where the closing bracket goes.
 unboxedWith ::
-  -- | Where the closing bracket goes
+  -- | Where the closing bracket goes.
   ClosingIndent ->
-  -- | Body
+  -- | Body.
   Doc ->
   Doc
 unboxedWith closing = spacedBracket closing "(#" "#)"
@@ -430,8 +409,8 @@
 semi :: Doc
 semi = txt ";"
 
--- | Separate by a comma and a 'breakOrSpace', so that a broken list puts each
--- element on its own line with the comma left behind on the one above.
+-- | Separate by a comma and a 'breakOrSpace', so that a broken list puts
+-- each element on its own line with the comma left behind on the one above.
 commaSep :: [Doc] -> Doc
 commaSep = sepBy (comma <> breakOrSpace)
 
diff --git a/src/Tilia/Doc/Internal.hs b/src/Tilia/Doc/Internal.hs
--- a/src/Tilia/Doc/Internal.hs
+++ b/src/Tilia/Doc/Internal.hs
@@ -2,29 +2,12 @@
 {-# LANGUAGE OverloadedStrings #-}
 
 -- | The document representation and the engine that turns it into text.
---
--- Printing code should not import this module; import
--- "Tilia.Doc.Combinators" instead, which exposes 'Doc' abstractly along
--- with the vocabulary for building one. What needs the constructors is the
--- engine below, the passes that walk a finished document rather than build
--- one — comment attachment in "Tilia.Comments.Attach", and the merge in
--- "Tilia.Cpp", which takes the documents of several configurations apart and
--- puts one back together — and tests that look inside a document.
--- Those three take a document apart rather than build one, which is the
--- thing the vocabulary cannot express.
---
--- The printer is split in two halves that meet at 'Doc'. Code that walks
--- the syntax tree builds a 'Doc', which is an ordinary immutable value with
--- no notion of columns, indentation or what has already been written. The
--- engine in this module is the only thing that knows about those, and it
--- learns them by walking the finished document. Nothing in the first half
--- can observe the second, which is what keeps printing code from having to
--- reason about emission order.
 module Tilia.Doc.Internal
   ( -- * Documents
     Doc (..),
     Layout (..),
-    Resume (..),
+    LineStart (..),
+    TrailingWhitespace (..),
     groupLayout,
 
     -- * Rendering
@@ -61,43 +44,16 @@
     -- broken.
     DSoftBreak
   | -- | A line break regardless of the enclosing group.
-    --
-    -- Two in a row leave one empty line between what surrounds them, which
-    -- is all a blank line is; there is deliberately no separate constructor
-    -- for one. Further breaks add nothing.
     DHardBreak
   | -- | Text to be put at the end of the line this position falls on,
     -- however much of the line is still to be written.
-    --
-    -- For a comment the author wrote at the end of a line. Where it belongs
-    -- is not a position in the document but a position in the /output/: it
-    -- has to come after everything else on its line, including punctuation
-    -- the printer has not emitted yet. Putting it in the document where the
-    -- node it trails happens to sit would push a comma, an arrow or a
-    -- closing bracket onto the next line.
-    --
-    -- One line holds one of these at its end. A second means two comments
-    -- trailing what turned out to be a single line of output, and it goes on
-    -- a line of its own underneath rather than being run together with the
-    -- first into a comment neither author wrote.
     DHoldBack !Text
   | -- | Close the line, and let a break that immediately follows know that
     -- it has nothing left to do.
-    --
-    -- A comment owns the rest of its line, so something has to end that
-    -- line; but whatever the comment was attached to very often ends it
-    -- too, and two breaks in a row are a blank line. This is the break that
-    -- says \"the line is finished\" rather than \"break here\", so the two
-    -- do not add up to an empty line nobody asked for.
     DCloseLine
   | -- | A line break between two lines of text that is being reproduced
     -- rather than laid out.
-    --
-    -- Collapsing nothing and skipping nothing, unlike every other break
-    -- here: the lines either side are the author's, so an empty one among
-    -- them is content and not spacing. Where the next line begins is the
-    -- only thing left to decide, and 'Resume' decides it.
-    DVerbatimBreak !Resume
+    DVerbatimBreak !LineStart !TrailingWhitespace
   | -- | Concatenation. See the 'Semigroup' instance.
     DCat !Doc !Doc
   | -- | Indent the enclosed document by the given number of steps, relative
@@ -107,11 +63,6 @@
     -- reached, so that it lines up under itself when broken.
     DAlign !Doc
   | -- | Lay the enclosed document out flat or broken.
-    --
-    -- The decision is already made by the time it reaches the engine.
-    -- 'groupLayout' is what makes it, from the span the construct occupied
-    -- in the input, and it lives in the combinator layer's vocabulary
-    -- rather than here so that the engine has no policy in it at all.
     DGroup !Layout !Doc
   | -- | Choose between two documents according to the enclosing group: the
     -- first when it is flat, the second when it is broken. For the
@@ -127,11 +78,11 @@
   | -- | Record that the enclosed document was produced from the given
     -- region of the input.
     --
-    -- This carries no layout meaning at all and the engine ignores it.
-    -- Keeping provenance separate from grouping is deliberate: the two
-    -- coincide often, but a construct can need one without the other, and
-    -- fusing them is what forces a printer to grow an escape hatch for each
-    -- case where they come apart.
+    -- This carries no layout meaning and the engine ignores it. Keeping
+    -- provenance separate from grouping is deliberate: the two coincide
+    -- often, but a construct can need one without the other, and fusing
+    -- them is what forces a printer to grow an escape hatch for each case
+    -- where they come apart.
     DLocated !Span !Doc
   | -- | Fence prevents comments inside from floating out and attaching to
     -- elements they are not supposed to attach to.
@@ -140,15 +91,11 @@
     -- chooses on.
     DCppChoice ![(Text, Doc)] !Doc
   | -- | A preprocessor line that is not a conditional, reproduced, and the
-    -- region of the input it was written in.
-    --
-    -- The span is included so that two directives can be told apart.
+    -- region of the input it was written in. The span is included so that
+    -- two directives can be told apart.
     DCppDirective !Span !Text
   deriving (Eq, Show)
 
--- | Documents concatenate. @'DEmpty'@ is the unit, so a document is a
--- monoid and printing code can use @'mconcat'@, @'foldMap'@ and the rest of
--- the ordinary vocabulary instead of a bespoke sequencing operator.
 instance Semigroup Doc where
   DEmpty <> b = b
   a <> DEmpty = a
@@ -164,24 +111,22 @@
   deriving (Eq, Show)
 
 -- | Where the line after a 'DVerbatimBreak' begins.
-data Resume
+data LineStart
   = -- | At the indentation in force, as any other break would.
     AtIndent
   | -- | At column zero, whatever the indentation.
     AtMargin
   deriving (Eq, Show)
 
+-- | What do to with the whitespace a finished line ends in.
+data TrailingWhitespace
+  = -- | Trim it.
+    TrimWhitespace
+  | -- | Keep it.
+    KeepWhitespace
+  deriving (Eq, Show)
+
 -- | Decide how to lay a group out.
---
--- This is the whole of the policy, in one place on purpose. Layout follows
--- the input: a construct written on one line stays on one line, and one
--- that was spread out stays spread out. A group with no span is one the
--- printer synthesised rather than read, and has nothing to follow, so it
--- goes flat.
---
--- Notably absent is any notion of a maximum line width. Nothing in the
--- engine measures the result against a limit, so a long line that was
--- written as one line is reproduced as one line.
 groupLayout :: Maybe Span -> Layout
 groupLayout = \case
   Nothing -> Flat
@@ -201,13 +146,9 @@
 
 -- | Two columns per step.
 defaultRenderOptions :: RenderOptions
-defaultRenderOptions = RenderOptions {roIndentStep = 2}
+defaultRenderOptions = RenderOptions{roIndentStep = 2}
 
 -- | What the engine carries while walking a document.
---
--- Indentation and layout flow downwards and are restored on the way out, so
--- they are passed as arguments. Everything else is output being
--- accumulated.
 data Env = Env
   { envIndent :: !Int,
     envLayout :: !Layout,
@@ -232,12 +173,11 @@
     outStarted :: !Bool,
     -- | Fragments held back until the line ends, in the order they were
     -- given. The first goes at the end of the line; any after it get lines
-    -- of their own under it, since two comments run together would be one
-    -- comment neither author wrote.
+    -- of their own under it.
     outHeldBack :: ![Text],
     -- | Whether the line was closed by something that already knew it was
-    -- ending it, so that a break arriving now would add an empty line rather
-    -- than end anything.
+    -- ending it, so that a break arriving now would add an empty line
+    -- rather than end anything.
     outClosed :: !Bool
   }
 
@@ -278,12 +218,12 @@
   DHoldBack t -> putHeldBack (envIndent env) t
   DCloseLine -> closeLine (envIndent env)
   DHardBreak -> breakLine (envIndent env)
-  DVerbatimBreak resume -> verbatimBreakLine resume
+  DVerbatimBreak lineStart trailing -> verbatimBreakLine lineStart trailing
   DCat a b -> go env b . go env a
-  DNest n d -> go env {envIndent = envIndent env + n * envIndentStep env} d
+  DNest n d -> go env{envIndent = envIndent env + n * envIndentStep env} d
   DAlign d -> \out ->
-    go env {envIndent = max (envIndent env) (outColumn out)} d out
-  DGroup l d -> go env {envLayout = l} d
+    go env{envIndent = max (envIndent env) (outColumn out)} d out
+  DGroup l d -> go env{envLayout = l} d
   DVariant flatD brokenD -> case envLayout env of
     Flat -> go env flatD
     Broken -> go env brokenD
@@ -299,12 +239,6 @@
   DCppDirective _ t -> atMargin ("#" <> t)
 
 -- | Put a line of text at the margin, on a line of its own.
---
--- A preprocessor directive is not part of the program's layout and does not
--- take its indentation: it begins where the line begins, whatever is in
--- force around it. The line before it is closed only if anything was
--- written to it, so a directive following something that already ended its
--- line does not leave an empty one behind.
 atMargin :: Text -> Out -> Out
 atMargin t = closeLine 0 . putText 0 t . closeLine 0
 
@@ -325,13 +259,13 @@
           outStarted = True
         }
   where
-    out = out0 {outClosed = False}
+    out = out0{outClosed = False}
 
 -- | Hold a fragment back until the line ends.
 putHeldBack :: Int -> Text -> Out -> Out
 putHeldBack indent t out
   | outStarted out || not (null (outHeldBack out)) =
-      out {outHeldBack = outHeldBack out <> [t], outClosed = False}
+      out{outHeldBack = outHeldBack out <> [t], outClosed = False}
   | otherwise = closeLine indent (putText indent t out)
 
 -- | Append a space, unless the line has not started or already ends in one.
@@ -345,11 +279,30 @@
           outColumn = outColumn out + 1
         }
 
+-- | Does the current line already end in a space?
 endsWithSpace :: Out -> Bool
 endsWithSpace out = case outCurrent out of
   (t : _) -> maybe False ((== ' ') . snd) (T.unsnoc t)
   [] -> False
 
+-- | Finish the current line.
+breakLine ::
+  -- | Where the line after this one begins.
+  Int ->
+  Out ->
+  Out
+breakLine indent out
+  | outClosed out = out{outClosed = False}
+  | atStart out = out
+  | not (hasContent out), repeatsBlank out || opensABlock indent out = discarded
+  | otherwise =
+      discarded
+        { outLines = overflow TrimWhitespace indent out <> outLines out
+        }
+  where
+    discarded =
+      out{outCurrent = [], outColumn = 0, outStarted = False, outHeldBack = []}
+
 -- | Close the current line, if there is anything on it.
 --
 -- Unlike 'breakLine' this leaves a mark: the next break sees that the line
@@ -357,71 +310,28 @@
 -- own line and a construct that would have ended it anyway do not between
 -- them leave an empty one.
 closeLine ::
-  -- | Where the line after this one begins
+  -- | Where the line after this one begins.
   Int ->
   Out ->
   Out
 closeLine indent out
-  | hasContent out = (breakLine indent out) {outClosed = True}
+  | hasContent out = (breakLine indent out){outClosed = True}
   | otherwise = out
 
--- | Finish the current line.
---
--- Two breaks in a row leave one empty line between the text either side of
--- them, which is a blank line the author asked for. Further breaks add
--- nothing: the output never carries two blank lines in a row, however many
--- times printing code breaks. Breaking before anything has been written is
--- dropped for the same reason, since 'finish' strips empty lines only from
--- the end. Nor is an empty line written at the top of a block, where there
--- is nothing above it to be held off.
---
--- Between them these rules mean printing code may break wherever a break
--- might be wanted without first working out what it already emitted.
-breakLine ::
-  -- | Where the line after this one begins
-  Int ->
-  Out ->
-  Out
-breakLine indent out
-  | outClosed out = out {outClosed = False}
-  | atStart out = out
-  | not (hasContent out), repeatsBlank out || opensABlock indent out = discarded
-  | otherwise = discarded {outLines = overflow indent out <> outLines out}
-  where
-    discarded =
-      out {outCurrent = [], outColumn = 0, outStarted = False, outHeldBack = []}
-
 -- | Every line the break that has just happened produces.
---
--- Usually one: the line that was being built. There are more when several
--- fragments were held back for it, because only the first of them can go at
--- its end and the rest need lines of their own. Held-back fragments are
--- always comments, so several mean several comments that trailed different
--- things in the input which have turned out to share a line of output; run
--- together they would read as one comment nobody wrote, so each of the
--- others gets a line below.
---
--- Held back until here rather than written when it arrived, because the
--- line was not finished then. A comma or a closing bracket still to come
--- would have been pushed underneath the comment.
---
--- Ordered as 'outLines' is, most recent first, ready to be put in front
--- of it.
 overflow ::
+  -- | What to do with whitespace the lines end in.
+  TrailingWhitespace ->
   -- | Where the line after these would begin, used only if there is no line
-  -- to take the indentation from
+  -- to take the indentation from.
   Int ->
   Out ->
   [Text]
-overflow indent out = reverse (finished : map below spilled)
+overflow trailing indent out = reverse (finished : fmap below spilled)
   where
-    finished = currentLine out
+    finished = currentLine trailing out
     spilled = drop 1 (outHeldBack out)
-
-    -- Indented to match the line they spilled from rather than to the
-    -- indentation in force, so that they stay under the thing they were
-    -- written against instead of under whatever encloses it.
-    below t = T.replicate column " " <> T.stripEnd t
+    below t = T.replicate column " " <> adjustTrailingWhitespace trailing t
     column
       | T.null finished = indent
       | otherwise = T.length (T.takeWhile (== ' ') finished)
@@ -433,13 +343,13 @@
   [] -> False
 
 -- | Finish the current line between two lines of reproduced text.
-verbatimBreakLine :: Resume -> Out -> Out
-verbatimBreakLine resume out =
+verbatimBreakLine :: LineStart -> TrailingWhitespace -> Out -> Out
+verbatimBreakLine lineStart trailing out =
   out
-    { outLines = overflow 0 out <> outLines out,
+    { outLines = overflow trailing 0 out <> outLines out,
       outCurrent = [],
       outColumn = 0,
-      outStarted = resume == AtMargin,
+      outStarted = lineStart == AtMargin,
       outHeldBack = [],
       outClosed = False
     }
@@ -459,15 +369,28 @@
 hasContent out = outStarted out || not (null (outHeldBack out))
 
 -- | The current line: what was written to it, then whatever was held back
--- for its end, with one space between them and no trailing whitespace.
-currentLine :: Out -> Text
-currentLine out
+-- for its end, with one space between them.
+currentLine :: TrailingWhitespace -> Out -> Text
+currentLine trailingWhitespace out
   | T.null written = heldBack
   | T.null heldBack = written
   | otherwise = written <> " " <> heldBack
   where
-    written = T.stripEnd (T.concat (reverse (outCurrent out)))
-    heldBack = maybe "" T.stripEnd (listToMaybe (outHeldBack out))
+    written =
+      adjustTrailingWhitespace
+        trailingWhitespace
+        (T.concat (reverse (outCurrent out)))
+    heldBack =
+      maybe
+        ""
+        (adjustTrailingWhitespace trailingWhitespace)
+        (listToMaybe (outHeldBack out))
+
+-- | Handle the given line according to the 'TrailingWhitespace' style.
+adjustTrailingWhitespace :: TrailingWhitespace -> Text -> Text
+adjustTrailingWhitespace = \case
+  TrimWhitespace -> T.stripEnd
+  KeepWhitespace -> id
 
 -- | Assemble the final text: one trailing newline, no blank lines at the
 -- end, no trailing whitespace anywhere.
diff --git a/src/Tilia/Equivalence.hs b/src/Tilia/Equivalence.hs
--- a/src/Tilia/Equivalence.hs
+++ b/src/Tilia/Equivalence.hs
@@ -69,34 +69,17 @@
 import Tilia.Imports (normalizeImports)
 import Tilia.Span (Span (..))
 import Tilia.Span.Ghc (spanOf, spansOf)
+import Tilia.Utils (tshow)
 
 ----------------------------------------------------------------------------
 -- Syntax
 
--- | Where two fragments of syntax stop saying the same thing.
---
--- Everything is compared but the annotations, which is what makes this a
--- question about the program rather than about its layout: a span, a
--- token's position and the comments hung off a node all change when the
--- module is reformatted, and are supposed to.
---
--- 'Nothing' when they agree. Otherwise the constructors on the way down to
--- the first disagreement, ending in what the two sides had there. A bare
--- \"these differ\" is no use against ten thousand files: what makes a
--- corpus worth running is being able to see that six hundred failures are
--- four causes.
+-- | Where two ASTs start to differ.
 syntaxDifference :: (Data a) => a -> a -> Maybe Text
 syntaxDifference = differ []
 
 -- | The constructors on the way down to where the walk has got to,
 -- innermost first.
---
--- Innermost first because it is built by consing. The walk visits some
--- millions of nodes for every one it reports on, and appending to the end of
--- a list that grows with the depth — at every node, packing a constructor's
--- name into 'Text' to do it — was a large part of what a comparison cost.
--- 'describe' puts it back in reading order, and only for a difference that
--- is really being reported.
 type Path = [Constr]
 
 differ :: forall a. (Data a) => Path -> a -> a -> Maybe Text
@@ -132,7 +115,6 @@
       _
         | toConstr x == toConstr y -> Nothing
         | otherwise -> Just disagreement
-
     disagreement =
       describe path (named (toConstr x) <> " became " <> named (toConstr y))
 
@@ -146,15 +128,6 @@
     Ordinary
 
 -- | Which of the three a type is, worked out once.
---
--- Worth memoising rather than recomputing: 'incidental' is string
--- manipulation over a type's module and name, and the question is asked at
--- every node of every configuration of every module. There are a few
--- hundred types in a parse tree and tens of millions of nodes.
---
--- The cache races harmlessly. A reader that misses an entry another thread
--- has just written recomputes a pure function of the key and writes the
--- same answer.
 classify :: TypeRep -> Verdict
 classify rep = unsafePerformIO $ do
   known <- readIORef classified
@@ -167,7 +140,7 @@
   where
     worked
       | incidental rep = Incidental
-      | rep `Set.member` spokenFor = Special
+      | rep `Set.member` comparedByHand = Special
       | otherwise = Ordinary
 
 classified :: IORef (Map TypeRep Verdict)
@@ -176,13 +149,8 @@
 
 -- | The types compared by hand, which is to say the ones the @as…@ chain in
 -- 'differ' can match.
---
--- Kept beside that chain and in the same order. A type here with nothing to
--- match it costs one failed run down the chain; a type in the chain and not
--- here is never reached at all, which is why the corpora are what says this
--- list is right.
-spokenFor :: Set TypeRep
-spokenFor =
+comparedByHand :: Set TypeRep
+comparedByHand =
   Set.fromList
     [ typeRep (Proxy @(Maybe (LHsDoc GhcPs))),
       typeRep (Proxy @[LIE GhcPs]),
@@ -209,7 +177,7 @@
 -- | The tail of the path, and what was found at the end of it.
 describe :: Path -> Text -> Text
 describe path leaf =
-  T.intercalate " > " (map named (reverse (take 5 path)) <> [leaf])
+  T.intercalate " > " (fmap named (reverse (take 5 path)) <> [leaf])
 
 firstOf :: [Maybe a] -> Maybe a
 firstOf = listToMaybe . catMaybes
@@ -236,16 +204,11 @@
 saysNothing :: HsDocString -> Bool
 saysNothing = null . docWords
 
--- | A documentation comment with no words in it is no comment at all.
---
--- @-- |@ on a line of its own attaches an empty doc string to whatever
--- follows, and the formatter drops it, which is not a change to what the
--- module says.
+-- | A documentation comment, taken as absent where it says nothing.
 --
--- This and the two below were a pass over both trees with @everywhere@
--- before the comparison started. That rebuilt two whole parse trees per
--- configuration in order to remove a handful of nodes from each; done here,
--- the same normalisation costs nothing until the walk arrives at one.
+-- 'Nothing' where the two are not a @Maybe (LHsDoc GhcPs)@, which sends
+-- 'differ' on to the next @as…@ function. Otherwise the answer, itself
+-- 'Nothing' where the two say the same thing.
 asStandaloneDoc :: (Data a) => Path -> a -> a -> Maybe (Maybe Text)
 asStandaloneDoc path x y = case (cast x, cast y) of
   (Just before, Just after) -> Just (compared (kept before) (kept after))
@@ -253,7 +216,6 @@
   where
     kept :: Maybe (LHsDoc GhcPs) -> Maybe (LHsDoc GhcPs)
     kept d = if any (saysNothing . hsDocString . unLoc) d then Nothing else d
-
     compared before after = case (before, after) of
       (Nothing, Nothing) -> Nothing
       (Just b, Just a) -> differ (toConstr before : path) b a
@@ -340,12 +302,6 @@
     `elem` ["Maybe", "List", "NonEmpty", "Tuple2", "Tuple3", "Tuple4", "Tuple5"]
 
 -- | Which side of the module name @qualified@ was written on.
---
--- @import qualified M@ and @import M qualified@ are the same import. Which
--- spelling is allowed is settled by @ImportQualifiedPost@ and the formatter
--- writes whichever the extension calls for, so the two are not expected to
--- survive as they were. Whether the import is qualified at all is another
--- matter, and that is what is compared.
 asQualifiedStyle :: (Data a) => Path -> a -> a -> Maybe (Maybe Text)
 asQualifiedStyle path x y = case (cast x, cast y) of
   (Just before, Just after) -> Just (compared before after)
@@ -357,12 +313,6 @@
       | otherwise = Just (describe path "the import stopped being qualified")
 
 -- | A @deriving@ clause, however it was punctuated.
---
--- @deriving Eq@ and @deriving (Eq)@ are one clause written two ways, and
--- they are held in two different constructors with two different shapes, so
--- the generic comparison cannot see past the brackets. The formatter always
--- writes the brackets, so what is compared is the list of types being
--- derived.
 asDerivingClause :: (Data a) => Path -> a -> a -> Maybe (Maybe Text)
 asDerivingClause path x y = case (cast x, cast y) of
   (Just before, Just after) ->
@@ -375,49 +325,19 @@
       DctMulti _ ts -> ts
 
 -- | A module's imports, compared as the set they are.
---
--- The formatter sorts them and folds together the ones that say the same
--- thing, because the compiler reads imports as a set and the order they were
--- written in is the order somebody happened to add them. Comparing them in
--- sequence would report every module whose imports
--- were not already sorted.
---
--- Both sides are put through the same normalisation rather than being
--- compared loosely, so an import that was genuinely lost or whose list lost
--- an entry still shows up.
 asImports :: (Data a) => Path -> a -> a -> Maybe (Maybe Text)
 asImports path x y = case (cast x, cast y) of
   (Just before, Just after) -> Just (alongside (normalised before) (normalised after))
   _ -> Nothing
   where
-    -- No comments are offered, so both sides are always reordered. That is
-    -- what makes this comparison indifferent to the order: the formatter
-    -- may have declined to sort a particular module, and the question here
-    -- is whether it imports the same things either way. For the same reason
-    -- it does not matter what is said about the Prelude, only that the same
-    -- thing is said about both sides.
     normalised :: [LImportDecl GhcPs] -> [LImportDecl GhcPs]
     normalised = normalizeImports (Is #implicitPrelude) [] []
-
-    -- Compared one import at a time rather than as two lists, because a
-    -- list of imports is what this function is called on: handing it back
-    -- to `differ` whole would arrive here again and never stop.
     alongside before after
       | length before /= length after =
           Just (describe path "the module imports a different set of modules")
       | otherwise = firstOf (zipWith (differ path) before after)
 
 -- | A context, compared for the constraints it holds.
---
--- Two things are levelled. @class () => Foo a@ and @class Foo a@ say the
--- same thing, and the formatter writes the second; the tree keeps them
--- apart because one has brackets in it. And a constraint may be written
--- bracketed or bare—@(Show a) =>@ against @Show a =>@—where the brackets
--- are the context's own punctuation rather than part of the constraint, so
--- the formatter writes them whether or not the author did.
---
--- Only the brackets directly around a constraint are dropped. Brackets
--- inside one group a type and are compared like any others.
 asContext :: (Data a) => Path -> a -> a -> Maybe (Maybe Text)
 asContext path x y = compared optional <|> compared written <|> compared quoted
   where
@@ -425,32 +345,20 @@
     compared strip = case (cast x, cast y) of
       (Just before, Just after) -> Just (differ path (strip before) (strip after))
       _ -> Nothing
-
     optional :: Maybe (LHsContext GhcPs) -> [HsType GhcPs]
     optional = maybe [] written
-
     written :: LHsContext GhcPs -> [HsType GhcPs]
-    written = map (unbracket . unLoc) . unLoc
-
-    -- With @RequiredTypeArguments@ a constraint may stand where a term
-    -- does, and until it is elaborated it is an expression. The brackets
-    -- there are the context's own just as much as anywhere else.
+    written = fmap (unbracket . unLoc) . unLoc
     quoted :: XRec GhcPs [LHsExpr GhcPs] -> [HsExpr GhcPs]
-    quoted = map (unparenthesised . unLoc) . unLoc
-
+    quoted = fmap (unparenthesised . unLoc) . unLoc
     unbracket = \case
       HsParTy _ t -> unbracket (unLoc t)
       t -> t
-
     unparenthesised = \case
       HsPar _ e -> unparenthesised (unLoc e)
       e -> e
 
 -- | A Haddock, compared for what it documents.
---
--- What must survive is the words, in order, and what kind of Haddock it is:
--- a @$section@ and a @* heading@ say more than which way a comment points,
--- so those stay distinct while @|@ and @^@ do not.
 asDocString :: (Data a) => Path -> a -> a -> Maybe (Maybe Text)
 asDocString path x y = case (cast x, cast y) of
   (Just before, Just after)
@@ -461,12 +369,10 @@
   where
     summarised :: HsDocString -> (Text, [ByteString])
     summarised d = (kindOf d, docWords d)
-
     kindOf = \case
       MultiLineDocString dec _ -> decorator dec
       NestedDocString dec _ -> decorator dec
       GeneratedDocString _ -> "generated"
-
     decorator = \case
       HsDocStringNext -> "pointer"
       HsDocStringPrevious -> "pointer"
@@ -477,7 +383,7 @@
 docWords :: HsDocString -> [ByteString]
 docWords =
   concatMap chunkWords . \case
-    MultiLineDocString _ cs -> map unLoc (NE.toList cs)
+    MultiLineDocString _ cs -> fmap unLoc (NE.toList cs)
     NestedDocString _ c -> [unLoc c]
     GeneratedDocString c -> [c]
   where
@@ -488,7 +394,6 @@
 -- | Compare two values of a type that will not be taken apart.
 opaque :: forall a b. (Data a, Data b) => a -> b -> Bool
 opaque x y = case dataTypeName (dataTypeOf x) of
-  -- How every name and every literal is spelled.
   "FastString" -> by @FastString
   "OccName" -> by @OccName
   "ModuleName" -> by @ModuleName
@@ -517,10 +422,10 @@
 
 -- | Did every comment survive, and if not, which one and how?
 --
--- Ordinary comments are compared as they will be printed, in order: the text
--- is normalised on the way in, so a comment that came out unchanged reads
--- back identically, and one that was mangled or moved past its neighbour
--- does not.
+-- Ordinary comments are compared as they will be printed, in order: the
+-- text is normalised on the way in, so a comment that came out unchanged
+-- reads back identically, and one that was mangled or moved past its
+-- neighbor does not.
 --
 -- Except in the header, where the order says nothing. The pragmas are
 -- sorted and so are the imports, and a comment written against either
@@ -534,7 +439,7 @@
 -- but the comment is.
 commentDifference ::
   -- | The module each stream came from, which is asked only how far down its
-  -- header reaches
+  -- header reaches.
   (HsModule GhcPs, HsModule GhcPs) ->
   [Comment] ->
   [Comment] ->
@@ -561,7 +466,7 @@
     withinHeader m = filter (inHeader m) . ordinary
     settled = sortOn bodyKey
 
-    inHeader m c = case rearranged m of
+    inHeader m c = case lastRearrangedLine m of
       Nothing -> False
       Just lastLine -> spanStartLine (commentSpan c) <= lastLine
 
@@ -570,7 +475,7 @@
     explode c = case commentStyle c of
       DocComment
         | "--" `T.isPrefixOf` NE.head (commentBody c) ->
-            [ c {commentBody = l :| [], commentCodeBeforeStopsAt = before'}
+            [ c{commentBody = l :| [], commentCodeBeforeStopsAt = before'}
             | (n, l) <- zip [0 :: Int ..] (NE.toList (body (escapeTrigger c))),
               let before' =
                     if n == 0 then commentCodeBeforeStopsAt c else Nothing
@@ -587,12 +492,6 @@
     documentation = filter isDocumentation
     isDocumentation = triggerEscaped
 
-    -- Pragmas are held apart from the comments they are written as, because
-    -- the formatter moves them on purpose: it hoists them to the top, sorts
-    -- them, drops duplicates and splits a @{-# LANGUAGE A, B #-}@ in two. So
-    -- what has to survive is the set of them, not the order, and comparing
-    -- them in sequence with everything else would report every module that
-    -- did not already have them in sorted order.
     ordinary =
       filter (\c -> not (isDocumentation c) && isNothing (commentPragma c))
 
@@ -604,19 +503,6 @@
       | Just (bs', as') <- crossed (b : bs) (a : as) = diverge bs' as'
       | otherwise = Just (quoted b <> " became " <> quoted a)
 
-    -- A Haddock written after what it documents comes out before it, which
-    -- lifts its lines over a comment trailing the same construct:
-    --
-    -- >   _terSizeDepth :: Int  -- lazy by intention!
-    -- >     -- ^ How many @SIZELT@ relations are in the context
-    -- >     --   (= clause telescope).
-    --
-    -- The comments have not moved and neither has the documentation; they
-    -- have swapped, and the lines the Haddock runs on to are read here as
-    -- comments like any other. Only comments that trail code may be crossed,
-    -- only by comments that do not, and only where each block turns up whole
-    -- and in order on the other side—so this says \"these two swapped\" and
-    -- not \"these are the same comments in some order\".
     crossed written printed =
       listToMaybe
         [ (drop (j + k) written, drop (j + k) printed)
@@ -625,16 +511,15 @@
           let shared = length (takeWhile id (zipWith alike printed lifted)),
           k <- [shared, shared - 1 .. 1],
           all (not . commentTrailing) (take k lifted),
-          map bodyKey (take j (drop k printed)) == map bodyKey (take j written)
+          fmap bodyKey (take j (drop k printed)) == fmap bodyKey (take j written)
         ]
 
     alike x y = bodyKey x == bodyKey y
 
     quoted c = "`" <> T.intercalate "\\n" (NE.toList (commentBody c)) <> "`"
-    tshow = T.pack . show
     pragmaList =
       T.intercalate ", "
-        . map (\(n, b) -> "{-# " <> n <> " " <> b <> " #-}")
+        . fmap (\(n, b) -> "{-# " <> n <> " " <> b <> " #-}")
         . Set.toList
 
 -- | A comment's lines, as they are compared.
@@ -643,14 +528,12 @@
   (l :| []) -> T.stripStart l :| []
   ls -> ls
 
--- | How far down the file the formatter rearranges things.
+-- | The last line the formatter may reorder: the end of the last import, or
+-- of the module header where there are no imports.
 --
--- Everything from the top down to the last import: the pragmas are sorted,
--- the imports are sorted and folded together, and the comments written
--- against them travel along. Below that nothing is reordered, and there the
--- order of the comment stream is exactly what has to be checked.
-rearranged :: HsModule GhcPs -> Maybe Int
-rearranged m = spanEndLine <$> (spansOf (hsmodImports m) <> header)
+-- 'Nothing' where the module has neither header nor imports.
+lastRearrangedLine :: HsModule GhcPs -> Maybe Int
+lastRearrangedLine m = spanEndLine <$> (spansOf (hsmodImports m) <> header)
   where
     header =
       foldMap spanOf (hsmodName m)
diff --git a/src/Tilia/Fixity.hs b/src/Tilia/Fixity.hs
--- a/src/Tilia/Fixity.hs
+++ b/src/Tilia/Fixity.hs
@@ -11,30 +11,29 @@
     Fixity (..),
     defaultFixity,
 
-    -- * What a module declares
+    -- * Module declarations
     declaredFixities,
     declaredNames,
     moduleName,
 
-    -- * What a module passes on
+    -- * Module exports
     ExportItem (..),
     moduleExports,
-    exportedOperators,
     declaredChildren,
     moduleChildren,
 
-    -- * What a module can see
+    -- * Module imports
     Import (..),
     ImportItem (..),
     moduleImports,
     mightBring,
     surelyNames,
-    Known (..),
-    nothingKnown,
+    KnownModules (..),
+    noKnownModules,
     Namespace (..),
     Fixities,
     inBothNamespaces,
-    Unread (..),
+    UnreadModule (..),
     ModuleChain (..),
     spellModuleChain,
     Scope (..),
@@ -104,28 +103,7 @@
 defaultFixity = Fixity LeftAssoc 9
 
 ----------------------------------------------------------------------------
--- What a module declares
-
--- | Which of Haskell's two namespaces an operator is written in.
-data Namespace = InTypes | InTerms
-  deriving (Eq, Ord, Show)
-
--- | The fixities a module offers, by the namespace each is written in.
-type Fixities = Map (Namespace, OpName) Fixity
-
--- | Take fixities that say nothing about namespaces to govern both.
-inBothNamespaces :: Map OpName Fixity -> Fixities
-inBothNamespaces declared =
-  Map.fromList
-    [ ((namespace, op), fixity)
-    | (op, fixity) <- Map.toList declared,
-      namespace <- [InTypes, InTerms]
-    ]
-
--- | The fixities in one namespace, by the operator alone.
-fixitiesIn :: Namespace -> Fixities -> Map OpName Fixity
-fixitiesIn namespace declared =
-  Map.fromList [(op, fixity) | ((n, op), fixity) <- Map.toList declared, n == namespace]
+-- Module declarations
 
 -- | The fixities a module declares for its own operators.
 declaredFixities :: HsModule GhcPs -> Fixities
@@ -147,7 +125,7 @@
 
     fromDecl = \case
       SigD _ sig -> fromSig sig
-      TyClD _ ClassDecl {tcdSigs} -> concatMap (fromSig . unLoc) tcdSigs
+      TyClD _ ClassDecl{tcdSigs} -> concatMap (fromSig . unLoc) tcdSigs
       _ -> []
     fromSig = \case
       FixSig _ (FixitySig specifier names fixity) ->
@@ -165,10 +143,10 @@
     decls = hsmodDecls hsModule
     types = \case
       TyClD _ d -> case d of
-        FamDecl _ FamilyDecl {fdLName} -> [opName (unLoc fdLName)]
-        SynDecl {tcdLName} -> [opName (unLoc tcdLName)]
-        DataDecl {tcdLName} -> [opName (unLoc tcdLName)]
-        ClassDecl {tcdLName, tcdATs} ->
+        FamDecl _ FamilyDecl{fdLName} -> [opName (unLoc fdLName)]
+        SynDecl{tcdLName} -> [opName (unLoc tcdLName)]
+        DataDecl{tcdLName} -> [opName (unLoc tcdLName)]
+        ClassDecl{tcdLName, tcdATs} ->
           opName (unLoc tcdLName)
             : [opName (unLoc (fdLName (unLoc f))) | f <- tcdATs]
       _ -> []
@@ -176,70 +154,15 @@
       ValD _ b -> boundNames b
       SigD _ sig -> signedNames sig
       ForD _ f -> [opName (unLoc (fd_name f))]
-      TyClD _ d@DataDecl {} -> membersOf d
-      TyClD _ ClassDecl {tcdSigs} -> concatMap (classMethods . unLoc) tcdSigs
-      _ -> []
-
--- | Every name a module defines itself.
---
--- Not the same question as 'declaredFixities', which is about @infix@
--- declarations. This one is asked of an export list: a name a module
--- exports and also defines needs no chasing, and one it merely passes on
--- does. Getting the two confused makes a module appear to re-export
--- everything it exports, and then a single dependency whose source is
--- missing makes the whole module unanswerable.
---
--- Erring towards too few is safe and towards too many is not: a name left
--- out here is chased when it need not have been, whereas one wrongly
--- included is a fixity nobody looked for.
-declaredNames :: HsModule GhcPs -> Set OpName
-declaredNames = Set.fromList . concatMap (fromDecl . unLoc) . hsmodDecls
-  where
-    fromDecl = \case
-      ValD _ b -> fromBind b
-      SigD _ sig -> fromSig sig
-      TyClD _ t -> fromTyCl t
-      ForD _ f -> [opName (unLoc (fd_name f))]
+      TyClD _ d@DataDecl{} -> membersOf d
+      TyClD _ ClassDecl{tcdSigs} -> concatMap (classMethods . unLoc) tcdSigs
       _ -> []
 
-    fromBind = boundNames
-
-    fromSig = \case
-      FixSig _ (FixitySig _ ns _) -> map (opName . unLoc) ns
-      sig -> signedNames sig
-
-    fromTyCl = \case
-      FamDecl _ (FamilyDecl {fdLName}) -> [opName (unLoc fdLName)]
-      SynDecl {tcdLName} -> [opName (unLoc tcdLName)]
-      d@DataDecl {tcdLName} -> opName (unLoc tcdLName) : membersOf d
-      d@ClassDecl {tcdLName} -> opName (unLoc tcdLName) : membersOf d
-
--- | The names a binding brings into being.
-boundNames :: HsBind GhcPs -> [OpName]
-boundNames = \case
-  FunBind _ n _ -> [opName (unLoc n)]
-  PatBind _ p _ _ -> [opName n | VarPat _ (L _ n) <- listify isVarPat p]
-  PatSynBind _ (PSB _ n _ _ _) -> [opName (unLoc n)]
-  _ -> []
-  where
-    isVarPat :: Pat GhcPs -> Bool
-    isVarPat = \case
-      VarPat {} -> True
-      _ -> False
-
--- | The names a signature is about, leaving fixity declarations aside.
-signedNames :: Sig GhcPs -> [OpName]
-signedNames = \case
-  TypeSig _ ns _ -> map (opName . unLoc) ns
-  ClassOpSig _ _ ns _ -> map (opName . unLoc) ns
-  PatSynSig _ ns _ -> map (opName . unLoc) ns
-  _ -> []
-
 -- | The methods a class signature declares.
 classMethods :: Sig GhcPs -> [OpName]
 classMethods = \case
-  TypeSig _ ns _ -> map (opName . unLoc) ns
-  ClassOpSig _ _ ns _ -> map (opName . unLoc) ns
+  TypeSig _ ns _ -> fmap (opName . unLoc) ns
+  ClassOpSig _ _ ns _ -> fmap (opName . unLoc) ns
   _ -> []
 
 -- | The names a declaration carries under the name it declares: a data
@@ -250,8 +173,8 @@
 -- its own—@:|@ is a constructor and @infixr 5@ all the same.
 membersOf :: TyClDecl GhcPs -> [OpName]
 membersOf = \case
-  DataDecl {tcdDataDefn} -> concatMap (fromCon . unLoc) (consOf (dd_cons tcdDataDefn))
-  ClassDecl {tcdSigs, tcdATs} ->
+  DataDecl{tcdDataDefn} -> concatMap (fromCon . unLoc) (consOf (dd_cons tcdDataDefn))
+  ClassDecl{tcdSigs, tcdATs} ->
     concatMap (classMethods . unLoc) tcdSigs
       <> [opName (unLoc (fdLName (unLoc f))) | f <- tcdATs]
   _ -> []
@@ -261,12 +184,10 @@
 
     fromCon :: ConDecl GhcPs -> [OpName]
     fromCon = \case
-      ConDeclGADT {con_names} -> map (opName . unLoc) (toList con_names)
-      ConDeclH98 {con_name, con_args} ->
+      ConDeclGADT{con_names} -> fmap (opName . unLoc) (toList con_names)
+      ConDeclH98{con_name, con_args} ->
         opName (unLoc con_name) : fieldNames con_args
 
-    -- A record field is a name the type carries too, and it may be an
-    -- operator.
     fieldNames :: HsConDeclH98Details GhcPs -> [OpName]
     fieldNames = \case
       RecCon fields ->
@@ -276,60 +197,76 @@
         ]
       _ -> []
 
--- | What each type or class a module declares carries with it.
---
--- What @T(..)@ stands for where the module declares @T@ itself. Where it
--- does not—a type it merely passes on—there is nothing here, and a caller
--- that finds nothing must not conclude that @T@ brings nothing.
-declaredChildren :: HsModule GhcPs -> Map OpName (Set OpName)
-declaredChildren =
-  Map.fromListWith Set.union . concatMap (fromDecl . unLoc) . hsmodDecls
-  where
-    fromDecl = \case
-      TyClD _ d@DataDecl {tcdLName} -> [entry tcdLName d]
-      TyClD _ d@ClassDecl {tcdLName} -> [entry tcdLName d]
-      _ -> []
-    entry name d = (opName (unLoc name), Set.fromList (membersOf d))
-
--- | What a module offers under each name, as its export list offers it.
---
--- @T(..)@ in the list hands on everything the module has under @T@; @T(A,
--- B)@ hands on only what it names; no export list at all hands on every
--- member of everything the module declares. This is the answer to \"what
--- does @T(..)@ bring in\" asked of the module being imported from, which is
--- the only place the answer is.
-moduleChildren :: HsModule GhcPs -> Map OpName (Set OpName)
-moduleChildren hsModule = case hsmodExports hsModule of
-  Nothing -> declared
-  Just items -> Map.fromListWith Set.union (concatMap (fromIE . unLoc) (unLoc items))
-  where
-    declared = declaredChildren hsModule
-    fromIE = \case
-      IEThingAll _ n _ ->
-        [(nameOf n, Map.findWithDefault Set.empty (nameOf n) declared)]
-      IEThingWith _ n _ ns _ -> [(nameOf n, Set.fromList (map nameOf ns))]
-      _ -> []
-    nameOf = opName . ieWrappedName . unLoc
-
--- | Render a parsed name as an operator name.
-opName :: RdrName -> OpName
-opName = OpName . T.pack . occNameString . rdrNameOcc
+-- | The names a signature is about, leaving fixity declarations aside.
+signedNames :: Sig GhcPs -> [OpName]
+signedNames = \case
+  TypeSig _ ns _ -> fmap (opName . unLoc) ns
+  ClassOpSig _ _ ns _ -> fmap (opName . unLoc) ns
+  PatSynSig _ ns _ -> fmap (opName . unLoc) ns
+  _ -> []
 
+-- | Take a fixity as GHC presents it.
 fromGhcFixity :: GHC.Fixity -> Fixity
 fromGhcFixity (GHC.Fixity prec dir) = Fixity (fromGhcDirection dir) prec
 
+-- | Take an associativity as GHC presents it.
 fromGhcDirection :: GHC.FixityDirection -> Direction
 fromGhcDirection = \case
   GHC.InfixL -> LeftAssoc
   GHC.InfixR -> RightAssoc
   GHC.InfixN -> NoAssoc
 
+-- | Render a parsed name as an operator name.
+opName :: RdrName -> OpName
+opName = OpName . T.pack . occNameString . rdrNameOcc
+
+-- | Every name a module defines itself.
+--
+-- Not the same question as 'declaredFixities', which is about @infix@
+-- declarations. This one is asked of an export list: a name a module
+-- exports and also defines needs no chasing, and one it merely reexports
+-- does.
+declaredNames :: HsModule GhcPs -> Set OpName
+declaredNames = Set.fromList . concatMap (fromDecl . unLoc) . hsmodDecls
+  where
+    fromDecl = \case
+      ValD _ b -> fromBind b
+      SigD _ sig -> fromSig sig
+      TyClD _ t -> fromTyCl t
+      ForD _ f -> [opName (unLoc (fd_name f))]
+      _ -> []
+
+    fromBind = boundNames
+
+    fromSig = \case
+      FixSig _ (FixitySig _ ns _) -> fmap (opName . unLoc) ns
+      sig -> signedNames sig
+
+    fromTyCl = \case
+      FamDecl _ (FamilyDecl{fdLName}) -> [opName (unLoc fdLName)]
+      SynDecl{tcdLName} -> [opName (unLoc tcdLName)]
+      d@DataDecl{tcdLName} -> opName (unLoc tcdLName) : membersOf d
+      d@ClassDecl{tcdLName} -> opName (unLoc tcdLName) : membersOf d
+
+-- | The names a binding brings into being.
+boundNames :: HsBind GhcPs -> [OpName]
+boundNames = \case
+  FunBind _ n _ -> [opName (unLoc n)]
+  PatBind _ p _ _ -> [opName n | VarPat _ (L _ n) <- listify isVarPat p]
+  PatSynBind _ (PSB _ n _ _ _) -> [opName (unLoc n)]
+  _ -> []
+  where
+    isVarPat :: Pat GhcPs -> Bool
+    isVarPat = \case
+      VarPat{} -> True
+      _ -> False
+
 -- | The module's own name, if it declares one.
 moduleName :: HsModule GhcPs -> Maybe Text
 moduleName = fmap (T.pack . moduleNameString . unLoc) . hsmodName
 
 ----------------------------------------------------------------------------
--- What a module passes on
+-- Module exports
 
 -- | One entry of a module's export list.
 data ExportItem
@@ -344,47 +281,7 @@
     ExportModule Text
   deriving (Eq, Show)
 
--- | The operators a module's export list names, where that list can be
--- enumerated without reading what the module passes on.
---
--- 'Nothing' is a module that keeps its own counsel: one whose export list
--- hands whole modules on, so that what it exports cannot be known without
--- reading them. A module with no export list at all exports what it
--- declares, and the fixities it declares are everything it could supply.
---
--- What this is for: an operator nobody could settle is blamed on the
--- imports that might have declared it, and a module that plainly exports no
--- such name is not one of them. See 'unreadFor'.
-exportedOperators :: HsModule GhcPs -> Maybe (Set OpName)
-exportedOperators hsModule = case moduleExports hsModule of
-  Nothing -> Just (Set.fromList [op | (_, op) <- Map.keys (declaredFixities hsModule)])
-  Just items
-    | any beyondUs items -> Nothing
-    | otherwise -> Just (Set.unions (map named items))
-  where
-    declared = declaredChildren hsModule
-    beyondUs = \case
-      ExportModule _ -> True
-      ExportAll _ parent -> not (Map.member parent declared)
-      ExportName _ _ -> False
-    named = \case
-      ExportName _ op -> Set.singleton op
-      ExportAll _ parent ->
-        Set.insert parent (Map.findWithDefault Set.empty parent declared)
-      ExportModule _ -> Set.empty
-
--- | The qualifier a name was written under.
-qualifierOf :: RdrName -> Maybe Text
-qualifierOf = \case
-  Qual m _ -> Just (T.pack (moduleNameString m))
-  _ -> Nothing
-
 -- | A module's export list, or 'Nothing' if it has none.
---
--- The distinction matters. A module with no export list exports exactly
--- what it defines, so its own declarations are the whole answer. A module
--- with one may be passing on names it never declared, and those are what
--- re-export resolution has to chase.
 moduleExports :: HsModule GhcPs -> Maybe [ExportItem]
 moduleExports =
   fmap (concatMap (fromIE . unLoc) . unLoc) . hsmodExports
@@ -393,9 +290,7 @@
       IEVar _ n _ -> [named n]
       IEThingAbs _ n _ -> [named n]
       IEThingAll _ n _ -> [as ExportAll n]
-      -- The type itself and every member listed with it; a class exports
-      -- its operators this way.
-      IEThingWith _ n _ ns _ -> named n : map named ns
+      IEThingWith _ n _ ns _ -> named n : fmap named ns
       IEModuleContents _ m -> [ExportModule (T.pack (moduleNameString (unLoc m)))]
       _ -> []
     named = as ExportName
@@ -403,8 +298,39 @@
       let rdr = ieWrappedName (unLoc n)
        in item (qualifierOf rdr) (opName rdr)
 
+-- | The qualifier a name was written under.
+qualifierOf :: RdrName -> Maybe Text
+qualifierOf = \case
+  Qual m _ -> Just (T.pack (moduleNameString m))
+  _ -> Nothing
+
+-- | What each type or class a module declares carries with it.
+declaredChildren :: HsModule GhcPs -> Map OpName (Set OpName)
+declaredChildren =
+  Map.fromListWith Set.union . concatMap (fromDecl . unLoc) . hsmodDecls
+  where
+    fromDecl = \case
+      TyClD _ d@DataDecl{tcdLName} -> [entry tcdLName d]
+      TyClD _ d@ClassDecl{tcdLName} -> [entry tcdLName d]
+      _ -> []
+    entry name d = (opName (unLoc name), Set.fromList (membersOf d))
+
+-- | What a module offers under each name, as its export list offers it.
+moduleChildren :: HsModule GhcPs -> Map OpName (Set OpName)
+moduleChildren hsModule = case hsmodExports hsModule of
+  Nothing -> declared
+  Just items -> Map.fromListWith Set.union (concatMap (fromIE . unLoc) (unLoc items))
+  where
+    declared = declaredChildren hsModule
+    fromIE = \case
+      IEThingAll _ n _ ->
+        [(nameOf n, Map.findWithDefault Set.empty (nameOf n) declared)]
+      IEThingWith _ n _ ns _ -> [(nameOf n, Set.fromList (fmap nameOf ns))]
+      _ -> []
+    nameOf = opName . ieWrappedName . unLoc
+
 ----------------------------------------------------------------------------
--- What a module can see
+-- Module imports
 
 -- | One import declaration, reduced to what bears on fixity.
 data Import = Import
@@ -435,44 +361,16 @@
     ImportedSome OpName [OpName]
   deriving (Eq, Show)
 
--- | Could this list bring the operator in?
---
--- Told what the module keeps under each of its names, this is exact. Told
--- nothing about a @T(..)@'s @T@, it answers yes, because ruling the
--- operator out would mean knowing what @T@ has under it and we do not. Used
--- where being wrong the other way—deciding an operator could not have
--- arrived through a list that in fact brings it—would settle a fixity that
--- was never established.
-mightBring :: Map OpName (Set OpName) -> OpName -> [ImportItem] -> Bool
-mightBring carries op = any $ \case
-  ImportedName n -> n == op
-  ImportedSome parent ns -> parent == op || op `elem` ns
-  ImportedAll parent -> maybe True (names parent) (Map.lookup parent carries)
-  where
-    names parent kids = parent == op || Set.member op kids
-
--- | Does this list certainly name the operator?
---
--- The other side of 'mightBring', for a @hiding@ list: a name is hidden
--- only where the list says so outright. Told what a @T(..)@ carries this
--- is again exact; told nothing, it still holds that @T(..)@ hides @T@.
-surelyNames :: Map OpName (Set OpName) -> OpName -> [ImportItem] -> Bool
-surelyNames carries op = any $ \case
-  ImportedName n -> n == op
-  ImportedSome parent ns -> parent == op || op `elem` ns
-  ImportedAll parent -> maybe (parent == op) (names parent) (Map.lookup parent carries)
-  where
-    names parent kids = parent == op || Set.member op kids
-
 -- | The imports of a module.
 moduleImports ::
-  -- | Whether @ImplicitPrelude@ is on
+  -- | Whether @ImplicitPrelude@ is on.
   Choice "implicitPrelude" ->
+  -- | Parsed module.
   HsModule GhcPs ->
   [Import]
 moduleImports implicitPrelude hsModule = prelude <> written
   where
-    written = map (fromDecl . unLoc) (hsmodImports hsModule)
+    written = fmap (fromDecl . unLoc) (hsmodImports hsModule)
     prelude
       | not (isTrue implicitPrelude) = []
       | any ((== "Prelude") . importModule) written = []
@@ -484,7 +382,6 @@
                 importNames = Nothing
               }
           ]
-
     fromDecl d =
       Import
         { importModule = modName (unLoc (ideclName d)),
@@ -504,36 +401,106 @@
   IEVar _ n _ -> Just (ImportedName (nameOf n))
   IEThingAbs _ n _ -> Just (ImportedName (nameOf n))
   IEThingAll _ n _ -> Just (ImportedAll (nameOf n))
-  IEThingWith _ n _ ns _ -> Just (ImportedSome (nameOf n) (map nameOf ns))
+  IEThingWith _ n _ ns _ -> Just (ImportedSome (nameOf n) (fmap nameOf ns))
   _ -> Nothing
   where
     nameOf :: LIEWrappedName GhcPs -> OpName
     nameOf = opName . ieWrappedName . unLoc
 
+-- | Could this list bring the operator in?
+mightBring ::
+  -- | What each name in the list keeps under it, where that is known.
+  Map OpName (Set OpName) ->
+  -- | The operator being looked for.
+  OpName ->
+  -- | The entries of the import list.
+  [ImportItem] ->
+  Bool
+mightBring carries op = any $ \case
+  ImportedName n -> n == op
+  ImportedSome parent ns -> parent == op || op `elem` ns
+  ImportedAll parent -> maybe True (names parent) (Map.lookup parent carries)
+  where
+    names parent kids = parent == op || Set.member op kids
+
+-- | Does this list certainly name the operator?
+surelyNames ::
+  -- | What each name in the list keeps under it, where that is known.
+  Map OpName (Set OpName) ->
+  -- | The operator being looked for.
+  OpName ->
+  -- | The entries of the import list.
+  [ImportItem] ->
+  Bool
+surelyNames carries op = any $ \case
+  ImportedName n -> n == op
+  ImportedSome parent ns -> parent == op || op `elem` ns
+  ImportedAll parent ->
+    maybe
+      (parent == op)
+      (names parent)
+      (Map.lookup parent carries)
+  where
+    names parent kids = parent == op || Set.member op kids
+
+-- | What is known about the imported modules.
+data KnownModules = KnownModules
+  { -- | The fixities a module exports, or 'Nothing' if that could not be
+    -- determined.
+    knownFixities :: Text -> Maybe Fixities,
+    -- | What a module keeps under each of its names, so that a @T(..)@ in
+    -- an import list can be told what it brings in.
+    knownChildren :: Text -> Map OpName (Set OpName),
+    -- | The operators a module's export list names, following what it
+    -- reexports. 'Nothing' where a module it hands on could not be read.
+    knownExportNames :: Text -> Maybe (Set OpName),
+    -- | The modules reading a module went through before giving up, the one
+    -- it gave up on last. Asked only about modules 'knownFixities' could
+    -- not answer for, and only so that a message can name the module that
+    -- is really in the way.
+    knownChain :: Text -> [Text]
+  }
+
+-- | No known modules.
+noKnownModules :: KnownModules
+noKnownModules =
+  KnownModules
+    { knownFixities = const Nothing,
+      knownChildren = const Map.empty,
+      knownExportNames = const Nothing,
+      knownChain = const []
+    }
+
+-- | Which of Haskell's two namespaces an operator is written in.
+data Namespace = InTypes | InTerms
+  deriving (Eq, Ord, Show)
+
+-- | The fixities a module offers, by the namespace each is written in.
+type Fixities = Map (Namespace, OpName) Fixity
+
+-- | Take fixities that say nothing about namespaces to govern both.
+inBothNamespaces :: Map OpName Fixity -> Fixities
+inBothNamespaces declared =
+  Map.fromList
+    [ ((namespace, op), fixity)
+    | (op, fixity) <- Map.toList declared,
+      namespace <- [InTypes, InTerms]
+    ]
+
 -- | An import whose module could not be read, and what is known about it
 -- regardless.
---
--- Unread is not the same as unknown. Failing to establish a module's
--- fixities does not stop us reading its export list or its declarations,
--- and either can rule the module out as the source of an operator. Ruling
--- it out is what keeps one unreachable package from unsettling a whole
--- file.
-data Unread = Unread
+data UnreadModule = UnreadModule
   { -- | The import as written.
     unreadImport :: Import,
-    -- | The operators its export list names, where that list can be
-    -- enumerated. 'Nothing' is a module that keeps its own counsel—one
-    -- whose list passes whole modules on, or that could not be parsed—and
-    -- which therefore has to be suspected of everything.
-    unreadExports :: Maybe (Set OpName),
-    -- | What it keeps under each of its names, for expanding a @T(..)@ in
-    -- the import list. Empty is ignorance, and leaves such a list
-    -- suspected of bringing in anything.
-    unreadCarries :: Map OpName (Set OpName),
-    -- | The modules below this one that reading went through, ending at
-    -- the one that actually stopped it. Empty where the import is itself
-    -- what could not be read. Diagnostic only.
-    unreadBelow :: [Text]
+    -- | The operators its export list names, as 'knownExportNames' gives
+    -- them.
+    unreadExportNames :: Maybe (Set OpName),
+    -- | What it keeps under each of its names, as 'knownChildren' gives
+    -- them, for expanding a @T(..)@ in the import list.
+    unreadChildren :: Map OpName (Set OpName),
+    -- | The modules reading went through before giving up, as 'knownChain'
+    -- gives them.
+    unreadChain :: [Text]
   }
   deriving (Eq, Show)
 
@@ -547,7 +514,7 @@
 -- them.
 spellModuleChain :: Palette -> ModuleChain -> Text
 spellModuleChain palette (ModuleChain modules) =
-  T.intercalate " → " (map (paint palette Place) (toList modules))
+  T.intercalate " → " (fmap (paint palette Place) (toList modules))
 
 -- | Every fixity a module can see, and how.
 data Scope = Scope
@@ -557,15 +524,7 @@
     scopeInTerms :: Reach,
     -- | The imports whose modules could not be read, and what is
     -- nonetheless known about each.
-    --
-    -- These are what separate \"no declaration exists\" from \"we did not
-    -- manage to look\". An operator that was not found is settled only if no
-    -- unread import could have brought it in, and deciding that needs the
-    -- whole import rather than the module's name: see 'unreadFor'.
-    --
-    -- One list for both namespaces: a module that could not be read could
-    -- not be read for either.
-    scopeUnread :: [Unread]
+    scopeUnread :: [UnreadModule]
   }
   deriving (Eq, Show)
 
@@ -577,8 +536,8 @@
     -- module's own name, under which its own declarations are reachable.
     reachQualified :: Map (Text, OpName) (Fixity, Provenance),
     -- | Operators the imports bring in with two different fixities, as they
-    -- would have to be written to run into it: without a qualifier, or under
-    -- the alias the disagreeing imports share.
+    -- would have to be written to run into it: without a qualifier, or
+    -- under the alias the disagreeing imports share.
     reachAmbiguous :: [(Maybe Text, OpName)]
   }
   deriving (Eq, Show)
@@ -590,64 +549,13 @@
   InTypes -> scopeInTypes
   InTerms -> scopeInTerms
 
--- | What is known about the modules a module imports.
---
--- Everything 'resolveScope' cannot read off the module in front of it,
--- gathered into one place. 'nothingKnown' answers none of them, which is
--- legitimate—it costs coverage, never correctness.
-data Known = Known
-  { -- | What a module exports, or 'Nothing' if that could not be
-    -- determined. 'Nothing' means the module could not be read, which is
-    -- not the same as its exporting nothing; see 'resolveScope'.
-    knownFixities :: Text -> Maybe Fixities,
-    -- | What a module keeps under each of its names, so that a @T(..)@ in
-    -- an import list can be told what it brings in. An empty map is
-    -- ignorance as much as it is emptiness, and understates a list rather
-    -- than overstating it.
-    knownChildren :: Text -> Map OpName (Set OpName),
-    -- | The operators a module's export list names, where that list can be
-    -- enumerated without reading what it passes on. Asked only about
-    -- modules 'knownFixities' could not answer for, and only to decide
-    -- which of them an unsettled operator can be blamed on.
-    knownExportNames :: Text -> Maybe (Set OpName),
-    -- | The modules reading a module went through before giving up, the one
-    -- it gave up on last. Asked only about modules 'knownFixities' could
-    -- not answer for, and only so that a message can name the module that
-    -- is really in the way.
-    knownChain :: Text -> [Text]
-  }
-
--- | Knowing nothing about anything: every question answered with a shrug.
---
--- A scope built on this settles what the module itself declares and
--- nothing more. Fill in the fields that can be answered.
-nothingKnown :: Known
-nothingKnown =
-  Known
-    { knownFixities = const Nothing,
-      knownChildren = const Map.empty,
-      knownExportNames = const Nothing,
-      knownChain = const []
-    }
-
 -- | Work out what a module can see.
---
--- The lookup function supplies what each imported module exports, and
--- 'Nothing' means it could not be determined—the package was not
--- downloaded, the source did not parse. That distinction is the whole point
--- of its type: an empty map is a fact about a module, whereas 'Nothing' is
--- an admission about us, and conflating them is how a formatter ends up
--- asserting a fixity it never established.
---
--- Not handled here: operators arriving through @T(..)@. That is syntactic
--- and so belongs to the lookup function, as re-export chains do—and those
--- "Tilia.Fixity.Plan" already follows, through export lists in source and
--- through the export section of an interface.
 resolveScope ::
-  -- | Whether @ImplicitPrelude@ is on
+  -- | Whether @ImplicitPrelude@ is on.
   Choice "implicitPrelude" ->
-  -- | What is known about the modules this one imports
-  Known ->
+  -- | What is known about the modules this one imports.
+  KnownModules ->
+  -- | Parsed module.
   HsModule GhcPs ->
   Scope
 resolveScope implicitPrelude known hsModule =
@@ -657,7 +565,7 @@
       scopeUnread = unread
     }
   where
-    Known {knownFixities = exportsOf, knownChildren, knownExportNames, knownChain} = known
+    KnownModules{knownFixities = exportsOf, knownChildren, knownExportNames, knownChain} = known
     exportNamesOf = knownExportNames
     imports = moduleImports implicitPrelude hsModule
     declared = declaredFixities hsModule
@@ -695,17 +603,16 @@
             ]
 
     unread =
-      [ Unread
+      [ UnreadModule
           { unreadImport = i,
-            unreadExports = exportNamesOf (importModule i),
-            unreadCarries = knownChildren (importModule i),
-            unreadBelow = knownChain (importModule i)
+            unreadExportNames = exportNamesOf (importModule i),
+            unreadChildren = knownChildren (importModule i),
+            unreadChain = knownChain (importModule i)
           }
       | i <- imports,
         Nothing <- [exportsOf (importModule i)]
       ]
 
-    -- Paired with a flag saying whether two imports disagreed about it.
     disagree (a, aBad) (b, bBad) = (a, aBad || bBad || fst a /= fst b)
 
     visible offered i =
@@ -722,6 +629,15 @@
             Just (False, shown) ->
               Map.filterWithKey (\op _ -> mightBring carries op shown) exported
 
+-- | The fixities in one namespace, by the operator alone.
+fixitiesIn :: Namespace -> Fixities -> Map OpName Fixity
+fixitiesIn namespace declared =
+  Map.fromList
+    [ (op, fixity)
+    | ((n, op), fixity) <- Map.toList declared,
+      n == namespace
+    ]
+
 ----------------------------------------------------------------------------
 -- Answers
 
@@ -744,43 +660,43 @@
 data Resolution
   = -- | Established, and here is where from.
     Resolved Fixity Provenance
-  | -- | Not established. Each chain is an import that could not be read,
-    -- down to the module that actually stopped us, and the answer may be in
-    -- any of them.
-    --
-    -- A printer that receives this must not restructure the operator chain:
-    -- it has to lay it out as the input had it. Rearranging on a guess is
-    -- exactly what this type exists to prevent.
+  | -- | Not established.
     Unresolved (NonEmpty ModuleChain)
   deriving (Eq, Show)
 
 -- | The fixity of an operator as this module sees it.
 lookupFixity ::
-  -- | The scope
+  -- | The scope.
   Scope ->
-  -- | The namespace the operator is written in
+  -- | The namespace the operator is written in.
   Namespace ->
-  -- | The qualifier written at the use site, if any
+  -- | The qualifier written at the use site, if any.
   Maybe Text ->
-  -- | Operator to resolve
+  -- | Operator to resolve.
   OpName ->
-  -- | The resolution
+  -- | The resolution.
   Resolution
 lookupFixity scope namespace qualifier op =
-  case settledFor scope namespace qualifier op of
+  case fixityInScope scope namespace qualifier op of
     Just (_, (fixity, provenance)) -> Resolved fixity provenance
-    Nothing -> case nonEmpty (unreadFor scope qualifier op) of
+    Nothing -> case nonEmpty (unreadThatMightDeclare scope qualifier op) of
       Nothing -> Resolved defaultFixity ReportDefault
       Just missing -> Unresolved missing
 
--- | What settles a use, and the namespace that settled it.
-settledFor ::
+-- | What the scope itself has for a use, and the namespace it came from.
+fixityInScope ::
+  -- | The scope.
   Scope ->
+  -- | The namespace the operator is written in.
   Namespace ->
+  -- | The qualifier written at the use site, if any.
   Maybe Text ->
+  -- | Operator to resolve.
   OpName ->
+  -- | The fixity and where it came from, under the namespace that supplied
+  -- it. 'Nothing' where the scope has no answer.
   Maybe (Namespace, (Fixity, Provenance))
-settledFor scope namespace qualifier op =
+fixityInScope scope namespace qualifier op =
   case mapMaybe found (namespace : promotedFrom namespace) of
     (answer : _) -> Just answer
     [] -> Nothing
@@ -793,50 +709,38 @@
         Nothing -> Map.lookup op (reachUnqualified (reachIn n scope))
         Just q -> Map.lookup (q, op) (reachQualified (reachIn n scope))
 
--- | The modules of the unread imports that could have settled this use.
---
--- Empty means an operator that was not found really is undeclared, rather
--- than declared somewhere we failed to look. Getting this narrow matters:
--- an import that is @qualified as M@ has no bearing on an operator written
--- without a qualifier, and one with an import list has none on an operator
--- the list does not name. Were every unread import to count against every
--- operator, one unreachable package deep in a dependency tree would
--- unsettle a whole file.
-unreadFor ::
-  -- | The scope
+-- | The unread imports that could have declared this operator.
+unreadThatMightDeclare ::
+  -- | The scope.
   Scope ->
-  -- | The qualifier written at the use site, if any
+  -- | The qualifier written at the use site, if any.
   Maybe Text ->
-  -- | Operator being resolved
+  -- | Operator being resolved.
   OpName ->
   -- | The imports that could hold the answer, each down to the module that
-  -- actually stopped us
+  -- actually stopped us.
   [ModuleChain]
-unreadFor scope qualifier op =
-  [ ModuleChain (importModule (unreadImport u) :| unreadBelow u)
+unreadThatMightDeclare scope qualifier op =
+  [ ModuleChain (importModule (unreadImport u) :| unreadChain u)
   | u <- scopeUnread scope,
     reaches (unreadImport u),
     brings u,
     exports u
   ]
   where
-    -- A module that says what it exports is taken at its word.
-    exports u = maybe True (Set.member op) (unreadExports u)
+    exports u = maybe True (Set.member op) (unreadExportNames u)
     reaches i = case qualifier of
       Nothing -> not (importQualified i)
       Just q -> q == importAlias i
-    -- What a @T(..)@ in the list stands for is often knowable even where
-    -- the module's fixities are not: reading a module's declarations is
-    -- one thing and settling every operator it passes on is another.
     brings u = case importNames (unreadImport u) of
       Nothing -> True
-      Just (True, hidden) -> not (surelyNames (unreadCarries u) op hidden)
-      Just (False, shown) -> mightBring (unreadCarries u) op shown
+      Just (True, hidden) -> not (surelyNames (unreadChildren u) op hidden)
+      Just (False, shown) -> mightBring (unreadChildren u) op shown
 
 ----------------------------------------------------------------------------
 -- What could not be answered
 
--- | Why an operator's fixity could not be settled.
+-- | Why an operator's fixity could not be determined.
 data Unknown
   = -- | These imports could not be read, each given down to the module that
     -- actually stopped us, and the declaration the answer depends on may be
@@ -856,7 +760,7 @@
 -- nothing is regrouped around it.
 operatorsUsed :: HsModule GhcPs -> [(Namespace, (Maybe Text, OpName))]
 operatorsUsed hsModule =
-  map (named InTerms) inExpressions <> map (named InTypes) inTypes
+  fmap (named InTerms) inExpressions <> fmap (named InTypes) inTypes
   where
     inExpressions =
       [ n
@@ -883,12 +787,12 @@
   where
     ambiguous namespace = Set.fromList (reachAmbiguous (reachIn namespace scope))
     unsettled (namespace, (qualifier, op)) =
-      case settledFor scope namespace qualifier op of
+      case fixityInScope scope namespace qualifier op of
         Just (answering, _)
           | Set.member (qualifier, op) (ambiguous answering) ->
               Just ((qualifier, op), Ambiguous)
           | otherwise -> Nothing
-        Nothing -> case nonEmpty (unreadFor scope qualifier op) of
+        Nothing -> case nonEmpty (unreadThatMightDeclare scope qualifier op) of
           Just missing -> Just ((qualifier, op), NotRead missing)
           Nothing -> Nothing
 
@@ -899,13 +803,13 @@
 -- | Spell out where an unsettled operator may have come from, and the fact
 -- that this run could not read any of it.
 spellUnreadIn ::
-  -- | Whether there is anybody there to see color
+  -- | Whether there is anybody there to see color.
   Palette ->
-  -- | The chains, as 'Unresolved' gives them
+  -- | The chains, as 'Unresolved' gives them.
   NonEmpty ModuleChain ->
   Text
 spellUnreadIn palette missing =
-  T.intercalate " or " (map (spellModuleChain palette) (toList missing))
+  T.intercalate " or " (fmap (spellModuleChain palette) (toList missing))
     <> ", "
     <> ofThose
   where
@@ -918,33 +822,15 @@
 -- What reading a module established
 
 -- | What reading a module established about its operators.
---
--- Declaring nothing is something a module did; being unreadable is
--- something that happened to us. Everything here turns on keeping those
--- apart, which is why this is two constructors rather than a map that
--- might be empty.
 data Established
   = -- | It was read, and declares these.
     Declares Fixities
   | -- | It could not be read. The expensive answer of the two, because
     -- reaching it means exhausting every way of reading the module.
-    --
-    -- The name is the module below this one that stopped us, where the
-    -- failure was not this module's own. One hop only: the module named
-    -- carries its own, and following them is how a whole chain is got back.
-    -- It is kept because it has to outlive the run that found it — a
-    -- verdict of unreadable is cached, and a reason that were not cached
-    -- with it would leave the second run with a worse account than the
-    -- first.
     Unreadable (Maybe Text)
   deriving (Eq, Show)
 
 -- | What reading a module established about its export list.
---
--- 'exportedOperators' answers the same question as @'Maybe' ('Set'
--- 'OpName')@, which is the shape 'resolveScope' wants. This is that answer
--- given a name, so that having one and never having asked can be told apart
--- where both have to be written down.
 data Exported
   = -- | The list names these, and they are all the module can supply.
     Exports (Set OpName)
@@ -959,6 +845,6 @@
   Exports names -> Just names
   Untellable -> Nothing
 
--- | What to write down for an answer 'exportedOperators' gave.
+-- | What to write down for an answer the reader worked out.
 asExported :: Maybe (Set OpName) -> Exported
 asExported = maybe Untellable Exports
diff --git a/src/Tilia/Fixity/ByHand.hs b/src/Tilia/Fixity/ByHand.hs
--- a/src/Tilia/Fixity/ByHand.hs
+++ b/src/Tilia/Fixity/ByHand.hs
@@ -29,18 +29,10 @@
           ("===", NoAssoc, 4),
           ("=/=", NoAssoc, 4)
         ],
-      -- @network@ writes its system calls as @foreign import CALLCONV@,
-      -- and @CALLCONV@ is a macro out of @HsNetDef.h@ standing where the
+      -- @network@ writes its system calls as @foreign import CALLCONV@, and
+      -- @CALLCONV@ is a macro out of @HsNetDef.h@ standing where the
       -- calling convention goes. It has to be expanded for the line to be
       -- Haskell at all, so no configuration of these five parses.
-      --
-      -- Not one of them declares a fixity, defines an operator, or gives a
-      -- constructor an operator name, in any version; every entry below is
-      -- therefore empty. What that buys is not their own operators but
-      -- everything downstream: @Network.Socket@ is perfectly readable and
-      -- was only ever refused because these are what it passes on, and
-      -- refusing it refused @wai@, @http-client@, @warp@ and in the end
-      -- every @servant@ module that reaches one of them.
       entry "Network.Socket.If" [],
       entry "Network.Socket.Internal" [],
       entry "Network.Socket.Name" [],
@@ -51,41 +43,21 @@
       -- below. Unexpanded it reads as a function applied to that @case@,
       -- and both branches of the @#if@ that defines it leave the call
       -- standing, so there is no configuration to fall back on.
-      --
-      -- It exports no operator and declares no fixity. What it costs to
-      -- refuse is @Data.HashMap.Strict@, and after that @Data.Aeson.KeyMap@
-      -- and everything that reads a JSON object.
       entry "Data.HashMap.Internal.Array" [],
       -- @monad-logger@ writes one method body once and hands it to sixteen
       -- instances: @#define DEF monadLoggerLog a b c d = …@, and then
       -- @instance … where DEF@ for each of them. A @where@ with a bare name
       -- after it is not Haskell, and the @#define@ sits outside every
       -- conditional, so there is no configuration in which it is.
-      --
-      -- It declares no fixity, and its export list is explicit throughout:
-      -- no module is handed on whole, and none of the types it exports with
-      -- @(..)@ keeps an operator. What refusing it costs is @Yesod.Core@,
-      -- and after that every module of @yesod@ that reaches one.
       entry "Control.Monad.Logger" [],
       -- @cereal@ writes its generic sum instances through three macros, and
       -- the one that matters expands into a guard and its right-hand side
       -- at once: @gPut | PUTSUM(Word8) | …@. Unexpanded that is a guard
       -- with nothing after it.
-      --
-      -- It declares no fixity. It does hand @Data.Serialize.Get@, @.Put@
-      -- and @.IEEE754@ on whole, so this claim is about those as well, and
-      -- not one of the three declares a fixity or exports an operator
-      -- either: what they supply has the Report's @infixl 9@, which is what
-      -- an absence here already says.
       entry "Data.Serialize" [],
       -- @th-lift-instances@ has @LIFT_TYPED_DEFAULT@, defined three ways
       -- against the @template-haskell@ version and to nothing at all in the
       -- oldest of them, and written bare in five instance bodies.
-      --
-      -- Its export list is empty—the module exists for its orphan
-      -- instances—so it supplies no operator whatever it declares. It is
-      -- reached through eight modules of @persistent@, which is a long way
-      -- to be refused from.
       entry "Instances.TH.Lift" []
     ]
   where
@@ -99,27 +71,13 @@
 -- of; this one is the whole answer for an @.hsc@, given instead of reading
 -- it, and a module absent from here declares nothing rather than being
 -- unreadable.
---
--- The claim behind the absence is that @hsc2hs@ modules hardly ever declare
--- a fixity. Of three hundred @.hsc@ files across the packages this project
--- builds against, exactly one module declares one, and it is below. One
--- other defines operators at all — @regex-posix@'s @Text.Regex.Posix.Wrap@,
--- which gives @=~@ and @=~~@ and no fixity for either, so the Report's
--- @infixl 9@ is what they have and is what an absence here already says.
--- Neither module can be parsed even with the @hsc2hs@ constructs blanked
--- out, so there was never a reading that would have found them.
---
--- Being wrong here costs indentation and nothing else: a fixity decides
--- how a chain of operators is grouped when it is broken across lines, and
--- nothing in the renderer adds or removes a parenthesis. A module missing
--- from this table is laid out as though its operators were @infixl 9@.
 hscFixities :: Map Text (Map OpName Fixity)
 hscFixities =
   Map.fromList
     [ -- @addSignal@ and @deleteSignal@ take a signal on the left and a set
       -- on the right, so a chain of them only typechecks to the right, and
-      -- the module says so with a bare @infixr@—precedence 9, as the
-      -- Report has it when none is written.
+      -- the module says so with a bare @infixr@—precedence 9, as the Report
+      -- has it when none is written.
       entry
         "System.Posix.Signals"
         [ ("addSignal", RightAssoc, 9),
diff --git a/src/Tilia/Fixity/Cabal.hs b/src/Tilia/Fixity/Cabal.hs
--- a/src/Tilia/Fixity/Cabal.hs
+++ b/src/Tilia/Fixity/Cabal.hs
@@ -32,7 +32,7 @@
 -- | The modules a package exposes, read from the @.cabal@ file in its
 -- source tarball.
 --
--- Nothing if the tarball cannot be read or holds no @.cabal@ file.
+-- 'Nothing' if the tarball cannot be read or holds no @.cabal@ file.
 packageModules :: FilePath -> IO (Maybe [Text])
 packageModules tarball = quietly Nothing $ do
   bytes <- BL.readFile tarball
@@ -64,41 +64,28 @@
     depth = (1 +) . length . filter (== '/')
 
 -- | Every module a package holds, whether it exposes it or not.
---
--- A package's internals are worth knowing about because its exposed modules
--- pass names on from them: @base@ re-exports from @GHC.Internal.*@, none of
--- which it exposes. Reading only the exposed list leaves those unreachable,
--- and a re-export that cannot be followed is an answer thrown away.
 containedModules :: Text -> [Text]
 containedModules t =
   modulesUnder "exposed-modules" t <> modulesUnder "other-modules" t
-
-modulesUnder :: Text -> Text -> [Text]
-modulesUnder field =
-  concatMap moduleNames . fieldsNamed field . T.lines
   where
-    moduleNames =
-      filter looksLikeModule
-        . concatMap (T.split (== ','))
-        . T.words
-
-    looksLikeModule m = case T.uncons m of
-      Just (c, _) -> c `elem` ['A' .. 'Z']
-      Nothing -> False
+    modulesUnder field =
+      concatMap moduleNames . fieldsNamed field . T.lines
+      where
+        moduleNames =
+          filter looksLikeModule
+            . concatMap (T.split (== ','))
+            . T.words
+        looksLikeModule m = case T.uncons m of
+          Just (c, _) -> c `elem` ['A' .. 'Z']
+          Nothing -> False
 
 -- | Every directory a @.cabal@ file's modules could be under.
---
--- The current directory is always among them, whatever @hs-source-dirs@
--- says. This is deliberately more than cabal would look at: a package can
--- keep modules beside its @.cabal@ file and name other directories as well,
--- and a directory too many costs one @stat@ where a directory too few costs
--- a module we cannot resolve.
 sourceDirs :: Text -> [Text]
 sourceDirs contents = Data.List.nub (named <> ["."])
   where
     named =
       filter (not . T.null)
-        . map T.strip
+        . fmap T.strip
         . concatMap (T.split (== ','))
         . concatMap T.words
         . fieldsNamed "hs-source-dirs"
@@ -135,20 +122,17 @@
 fieldsNamed name = go . filter (not . commented)
   where
     commented = T.isPrefixOf "--" . T.stripStart
-
     go = \case
       [] -> []
       (l : ls)
         | Just value <- fieldValue l ->
             let (continued, rest) = span (deeperThan (indentOf l)) ls
-             in T.unwords (value : map T.strip continued) : go rest
+             in T.unwords (value : fmap T.strip continued) : go rest
         | otherwise -> go ls
-
     fieldValue l =
       let (key, rest) = T.break (== ':') l
        in if T.toLower (T.strip key) == name && not (T.null rest)
             then Just (T.strip (T.drop 1 rest))
             else Nothing
-
     deeperThan n l = T.null (T.strip l) || indentOf l > n
     indentOf = T.length . T.takeWhile isSpace
diff --git a/src/Tilia/Fixity/Cache.hs b/src/Tilia/Fixity/Cache.hs
--- a/src/Tilia/Fixity/Cache.hs
+++ b/src/Tilia/Fixity/Cache.hs
@@ -1,12 +1,8 @@
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | Remembering what was read out of a package, between runs.
---
--- Reading a dependency means decompressing an archive and parsing a module,
--- which costs tens of milliseconds. Doing it once is fine. Doing it again
--- for every file of a project, on every save, is not—and that is the shape
--- of the work when a formatter is driven from an editor.
+-- | Package-level cache.
 module Tilia.Fixity.Cache
   ( Cache,
     PlanToken (..),
@@ -29,6 +25,7 @@
 where
 
 import Control.Monad (join)
+import Data.Choice (Choice, isFalse)
 import Data.Map.Strict (Map)
 import Data.Map.Strict qualified as Map
 import Data.Maybe (fromMaybe, mapMaybe)
@@ -52,43 +49,38 @@
 import Tilia.Utils (quietly)
 
 -- | Where cached answers are kept together with a token unique to this
--- build plan, read in this environment.
+-- build plan and environment.
 data Cache = Cache FilePath PlanToken
 
--- | A token that is unique to this plan, read in this environment. It is
--- needed in order to be able to cache the expensive class of lookup
--- failures that are related to chasing module re-export chains. Rather than
--- track what each failure leaned on, all of them are tied to the pair as a
--- whole: anything that could turn a failure into an answer changes one or
--- the other, and failures are few enough that re-deriving them when it does
--- costs little.
+-- | A token that is unique to this plan and environment. It is needed in
+-- order to be able to cache the expensive class of lookup failures that are
+-- related to chasing module re-export chains. Rather than track what each
+-- failure leaned on, all of them are tied to the plan and the environment
+-- as a whole.
 --
--- The environment belongs in it because a module the plan names is
--- unreadable where the compiler cannot be asked about its package and
--- readable where it can, and that is settled outside the project. See
--- 'Tilia.Fixity.PackageDb.compilerIdentity'.
+-- The environment belongs in it because availability of a module the plan
+-- names depends on where we run the query and that is settled outside the
+-- project. See 'Tilia.Fixity.PackageDb.compilerIdentity'.
 newtype PlanToken = PlanToken Text
   deriving (Eq, Show)
 
--- | Bumped whenever what is written changes shape, so that entries from an
--- older Tilia are ignored rather than misread.
+-- | Bumped whenever cache format changes.
 formatVersion :: FilePath
 formatVersion = "v1"
 
 -- | Open, creating the directory if need be.
 --
--- 'Nothing' if there is nowhere to write, in which case everything still
--- works and is merely slower.
---
--- The token is what a failure written through this cache is tied to, and
--- what one read back out of it has to match. See 'PlanToken'.
-openCache :: PlanToken -> IO (Maybe Cache)
-openCache token = quietly Nothing $ do
-  root <- (</> formatVersion) <$> getXdgDirectory XdgCache "tilia"
-  createDirectoryIfMissing True (root </> "modules")
-  createDirectoryIfMissing True (root </> "fixities")
-  createDirectoryIfMissing True (root </> "installed")
-  pure (Just (Cache root token))
+-- 'Nothing' if the cache is not to be used or there is nowhere to write,
+-- in which case everything still works and is merely slower.
+openCache :: Choice "useCache" -> PlanToken -> IO (Maybe Cache)
+openCache use token
+  | isFalse use = pure Nothing
+  | otherwise = quietly Nothing $ do
+      root <- (</> formatVersion) <$> getXdgDirectory XdgCache "tilia"
+      createDirectoryIfMissing True (root </> "modules")
+      createDirectoryIfMissing True (root </> "fixities")
+      createDirectoryIfMissing True (root </> "installed")
+      pure (Just (Cache root token))
 
 -- | The modules a package exposes, if that was worked out before.
 cachedModules :: Cache -> Text -> IO (Maybe [Text])
@@ -101,25 +93,20 @@
 storeModules cache package =
   writeAtomically (modulesPath cache package) . T.unlines
 
--- | What was established about a module before, if anything was.
---
--- An 'Unreadable' answer is offered back only under the 'PlanToken' it was
--- written under.
+-- | What was established about a module before, if anything.
 cachedFixities ::
-  -- | Where to look
+  -- | Where to look.
   Cache ->
-  -- | The package the module belongs to. Opaque here: whatever the caller
-  -- uses to tell one package from another is what an answer is filed under,
-  -- and answers filed under different keys never meet.
+  -- | The package the module belongs to. Opaque here.
   Text ->
-  -- | The module, by its full dotted name
+  -- | The module, by its full dotted name.
   Text ->
-  -- | What was established, or 'Nothing' if nothing was
+  -- | What was established, or 'Nothing' if nothing was.
   IO (Maybe Established)
 cachedFixities cache@(Cache _ (PlanToken token)) package modName =
   fmap join . readIfPresent (fixitiesPath cache package modName) $ \contents ->
     case T.lines contents of
-      ("read" : entries) -> Declares . Map.fromList <$> traverse parseEntry entries
+      ("read" : entries) -> Declares . Map.fromList <$> traverse parseFixity entries
       [unread] | Just rest <- T.stripPrefix ("unread\t" <> token) unread ->
         case T.uncons rest of
           Nothing -> Just (Unreadable Nothing)
@@ -129,60 +116,52 @@
 
 -- | Remember what reading a module established.
 storeFixities ::
-  -- | Where to write
+  -- | Where to write.
   Cache ->
-  -- | The package the module belongs to, as 'cachedFixities' takes it
+  -- | The package the module belongs to, as 'cachedFixities' takes it.
   Text ->
-  -- | The module, by its full dotted name
+  -- | The module, by its full dotted name.
   Text ->
-  -- | What was established about it
+  -- | What was established about it.
   Established ->
   IO ()
 storeFixities cache package modName answer = do
-  quietly () (createDirectoryIfMissing True (packageDir cache package))
+  quietly () (createDirectoryIfMissing True (fixitiesDir cache package))
   writeAtomically (fixitiesPath cache package modName) $
     case answer of
       Unreadable below ->
         T.unlines ["unread\t" <> token <> foldMap ("\t" <>) below]
       Declares fixities ->
-        T.unlines ("read" : map renderEntry (Map.toList fixities))
+        T.unlines ("read" : fmap renderFixity (Map.toList fixities))
   where
     Cache _ (PlanToken token) = cache
 
-----------------------------------------------------------------------------
--- Export names
-
 -- | What a module's export list was found to say, if it was ever read.
---
--- Wanted for the modules whose fixities could not be established, and asked
--- exactly then: a warm cache answers those from 'cachedFixities' without
--- opening the archive at all, and without this the archive would be opened
--- anyway to ask this instead.
 cachedExportNames ::
-  -- | Where to look
+  -- | Where to look.
   Cache ->
-  -- | The package the module belongs to, as 'cachedFixities' takes it
+  -- | The package the module belongs to, as 'cachedFixities' takes it.
   Text ->
-  -- | The module, by its full dotted name
+  -- | The module, by its full dotted name.
   Text ->
-  -- | What its export list said, or 'Nothing' if it was never read
+  -- | What its export list said, or 'Nothing' if it was never read.
   IO (Maybe Exported)
 cachedExportNames cache package modName =
   fmap join . readIfPresent (exportsPath cache package modName) $ \contents ->
     case T.lines contents of
-      ("names" : entries) -> Just (Exports (Set.fromList (map OpName entries)))
+      ("names" : entries) -> Just (Exports (Set.fromList (fmap OpName entries)))
       ["untellable"] -> Just Untellable
       _ -> Nothing
 
 -- | Remember what a module's export list said.
 storeExportNames ::
-  -- | Where to write
+  -- | Where to write.
   Cache ->
-  -- | The package the module belongs to, as 'cachedFixities' takes it
+  -- | The package the module belongs to, as 'cachedFixities' takes it.
   Text ->
-  -- | The module, by its full dotted name
+  -- | The module, by its full dotted name.
   Text ->
-  -- | What its export list said
+  -- | What its export list said.
   Exported ->
   IO ()
 storeExportNames cache package modName answer = do
@@ -192,23 +171,16 @@
       Untellable -> T.unlines ["untellable"]
       Exports names -> T.unlines ("names" : [op | OpName op <- Set.toAscList names])
 
-----------------------------------------------------------------------------
--- What a name carries with it
-
 -- | What a module keeps under each of its names, if it was ever read for
 -- it.
---
--- Wanted wherever an import list writes @T(..)@, and got at by reading the
--- module's interface or its source—which on a warm cache is work that
--- would otherwise not be done at all.
 cachedChildren ::
-  -- | Where to look
+  -- | Where to look.
   Cache ->
-  -- | The package the module belongs to, as 'cachedFixities' takes it
+  -- | The package the module belongs to, as 'cachedFixities' takes it.
   Text ->
-  -- | The module, by its full dotted name
+  -- | The module, by its full dotted name.
   Text ->
-  -- | What it keeps under each name, or 'Nothing' if it was never read
+  -- | What it keeps under each name, or 'Nothing' if it was never read.
   IO (Maybe (Map OpName (Set OpName)))
 cachedChildren cache package modName =
   fmap join . readIfPresent (childrenPath cache package modName) $ \contents ->
@@ -217,42 +189,37 @@
       _ -> Nothing
   where
     childEntry line = case T.splitOn "\t" line of
-      (parent : kids) -> Just (OpName parent, Set.fromList (map OpName kids))
+      (parent : kids) -> Just (OpName parent, Set.fromList (fmap OpName kids))
       [] -> Nothing
 
 -- | Remember what a module keeps under each of its names.
 storeChildren ::
-  -- | Where to write
+  -- | Where to write.
   Cache ->
-  -- | The package the module belongs to, as 'cachedFixities' takes it
+  -- | The package the module belongs to, as 'cachedFixities' takes it.
   Text ->
-  -- | The module, by its full dotted name
+  -- | The module, by its full dotted name.
   Text ->
-  -- | What it keeps under each name
+  -- | What it keeps under each name.
   Map OpName (Set OpName) ->
   IO ()
 storeChildren cache package modName children = do
   quietly () (createDirectoryIfMissing True (childrenDir cache package))
   writeAtomically (childrenPath cache package modName) $
-    T.unlines ("children" : map entry (Map.toList children))
+    T.unlines ("children" : fmap entry (Map.toList children))
   where
     entry (OpName parent, kids) =
       T.intercalate "\t" (parent : [kid | OpName kid <- Set.toAscList kids])
 
-----------------------------------------------------------------------------
--- The package database
-
--- | What the compiler could see when last asked, if it can still see it.
---
--- Whose answer this is, is settled by the path it was found at rather than
--- by anything written inside it. See 'installedPath'.
+-- | What packages the compiler could see when last asked, if it can still
+-- see it.
 cachedInstalled :: Cache -> IO (Maybe [InstalledPackage])
 cachedInstalled cache = quietly Nothing $ do
   readIfPresent (installedPath cache) T.lines >>= \case
     Nothing -> pure Nothing
     Just ls -> do
       let written =
-            [(T.unpack path, stamp) | ["db", path, stamp] <- map fields ls]
+            [(T.unpack path, stamp) | ["db", path, stamp] <- fmap fields ls]
       still <- traverse unchanged written
       pure $
         if not (null written) && and still
@@ -268,17 +235,13 @@
             { ipName = name,
               ipVersion = version,
               ipModules = T.words modules,
-              ipImportDirs = map T.unpack dirs
+              ipImportDirs = fmap T.unpack dirs
             }
       _ -> Nothing
     fields = T.splitOn "\t"
 
--- | Remember what the compiler can see, stamped so that a later run can
--- tell whether it still does.
---
--- Nothing is written when there is no database to stamp: an answer nothing
--- can invalidate is worse than no answer, because it never stops being
--- given.
+-- | Remember a package the compiler can see, stamped so that a later run
+-- can tell whether it still does.
 storeInstalled :: Cache -> Installed -> IO ()
 storeInstalled cache found
   | null (installedDatabases found) = pure ()
@@ -288,7 +251,7 @@
         [T.intercalate "\t" ["db", T.pack path, stamp] | (path, stamp) <- stamps]
           <> [ T.intercalate "\t" $
                  ["pkg", ipName p, ipVersion p, T.unwords (ipModules p)]
-                   <> map T.pack (ipImportDirs p)
+                   <> fmap T.pack (ipImportDirs p)
              | p <- installedPackages found
              ]
   where
@@ -296,11 +259,8 @@
       stamp <- T.pack . show <$> getModificationTime path
       pure (path, stamp)
 
-----------------------------------------------------------------------------
--- Solves that came to nothing
-
 -- | Whether asking @cabal@ to solve this plan again has already been tried
--- and left the plan saying exactly what it said before.
+-- and left the plan exactly as before.
 cachedFutileSolve :: Cache -> IO Bool
 cachedFutileSolve cache =
   quietly False (doesFileExist (futileSolvePath cache))
@@ -312,7 +272,7 @@
   writeAtomically (futileSolvePath cache) ""
 
 -- | The packages an earlier run was still short of after asking @cabal@ to
--- fetch them, and which asking again will therefore not bring in.
+-- fetch them.
 cachedFutileFetch :: Cache -> IO [Text]
 cachedFutileFetch cache =
   fromMaybe []
@@ -326,11 +286,9 @@
   createDirectoryIfMissing True (takeDirectory (futileFetchPath cache))
   writeAtomically (futileFetchPath cache) (T.unlines packages)
 
-----------------------------------------------------------------------------
--- Entries
-
-renderEntry :: ((Namespace, OpName), Fixity) -> Text
-renderEntry ((namespace, OpName op), Fixity direction precedence) =
+-- | Render a fixity declaration as 'Text'.
+renderFixity :: ((Namespace, OpName), Fixity) -> Text
+renderFixity ((namespace, OpName op), Fixity direction precedence) =
   T.intercalate
     "\t"
     [op, renderNamespace namespace, renderDirection direction, T.pack (show precedence)]
@@ -343,8 +301,9 @@
       RightAssoc -> "r"
       NoAssoc -> "n"
 
-parseEntry :: Text -> Maybe ((Namespace, OpName), Fixity)
-parseEntry line = case T.splitOn "\t" line of
+-- | Parse a fixity declaration from 'Text'.
+parseFixity :: Text -> Maybe ((Namespace, OpName), Fixity)
+parseFixity line = case T.splitOn "\t" line of
   [op, namespace, direction, precedence] -> do
     n <- parseNamespace namespace
     d <- parseDirection direction
@@ -365,66 +324,60 @@
       Right (p, rest) | T.null rest -> Just p
       _ -> Nothing
 
-----------------------------------------------------------------------------
--- Paths and files
-
-packageDir :: Cache -> Text -> FilePath
-packageDir (Cache root _) package = root </> "fixities" </> T.unpack package
+-- | The directory where fixities are stored.
+fixitiesDir :: Cache -> Text -> FilePath
+fixitiesDir (Cache root _) package = root </> "fixities" </> T.unpack package
 
--- | Under the token, as everything else here is filed under the key that
--- decides it.
---
--- One file shared by every token could only ever carry a check saying whose
--- it was, which answers \"is this mine?\" and never \"where is mine?\": two
--- environments formatting the same project would take turns discarding each
--- other's answer and asking @ghc-pkg@ again.
+-- | Where @ghc-pkg dump@ is remembered.
 installedPath :: Cache -> FilePath
 installedPath (Cache root (PlanToken token)) =
   root </> "installed" </> T.unpack token
 
+-- | An empty file whose mere presence says solving this plan again would
+-- not widen it.
 futileSolvePath :: Cache -> FilePath
 futileSolvePath (Cache root (PlanToken token)) =
   root </> "solves" </> T.unpack token
 
+-- | The packages fetching left missing, one per line.
 futileFetchPath :: Cache -> FilePath
 futileFetchPath (Cache root (PlanToken token)) =
   root </> "fetches" </> T.unpack token
 
+-- | Every module a package holds, one per line.
 modulesPath :: Cache -> Text -> FilePath
 modulesPath (Cache root _) package = root </> "modules" </> T.unpack package
 
+-- | What reading one module established about fixities.
 fixitiesPath :: Cache -> Text -> Text -> FilePath
 fixitiesPath cache package modName =
-  packageDir cache package </> T.unpack modName
+  fixitiesDir cache package </> T.unpack modName
 
+-- | The directory where export lists are stored.
 exportsDir :: Cache -> Text -> FilePath
 exportsDir (Cache root _) package = root </> "exports" </> T.unpack package
 
+-- | What one module's export list was found to say.
 exportsPath :: Cache -> Text -> Text -> FilePath
 exportsPath cache package modName =
   exportsDir cache package </> T.unpack modName
 
+-- | The directory where the names kept under a name are stored.
 childrenDir :: Cache -> Text -> FilePath
 childrenDir (Cache root _) package = root </> "children" </> T.unpack package
 
+-- | What one module keeps under each of its names.
 childrenPath :: Cache -> Text -> Text -> FilePath
 childrenPath cache package modName =
   childrenDir cache package </> T.unpack modName
 
+-- | Read and parse a file, or 'Nothing' where there is none to read.
 readIfPresent :: FilePath -> (Text -> a) -> IO (Maybe a)
 readIfPresent path parse = quietly Nothing $ do
   there <- doesFileExist path
   if there then Just . parse <$> T.readFile path else pure Nothing
 
 -- | Write via a temporary file and a rename.
---
--- Two formatters may run at once—an editor saving while a pre-commit hook
--- runs—and a half-written entry read by the other would be worse than no
--- entry at all. A rename is atomic, so a reader sees the old file or the
--- new one and never a partial one.
---
--- If anything fails the write is abandoned. A stray temporary left in a
--- cache directory costs nothing; a wrong answer would cost a great deal.
 writeAtomically :: FilePath -> Text -> IO ()
 writeAtomically path contents = quietly () $ do
   let temporary = path <> ".tmp"
diff --git a/src/Tilia/Fixity/Debug.hs b/src/Tilia/Fixity/Debug.hs
--- a/src/Tilia/Fixity/Debug.hs
+++ b/src/Tilia/Fixity/Debug.hs
@@ -45,15 +45,14 @@
 data FixityNotes = FixityNotes
   { -- | What each import brought, in the order the module writes them.
     notedImports :: [ImportNote],
-    -- | What became of every operator the module uses, one entry per
-    -- operator.
+    -- | Resolutions per operator.
     notedOperators :: [OperatorNote],
-    -- | What the module declares for itself.
+    -- | What operators the module declares.
     notedDeclarations :: [(Text, Fixity)]
   }
   deriving (Eq, Show)
 
--- | One import.
+-- | One import in the module.
 data ImportNote = ImportNote
   { -- | The module imported.
     noteModule :: Text,
@@ -84,17 +83,17 @@
 
 -- | Record everything that decided one module's fixities.
 fixityNotes ::
-  -- | Whether @ImplicitPrelude@ is on, so that the Prelude is listed
-  -- among the imports exactly when the module actually has it
+  -- | Whether @ImplicitPrelude@ is on, so that the Prelude is listed among
+  -- the imports exactly when the module actually has it.
   Choice "implicitPrelude" ->
-  -- | What each module in scope exports, as the resolver answers it
+  -- | What each module in scope exports, as the resolver answers it.
   (Text -> IO (Maybe (Fixities))) ->
   -- | Where reading a module went before giving up, asked only of the ones
-  -- the line above gave up on
+  -- the line above gave up on.
   (Text -> IO [Text]) ->
-  -- | The scope the module was formatted under
+  -- | The scope the module was formatted under.
   Scope ->
-  -- | The module
+  -- | The module.
   HsModule GhcPs ->
   IO FixityNotes
 fixityNotes implicitPrelude resolve chainOf scope hsModule = do
@@ -102,7 +101,7 @@
   pure
     FixityNotes
       { notedImports = brought,
-        notedOperators = map aboutOperator used,
+        notedOperators = fmap aboutOperator used,
         notedDeclarations = here
       }
   where
@@ -119,7 +118,7 @@
                 then Nothing
                 else Just (importAlias i),
             noteQualified = importQualified i,
-            noteBrought = Set.size . Set.fromList . map snd . Map.keys <$> answer,
+            noteBrought = Set.size . Set.fromList . fmap snd . Map.keys <$> answer,
             noteChain = below
           }
 
@@ -173,7 +172,7 @@
 
     entry line = case wrapTo (lineWidth - 8) line of
       [] -> []
-      (opening : rest) -> (indent 3 <> "· " <> opening) : map (indent 4 <>) rest
+      (opening : rest) -> (indent 3 <> "· " <> opening) : fmap (indent 4 <>) rest
 
     fromImport i =
       named (noteModule i)
@@ -185,7 +184,7 @@
 
     through = \case
       [] -> ""
-      below -> ", through " <> T.intercalate " → " (map named below)
+      below -> ", through " <> T.intercalate " → " (fmap named below)
 
     qualification i = case (noteQualified i, noteAlias i) of
       (True, Just alias) -> " qualified as " <> named alias
diff --git a/src/Tilia/Fixity/HiFile.hs b/src/Tilia/Fixity/HiFile.hs
new file mode 100644
--- /dev/null
+++ b/src/Tilia/Fixity/HiFile.hs
@@ -0,0 +1,352 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Reading a module's exports and fixities straight out of its interface
+-- file, for GHC 9.10, 9.12, and 9.14.
+module Tilia.Fixity.HiFile
+  ( HiFile (..),
+    HiName (..),
+    HiExport (..),
+    decodeHiFile,
+  )
+where
+
+import Data.Array (Array, bounds, listArray, (!))
+import Data.Bits (shiftL, testBit, (.&.), (.|.))
+import Data.ByteString (ByteString)
+import Data.ByteString qualified as BS
+import Data.ByteString.Unsafe qualified as BS
+import Data.Text (Text)
+import Data.Text qualified as T
+import Data.Text.Encoding qualified as T
+import Data.Word (Word32, Word8)
+import Tilia.Fixity (Direction (..), Fixity (..), Namespace (..), OpName (..))
+
+-- | What an interface file says about the operators its module offers.
+data HiFile = HiFile
+  { -- | The module the file is the interface of.
+    hiModule :: Text,
+    -- | What the module exports.
+    hiExports :: [HiExport],
+    -- | The fixities the module declares.
+    hiFixities :: [(Namespace, OpName, Fixity)]
+  }
+  deriving (Eq, Show)
+
+-- | A name an interface refers to.
+data HiName
+  = -- | A name with the module that defines it and its namespace.
+    HiName Text Namespace OpName
+  | -- | A name GHC knows by its unique alone, which only GHC can resolve.
+    KnownKey Word32
+  deriving (Eq, Show)
+
+-- | One entry of an export list.
+data HiExport
+  = -- | A name on its own.
+    Avail HiName
+  | -- | A type or class, and the names that come with it, itself first
+    -- where it is exported too.
+    AvailTC HiName [HiName]
+  deriving (Eq, Show)
+
+-- | Decode an interface file, or say why it cannot be.
+decodeHiFile :: ByteString -> Either Text HiFile
+decodeHiFile bytes = fst <$> runGet hiFile bytes 0
+
+-- | How the interface files of one GHC series are laid out.
+data Series = Series910 | Series912 | Series914
+  deriving (Eq)
+
+-- | The strings and names a file refers to by index.
+data Tables = Tables
+  { tablesStrings :: Array Int ByteString,
+    tablesNames :: Array Int (Int, Namespace, Int)
+  }
+
+-- | An interface file, from its header as far as its fixities.
+hiFile :: Get HiFile
+hiFile = do
+  magic <- word32be
+  unless' (magic == 0x1face64) (failure ("not a 64-bit interface file: " <> T.pack (show magic)))
+  version <- string
+  series <- case take 3 version of
+    "910" -> pure Series910
+    "912" -> pure Series912
+    "914" -> pure Series914
+    _ -> failure ("unsupported interface version " <> T.pack version)
+  _way <- string
+  unless' (series == Series914) fingerprint
+  _extFields <- pointer series
+  stringsAt <- pointer series
+  namesAt <- pointer series
+  unless' (series == Series910) (() <$ pointer series)
+  strings <- lookingAt stringsAt dictionary
+  names <- lookingAt namesAt symbolTable
+  let tables = Tables strings names
+  payload series tables
+
+-- | What follows the tables, as far as the fixities.
+payload :: Series -> Tables -> Get HiFile
+payload series tables = do
+  self <- moduleName tables
+  _sigOf <- maybeOf (moduleName tables)
+  _hscSource <- byte
+  case series of
+    Series914 -> do
+      fingerprint
+      skipLazy series
+      _public <- pointer series
+      exports <- withinLazy series (listOf (export tables))
+      skipLazy series
+      _ <- pointer series
+      fixities <- listOf (fixity series tables)
+      pure (HiFile self exports fixities)
+    _ -> do
+      mapM_ (const fingerprint) [1 :: Int .. 6]
+      _orphan <- byte
+      _famInsts <- byte
+      skipLazy series
+      skipLazy series
+      exports <- listOf (export tables)
+      fingerprint
+      _usedTH <- byte
+      fixities <- listOf (fixity series tables)
+      pure (HiFile self exports fixities)
+
+-- | A pointer, as the absolute position it points to.
+pointer :: Series -> Get Int
+pointer = \case
+  Series910 -> fromIntegral <$> word32be
+  _ -> do
+    here <- position
+    offset <- word32be
+    pure (here + fromIntegral offset)
+
+-- | Pass over something written with @lazyPut@.
+skipLazy :: Series -> Get ()
+skipLazy series = pointer series >>= seek
+
+-- | Read something written with @lazyPut@ and carry on after it.
+withinLazy :: Series -> Get a -> Get a
+withinLazy series get = do
+  end <- pointer series
+  a <- get
+  seek end
+  pure a
+
+-- | The string table.
+dictionary :: Get (Array Int ByteString)
+dictionary = do
+  n <- sleb
+  strings <- mapM (const (sleb >>= bytesOf)) [1 .. n]
+  pure (listArray (0, n - 1) strings)
+
+-- | The name table, each name as the index of its module's name, its
+-- namespace, and the index of its own.
+symbolTable :: Get (Array Int (Int, Namespace, Int))
+symbolTable = do
+  n <- sleb
+  names <- mapM (const entry) [1 .. n]
+  pure (listArray (0, n - 1) names)
+  where
+    entry = do
+      unit
+      m <- uleb
+      (namespace, occ) <- occName
+      pure (m, namespace, occ)
+
+-- | Look a string up by the index it is written as.
+fastString :: Array Int ByteString -> Int -> Get Text
+fastString strings i
+  | inRange (bounds strings) i = pure (T.decodeUtf8Lenient (strings ! i))
+  | otherwise = failure "string index out of range"
+
+-- | Whether an index is within bounds.
+inRange :: (Int, Int) -> Int -> Bool
+inRange (lo, hi) i = lo <= i && i <= hi
+
+-- | A unit, which must be a real one: instantiated units come of Backpack.
+unit :: Get ()
+unit =
+  byte >>= \case
+    0 -> () <$ uleb
+    2 -> pure ()
+    _ -> failure "an instantiated unit"
+
+-- | An 'OccName', as its namespace and the index of its string.
+occName :: Get (Namespace, Int)
+occName = do
+  namespace <-
+    byte >>= \case
+      0 -> pure InTerms
+      1 -> pure InTerms
+      2 -> pure InTypes
+      3 -> pure InTypes
+      4 -> InTerms <$ uleb
+      b -> failure ("unknown namespace " <> T.pack (show b))
+  s <- uleb
+  pure (namespace, s)
+
+-- | A module, as its name.
+moduleName :: Tables -> Get Text
+moduleName tables = do
+  unit
+  uleb >>= fastString (tablesStrings tables)
+
+-- | A reference to a name.
+name :: Tables -> Get HiName
+name tables = do
+  i <- uleb
+  let w = fromIntegral i :: Word32
+  case w .&. 0xC0000000 of
+    0x00000000
+      | inRange (bounds (tablesNames tables)) i -> do
+          let (m, namespace, occ) = tablesNames tables ! i
+          HiName
+            <$> fastString (tablesStrings tables) m
+            <*> pure namespace
+            <*> (OpName <$> fastString (tablesStrings tables) occ)
+      | otherwise -> failure "name index out of range"
+    0x80000000 -> pure (KnownKey w)
+    _ -> failure "unknown name tag"
+
+-- | One entry of an export list.
+export :: Tables -> Get HiExport
+export tables =
+  byte >>= \case
+    0 -> Avail <$> name tables
+    _ -> AvailTC <$> name tables <*> listOf (name tables)
+
+-- | One declared fixity.
+fixity :: Series -> Tables -> Get (Namespace, OpName, Fixity)
+fixity series tables = do
+  (namespace, s) <- occName
+  op <- OpName <$> fastString (tablesStrings tables) s
+  case series of
+    Series910 ->
+      byte >>= \case
+        0 -> pure ()
+        _ -> () <$ uleb
+    _ -> pure ()
+  precedence <- sleb
+  direction <-
+    byte >>= \case
+      0 -> pure LeftAssoc
+      1 -> pure RightAssoc
+      _ -> pure NoAssoc
+  pure (namespace, op, Fixity direction precedence)
+
+-- | A 'Fingerprint', which is two numbers.
+fingerprint :: Get ()
+fingerprint = () <$ uleb <* uleb
+
+-- | A 'String', which is a list of characters.
+string :: Get String
+string = listOf (toEnum <$> uleb)
+
+-- | A 'Maybe'.
+maybeOf :: Get a -> Get (Maybe a)
+maybeOf get =
+  byte >>= \case
+    0 -> pure Nothing
+    _ -> Just <$> get
+
+-- | A list, which is its length followed by its elements.
+listOf :: Get a -> Get [a]
+listOf get = do
+  n <- sleb
+  mapM (const get) [1 .. n]
+
+-- | Run an action unless the condition holds.
+unless' :: Bool -> Get () -> Get ()
+unless' condition action = if condition then pure () else action
+
+-- | Reading from a position in a byte string.
+newtype Get a = Get{runGet :: ByteString -> Int -> Either Text (a, Int)}
+
+instance Functor Get where
+  fmap f (Get g) = Get $ \bs i -> case g bs i of
+    Left e -> Left e
+    Right (a, j) -> Right (f a, j)
+
+instance Applicative Get where
+  pure a = Get $ \_ i -> Right (a, i)
+  Get f <*> Get g = Get $ \bs i -> case f bs i of
+    Left e -> Left e
+    Right (h, j) -> case g bs j of
+      Left e -> Left e
+      Right (a, k) -> Right (h a, k)
+
+instance Monad Get where
+  Get g >>= f = Get $ \bs i -> case g bs i of
+    Left e -> Left e
+    Right (a, j) -> runGet (f a) bs j
+
+-- | Stop reading, and say why.
+failure :: Text -> Get a
+failure e = Get $ \_ _ -> Left e
+
+-- | Where reading has got to.
+position :: Get Int
+position = Get $ \_ i -> Right (i, i)
+
+-- | Carry on reading from a position.
+seek :: Int -> Get ()
+seek j = Get $ \bs _ ->
+  if j < 0 || j > BS.length bs
+    then Left "pointer out of range"
+    else Right ((), j)
+
+-- | Run something at a position and come back.
+lookingAt :: Int -> Get a -> Get a
+lookingAt j get = do
+  here <- position
+  seek j
+  a <- get
+  seek here
+  pure a
+
+-- | One byte.
+byte :: Get Word8
+byte = Get $ \bs i ->
+  if i < BS.length bs
+    then Right (BS.unsafeIndex bs i, i + 1)
+    else Left "unexpected end of file"
+
+-- | So many bytes, as they are.
+bytesOf :: Int -> Get ByteString
+bytesOf n = Get $ \bs i ->
+  if n >= 0 && i + n <= BS.length bs
+    then Right (BS.unsafeTake n (BS.unsafeDrop i bs), i + n)
+    else Left "unexpected end of file"
+
+-- | A 32-bit word, most significant byte first.
+word32be :: Get Word32
+word32be = do
+  a <- byte
+  b <- byte
+  c <- byte
+  d <- byte
+  pure (fromIntegral a `shiftL` 24 .|. fromIntegral b `shiftL` 16 .|. fromIntegral c `shiftL` 8 .|. fromIntegral d)
+
+-- | An unsigned LEB128 number.
+uleb :: Get Int
+uleb = go 0 0
+  where
+    go shift acc = do
+      b <- byte
+      let acc' = acc .|. (fromIntegral (b .&. 0x7f) `shiftL` shift)
+      if testBit b 7 then go (shift + 7) acc' else pure acc'
+
+-- | A signed LEB128 number.
+sleb :: Get Int
+sleb = go 0 0
+  where
+    go shift acc = do
+      b <- byte
+      let acc' = acc .|. (fromIntegral (b .&. 0x7f) `shiftL` shift)
+          shift' = shift + 7
+      if testBit b 7
+        then go shift' acc'
+        else pure (if testBit b 6 then acc' - (1 `shiftL` shift') else acc')
diff --git a/src/Tilia/Fixity/Interface.hs b/src/Tilia/Fixity/Interface.hs
--- a/src/Tilia/Fixity/Interface.hs
+++ b/src/Tilia/Fixity/Interface.hs
@@ -1,14 +1,18 @@
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
 
 -- | Reading a module's operators out of interface files.
 module Tilia.Fixity.Interface
   ( Interface (..),
     readInterface,
     parseInterface,
+    fromHiFile,
   )
 where
 
+import Control.Monad ((<=<))
+import Data.ByteString qualified as BS
 import Data.Char (isUpper)
 import Data.Map.Strict (Map)
 import Data.Map.Strict qualified as Map
@@ -19,6 +23,7 @@
 import Data.Text qualified as T
 import Data.Text.Read qualified as T
 import Tilia.Fixity
+import Tilia.Fixity.HiFile (HiExport (..), HiFile (..), HiName (..), decodeHiFile)
 import Tilia.Process (readProgramOutput)
 import Tilia.Utils (quietly)
 
@@ -27,36 +32,69 @@
   { -- | The fixities the module declares itself, by the namespace each
     -- governs.
     interfaceDeclares :: Fixities,
-    -- | The names it exports that some other module declared, each with the
-    -- module that did. Not only the operators: a plain function can be
-    -- given a fixity and used in backticks, and one of these is where the
-    -- declaration would be.
-    interfacePassedOn :: [(Text, OpName)],
-    -- | What it exports under each name, for the names that carry others
-    -- with them. This is what @T(..)@ in an import list stands for, and the
-    -- compiler has already worked it out: an export entry wears its members
-    -- in braces.
+    -- | The names it reexports, each with the source module.
+    interfaceReexports :: [(Text, OpName)],
+    -- | What it exports under each name. This is what @T(..)@ in an import
+    -- list stands for.
     interfaceChildren :: Map OpName (Set OpName)
   }
   deriving (Eq, Show)
 
--- | Read a module's interface file, if the compiler will show it to us.
+-- | Read a module's interface file.
 --
--- 'Nothing' where it will not, which covers a file that is not there, one
--- built by another compiler, and @ghc@ not being on the path at all. None
--- of those is fatal; they only mean this module has nothing to add.
+-- The file is decoded directly where it can be, and put to @ghc
+-- --show-iface@ otherwise.
 readInterface ::
-  -- | The module the file is supposed to hold
+  -- | The module the file is supposed to hold.
   Text ->
-  -- | The file
+  -- | The file.
   FilePath ->
   IO (Maybe Interface)
 readInterface modName path =
   quietly Nothing $
-    readProgramOutput "ghc" ["--show-iface", path] >>= \case
-      Nothing -> pure Nothing
-      Just out -> pure (parseInterface modName out)
+    (fromHiFile modName <=< decodeHiFile) <$> BS.readFile path >>= \case
+      Right interface -> pure (Just interface)
+      Left _ ->
+        readProgramOutput "ghc" ["--show-iface", path] >>= \case
+          Nothing -> pure Nothing
+          Just out -> pure (parseInterface modName out)
 
+-- | What a decoded interface file says, if it is this module's and names
+-- nothing only GHC can resolve.
+fromHiFile :: Text -> HiFile -> Either Text Interface
+fromHiFile modName HiFile{..}
+  | hiModule /= modName = Left ("the interface of " <> hiModule)
+  | otherwise = do
+      exports <- traverse resolved hiExports
+      pure
+        Interface
+          { interfaceDeclares =
+              Map.fromList [((namespace, op), fixity) | (namespace, op, fixity) <- hiFixities],
+            interfaceReexports =
+              [ (m, op)
+              | names <- exports,
+                (m, _, op) <- names,
+                m /= hiModule
+              ],
+            interfaceChildren =
+              Map.fromListWith
+                Set.union
+                [ (op, Set.fromList [kid | (_, _, kid) <- kids])
+                | parent@(_, _, op) : named <- exports,
+                  let kids = case named of
+                        first : rest | first == parent -> rest
+                        _ -> named,
+                  not (null kids)
+                ]
+          }
+  where
+    resolved = \case
+      Avail n -> pure <$> known n
+      AvailTC p ns -> (:) <$> known p <*> traverse known ns
+    known = \case
+      HiName m namespace op -> Right (m, namespace, op)
+      KnownKey _ -> Left "a name only GHC can resolve"
+
 -- | Read what @ghc --show-iface@ printed, if it is this module's interface.
 parseInterface :: Text -> Text -> Maybe Interface
 parseInterface modName out
@@ -68,29 +106,29 @@
               namespaced
                 (typeNamesIn out)
                 (Map.fromList (concatMap declared (sectionsNamed "fixities"))),
-            interfacePassedOn = concatMap passedOn (sectionsNamed "exports:"),
+            interfaceReexports = concatMap reexports (sectionsNamed "exports:"),
             interfaceChildren =
-              Map.unionsWith Set.union (map childrenIn (sectionsNamed "exports:"))
+              Map.unionsWith Set.union (fmap childrenIn (sectionsNamed "exports:"))
           }
   where
     holdsModule l = case T.words l of
       ("interface" : m : _) -> m == modName
       _ -> False
-    sectionsNamed name = [body | (heading, body) <- sections out, heading == name]
+    sectionsNamed name =
+      [ T.replace "|{" "{" body
+      | (heading, body) <- sections out,
+        heading == name
+      ]
     declared = mapMaybe fixityEntry . T.splitOn ","
-    passedOn = concatMap fromExport . T.words
+    reexports = concatMap reexportsIn . T.words
     childrenIn section =
       Map.fromListWith
         Set.union
-        [ (nameOnly parent, Set.fromList (map nameOnly kids))
+        [ (nameOnly parent, Set.fromList (fmap nameOnly kids))
         | (parent, kids@(_ : _)) <- exportEntries section
         ]
 
 -- | The names an interface declares as types.
---
--- The compiler writes each declaration out, and a type is written as one:
--- @data (:~:) a b where@, @type (==) :: …@, @class Eq a where@. A name
--- that turns up in none of those is a value, which is the other namespace.
 typeNamesIn :: Text -> Set OpName
 typeNamesIn out =
   Set.fromList
@@ -105,11 +143,6 @@
     indented l = maybe False (== ' ') (fst <$> T.uncons l)
 
 -- | Sort declared fixities into the namespaces they govern.
---
--- A fixity for a name the interface declares as a type governs types; one
--- for any other name governs terms. A name that is both—rare, and legal—
--- gets the fixity in both, which is what the interface says: it records
--- one fixity for the name and no namespace of its own.
 namespaced :: Set OpName -> Map OpName Fixity -> Fixities
 namespaced types declared =
   Map.fromList
@@ -154,11 +187,6 @@
 
 -- | Split an exports section into its entries, keeping the members an entry
 -- wears in braces with the name they belong to.
---
--- An entry is @Some.Module.T@, or @Some.Module.T{Some.Module.A
--- Some.Module.B}@ where @T@ carries names with it. A partial export writes
--- the name as @T|@, which says that not all of them are there; the ones in
--- the braces are still exactly what @T(..)@ would bring in.
 exportEntries :: Text -> [(Text, [Text])]
 exportEntries = go
   where
@@ -172,19 +200,16 @@
                 let (kids, after) = T.break (== '}') inside
                  in (bare name, T.words kids) : go (T.drop 1 after)
               _ -> (bare name, []) : go rest
-    bare = T.dropWhileEnd (`elem` ("|," :: String))
+    bare = T.dropWhileEnd (== ',')
 
 -- | An exported name without the module that declared it.
 nameOnly :: Text -> OpName
 nameOnly t = OpName (maybe t snd (moduleOf t))
 
--- | The names an export entry passes on, with the module that declared each.
---
--- An entry is a name, and a type or class is followed by its members in
--- braces. A name written bare was declared by the module whose interface
--- this is, and is left out: its fixity is in the @fixities@ line already.
-fromExport :: Text -> [(Text, OpName)]
-fromExport = mapMaybe qualified . T.split (`elem` ("{}|," :: String))
+-- | The names an export entry reexports, with the module that declared
+-- each.
+reexportsIn :: Text -> [(Text, OpName)]
+reexportsIn = mapMaybe qualified . T.split (`elem` ("{}," :: String))
   where
     qualified name = case moduleOf name of
       Just (m, n) | not (T.null n) -> Just (m, OpName n)
diff --git a/src/Tilia/Fixity/PackageDb.hs b/src/Tilia/Fixity/PackageDb.hs
--- a/src/Tilia/Fixity/PackageDb.hs
+++ b/src/Tilia/Fixity/PackageDb.hs
@@ -1,20 +1,8 @@
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | Which package exposes a module, according to the compiler.
---
--- The other way of answering this — reading @exposed-modules@ from a
--- @.cabal@ file inside a source tarball — only works where tarballs are.
--- Under Nix they are not: dependencies arrive already built, and a plan
--- solved there calls almost all of them @pre-existing@, so nothing is ever
--- looked for.
---
--- The compiler always knows, though, because it is what compiles against
--- them. Asking @ghc-pkg@ works in both worlds and is the faster of the two.
---
--- What this does /not/ give is fixities. A package database records what
--- was built, not what it was built from, so the source is still read from a
--- tarball; this only decides which tarball to look for.
+-- | Querying the compiler on which package exposes a module and where its
+-- compiled interfaces are.
 module Tilia.Fixity.PackageDb
   ( InstalledPackage (..),
     Installed (..),
@@ -36,15 +24,14 @@
 import Tilia.Process (readProgramOutput)
 import Tilia.Utils (quietly)
 
--- | A package the compiler can see.
+-- | An installed package.
 data InstalledPackage = InstalledPackage
   { -- | Package name
     ipName :: Text,
     -- | Package version
     ipVersion :: Text,
     -- | Every module it holds, hidden ones included, with re-export clauses
-    -- dropped: those name modules belonging to another package, and looking
-    -- there is that package's business.
+    -- dropped.
     ipModules :: [Text],
     -- | Where its compiled interfaces are.
     ipImportDirs :: [FilePath]
@@ -55,6 +42,8 @@
 data Installed = Installed
   { -- | Every package it can see.
     installedPackages :: [InstalledPackage],
+    -- | The databases those were read from. Stamping these is how a later
+    -- run tells whether what the compiler can see has changed.
     installedDatabases :: [FilePath]
   }
   deriving (Eq, Show)
@@ -74,7 +63,7 @@
     readProgramOutput "ghc-pkg" ["dump", "--global", "--user"] >>= \case
       Nothing -> pure (Installed [] [])
       Just out -> do
-        let fields = map parseFields (records out)
+        let fields = fmap parseFields (records out)
         databases <- filterM doesDirectoryExist (databasesIn fields)
         pure
           Installed
@@ -82,20 +71,7 @@
               installedDatabases = databases
             }
 
--- | What tells one compiler environment from another.
---
--- The resolved path of the @ghc-pkg@ that 'readInstalledPackages' will run.
--- Which packages a run can see is settled by that program and by nothing in
--- the project, so it is what an answer about them has to be filed under.
--- Under Nix the path is a store path, and it changes exactly when the
--- environment does; elsewhere it is stable, which is the same thing said of
--- an environment that does not change.
---
--- Hashing the databases themselves would be more exact, but they cannot be
--- named without running @ghc-pkg dump@—the very thing being remembered.
---
--- Empty where there is no @ghc-pkg@ to find, which is a state a run can be
--- in and has to be told apart from the others.
+-- | What distinguishes one compiler environment from another.
 compilerIdentity :: IO Text
 compilerIdentity =
   quietly "" (maybe "" T.pack <$> findExecutable "ghc-pkg")
@@ -115,7 +91,7 @@
 
 -- | Split @ghc-pkg dump@ output into its records.
 records :: Text -> [Text]
-records = map T.unlines . go . T.lines
+records = fmap T.unlines . go . T.lines
   where
     go ls = case break (== "---") ls of
       (record, []) -> [record | not (null record)]
@@ -137,7 +113,7 @@
         ipImportDirs =
           maybe
             []
-            (map (T.unpack . rooted fields . unquote) . T.words)
+            (fmap (T.unpack . rooted fields . unquote) . T.words)
             (Map.lookup "import-dirs" fields)
       }
 
@@ -161,9 +137,6 @@
       Nothing -> False
 
 -- | Split a record into its fields.
---
--- A field is @name: value@, and its value continues onto any following
--- indented lines.
 parseFields :: Text -> Map.Map Text Text
 parseFields = Map.fromList . mapMaybe field . groups . T.lines
   where
@@ -180,5 +153,5 @@
     field (l : rest) = case T.breakOn ":" l of
       (key, value)
         | not (T.null value) ->
-            Just (T.strip key, T.unwords (T.drop 1 value : map T.strip rest))
+            Just (T.strip key, T.unwords (T.drop 1 value : fmap T.strip rest))
       _ -> Nothing
diff --git a/src/Tilia/Fixity/Plan.hs b/src/Tilia/Fixity/Plan.hs
--- a/src/Tilia/Fixity/Plan.hs
+++ b/src/Tilia/Fixity/Plan.hs
@@ -1,6 +1,8 @@
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
 
 -- | "Tilia.Fixity" resolves a module's operators exactly, given a function
 -- that says what each imported module exports. This is that function, built
@@ -13,8 +15,10 @@
     sourceHashOf,
     BuildPlan (..),
     readBuildPlan,
-    planToken,
-    tokenFor,
+    readGivenPlan,
+    fetchUninstalled,
+    tokenForEnvAndBuildPlan,
+    tokenForBuildPlan,
     macrosOf,
 
     -- * Readiness
@@ -27,8 +31,8 @@
     plannedTarballs,
     packageCacheRoot,
     guessedPackageCacheRoot,
-    Solves (..),
-    forgetfulSolves,
+    Futility (..),
+    undiscoveredFutility,
     prepareWith,
     loadPlan,
 
@@ -45,7 +49,10 @@
 import Codec.Archive.Tar qualified as Tar
 import Codec.Compression.GZip qualified as GZip
 import Control.Applicative ((<|>))
-import Control.Monad (filterM, foldM, join)
+import Control.Concurrent (getNumCapabilities, newEmptyMVar, putMVar, readMVar)
+import Control.Concurrent.QSem (newQSem, signalQSem, waitQSem)
+import Control.Exception (bracket_)
+import Control.Monad (filterM, foldM, join, void)
 import Crypto.Hash.SHA256 qualified as SHA256
 import Data.Aeson
   ( FromJSON (..),
@@ -60,7 +67,7 @@
 import Data.ByteString qualified as BS
 import Data.ByteString.Base16 qualified as B16
 import Data.ByteString.Lazy qualified as BL
-import Data.Choice (Choice, fromBool)
+import Data.Choice (Choice, fromBool, isTrue, pattern Do)
 import Data.Foldable (toList, traverse_)
 import Data.IORef
 import Data.List (isSuffixOf)
@@ -90,7 +97,7 @@
   )
 import System.Environment (lookupEnv)
 import System.Exit (ExitCode (..))
-import System.FilePath (takeDirectory, (</>))
+import System.FilePath (isRelative, takeDirectory, (</>))
 import System.IO (hFlush, stderr)
 import System.Info qualified
 import System.Process
@@ -102,7 +109,8 @@
     std_out,
     waitForProcess,
   )
-import Tilia.Cpp (branchLeaves, withoutRuledOut)
+import Tilia.Cabal.Package (newPackageReader)
+import Tilia.Cpp.Directives (branchLeaves, withoutRuledOut)
 import Tilia.Cpp.Macros (Macros (..))
 import Tilia.Fixity
 import Tilia.Fixity.Builtin (builtinFixities)
@@ -119,11 +127,10 @@
 import Tilia.Fixity.Cache
 import Tilia.Fixity.Interface
 import Tilia.Fixity.PackageDb
-import Tilia.Package (newPackageReader)
 import Tilia.Parser
 import Tilia.Pragma (effectiveExtensions)
 import Tilia.Process (readProgramOutput)
-import Tilia.Utils (quietly)
+import Tilia.Utils (inParallel, quietly)
 
 ----------------------------------------------------------------------------
 -- The plan
@@ -142,19 +149,12 @@
     -- time and gives each its own entry. A package it cannot take apart—one
     -- with a @Custom@ build type, whose @Setup.hs@ is entitled to do as it
     -- pleases—is planned whole instead, and its entry is about every
-    -- component at once. Empty where the entry is about none of them.
+    -- component at once.
     ppComponents :: [Text]
   }
   deriving (Eq, Show)
 
--- | Where a package's source is, if anywhere.
---
--- A plan contains exactly three kinds of entry and they are mutually
--- exclusive, which two independent flags could not say: a package cannot be
--- both shipped with the compiler and fetched from Hackage. Each carries
--- what is peculiar to it and nothing else, so there is no hash to consult
--- on a package that has no tarball, and no tarball to look for on one that
--- is a directory.
+-- | Where a package's source is.
 data PackageSource
   = -- | Already installed, so @cabal@ will not build it.
     --
@@ -165,42 +165,27 @@
     LocalPackage FilePath
   | -- | Fetched from a repository as a tarball, with the SHA-256 the plan
     -- expects it to have and where it was fetched from.
-    --
-    -- Hackage is one such repository and not a special one. A company that
-    -- runs its own has packages here exactly as Hackage does, and the only
-    -- difference that reaches us is where the tarball landed.
-    RepoPackage (Maybe Text) Repository
+    RepoPackage (Maybe Text) RepoProvenance
   | -- | A @source-repository-package@ we have not found the sources of.
-    --
-    -- The plan says where the repository is, which is of no use: what is
-    -- wanted is where @cabal@ put the clone, and the plan does not say. A
-    -- package that stays this way is one nothing can be read from, which is
-    -- what every one of them was before 'checkedOutIn' went looking.
     SourceRepo
   | -- | The same, found unpacked under the project's own @dist-newstyle@.
-    --
-    -- A directory of sources like 'LocalPackage', and read the same way.
-    -- Kept apart from it because a dependency is not one of the project's
-    -- own packages: its components are not components a run formats, and
-    -- its @.cabal@ file being newer than the plan says nothing about
-    -- whether the plan is stale.
     CheckedOut FilePath
   deriving (Eq, Show)
 
 -- | Which repository a package was fetched from, as far as it bears on
 -- finding the tarball afterwards.
-data Repository
+data RepoProvenance
   = -- | One @cabal@ downloads from, named by its URI. The tarball goes into
     -- the package cache, in a directory named after the repository as the
     -- configuration spells it.
-    Downloaded Text
+    RepoDownloaded Text
   | -- | A directory of tarballs, named by @file+noindex@. Nothing is
     -- downloaded and nothing is cached: the tarball is already sitting
     -- there, beside the index @cabal@ wrote for it.
-    ADirectory FilePath
+    RepoFromDirectory FilePath
   | -- | A plan that does not say. Older @cabal@ wrote nothing here, and
     -- Hackage is the only guess worth making.
-    Unsaid
+    RepoNoProvenance
   deriving (Eq, Show)
 
 -- | Is there a tarball to go and read?
@@ -210,8 +195,8 @@
   _ -> False
 
 -- | Every package the compiler can see.
-whatTheCompilerSees :: Maybe Cache -> IO [InstalledPackage]
-whatTheCompilerSees cache =
+getInstalledPackages :: Maybe Cache -> IO [InstalledPackage]
+getInstalledPackages cache =
   remembered >>= \case
     Just packages -> pure packages
     Nothing -> do
@@ -223,20 +208,15 @@
 
 -- | Summarize a 'BuildPlan', and the environment it will be read in, by
 -- hashing over both.
---
--- The plan alone would not do. What a failure to read a module leans on is
--- partly the plan and partly the compiler this run can ask: a package the
--- plan names is unreadable where @ghc-pkg@ does not expose it and readable
--- where it does, and one shell can differ from another in that while
--- solving the very same plan. Tying failures to the plan alone would let
--- one shell's \"could not be read\" be handed to a shell that can.
-tokenFor :: BuildPlan -> IO PlanToken
-tokenFor plan = flip planToken plan <$> compilerIdentity
+tokenForBuildPlan :: BuildPlan -> IO PlanToken
+tokenForBuildPlan plan = do
+  environment <- compilerIdentity
+  pure (tokenForEnvAndBuildPlan environment plan)
 
--- | 'tokenFor' without the asking, so that what goes into the token is
--- visible in one place.
-planToken :: Text -> BuildPlan -> PlanToken
-planToken environment plan =
+-- | Similar to 'tokenForBuildPlan', but allows passing a compiler identity
+-- as an argument.
+tokenForEnvAndBuildPlan :: Text -> BuildPlan -> PlanToken
+tokenForEnvAndBuildPlan environment plan =
   PlanToken
     . T.take 16
     . T.decodeUtf8Lenient
@@ -245,7 +225,7 @@
     . T.encodeUtf8
     $ T.intercalate
       "\n"
-      (environment : bpCompiler plan : Data.List.sort (map cacheKey (bpPackages plan)))
+      (environment : bpCompiler plan : Data.List.sort (fmap cacheKey (bpPackages plan)))
 
 -- | The SHA-256 the plan expects this package's tarball to have.
 sourceHashOf :: PlanPackage -> Maybe Text
@@ -291,9 +271,9 @@
               RepoPackage
                 sourceHash
                 ( case (join (join repoKind) :: Maybe Text, join (join repoPath), join (join repoUri)) of
-                    (Just "local-repo-no-index", Just dir, _) -> ADirectory (T.unpack dir)
-                    (_, _, Just uri) -> Downloaded uri
-                    _ -> Unsaid
+                    (Just "local-repo-no-index", Just dir, _) -> RepoFromDirectory (T.unpack dir)
+                    (_, _, Just uri) -> RepoDownloaded uri
+                    _ -> RepoNoProvenance
                 )
             (_, Just "local") -> LocalPackage (maybe "" T.unpack (join sourcePath))
             (_, Just "source-repo") -> SourceRepo
@@ -328,16 +308,36 @@
         Left why -> pure (Left (T.pack why))
         Right plan -> Right <$> checkedOutIn (takeDirectory (takeDirectory path)) plan
 
+-- | Read a plan that is to be trusted as up to date.
+readGivenPlan ::
+  -- | The project root.
+  FilePath ->
+  -- | The plan.
+  FilePath ->
+  IO (Either Text BuildPlan)
+readGivenPlan root path = do
+  exists <- doesFileExist path
+  if exists
+    then
+      eitherDecodeFileStrict path >>= \case
+        Left why -> pure (Left (T.pack why))
+        Right plan -> pure (Right plan{bpPackages = fmap rooted (bpPackages plan)})
+    else pure (Left ("no build plan at " <> T.pack path))
+  where
+    rooted p = case ppSource p of
+      LocalPackage dir | isRelative dir -> p{ppSource = LocalPackage (root </> dir)}
+      _ -> p
+
 -- | Find where @cabal@ unpacked each @source-repository-package@.
 checkedOutIn :: FilePath -> BuildPlan -> IO BuildPlan
 checkedOutIn distDir plan = do
   packages <- traverse locate (bpPackages plan)
-  pure plan {bpPackages = packages}
+  pure plan{bpPackages = packages}
   where
     locate p = case ppSource p of
       SourceRepo ->
         clonesOf p >>= \case
-          (dir : _) -> pure p {ppSource = CheckedOut dir}
+          (dir : _) -> pure p{ppSource = CheckedOut dir}
           [] -> pure p
       _ -> pure p
     clonesOf p = quietly [] $ do
@@ -396,8 +396,7 @@
         _ -> Nothing
     nth i xs = if i < length xs then xs !! i else 0
 
--- | The modules @cabal@ writes itself for a plan's packages, and which are
--- therefore in nobody's sources.
+-- | The modules @cabal@ writes itself for a plan's packages.
 generatedModules :: BuildPlan -> Set Text
 generatedModules plan =
   Set.fromList
@@ -423,7 +422,7 @@
 ----------------------------------------------------------------------------
 -- Readiness
 
--- | A component of the project, named the way a build plan names one.
+-- | A component of the project.
 data PlanComponent = PlanComponent
   { -- | The package it belongs to.
     pcPackage :: Text,
@@ -459,9 +458,8 @@
     -- nor built. The names are listed so that a caller can say what it is
     -- waiting for.
     --
-    -- Built counts as having them: their interfaces answer everything the
-    -- source would have been read for, so a package the compiler already
-    -- holds is not missing however absent its tarball is.
+    -- Built counts as having them: their interfaces provide everything the
+    -- source tarball would.
     SourcesMissing [Text]
   deriving (Eq, Show)
 
@@ -469,12 +467,12 @@
 planPathFor :: FilePath -> FilePath
 planPathFor projectDir = projectDir </> "dist-newstyle" </> "cache" </> "plan.json"
 
--- | Check what is missing, cheaply.
+-- | Check what is missing.
 --
 -- One read of the plan and one @stat@ per package, so this is fast enough
--- to run before every format without anyone noticing.
-checkReadiness :: [PlanComponent] -> FilePath -> IO Readiness
-checkReadiness wanted projectDir =
+-- to run before every format.
+checkReadiness :: Choice "useCache" -> [PlanComponent] -> FilePath -> IO Readiness
+checkReadiness caching wanted projectDir =
   readBuildPlan (planPathFor projectDir) >>= \case
     Left _ -> pure PlanMissing
     Right plan -> do
@@ -485,31 +483,23 @@
         (_ : _, _) -> pure (PlanStale newer)
         ([], _ : _) -> pure (PlanNarrow missing)
         ([], []) ->
-          sourcesShortOf plan >>= \case
+          sourcesShortOf caching plan >>= \case
             [] -> pure Ready
-            ns -> pure (SourcesMissing ns)
+            ps -> pure (SourcesMissing (fmap ppName ps))
 
 -- | The packages the plan expects to fetch whose sources are not here.
---
--- Asked apart from the rest of 'checkReadiness' because it is a different
--- question with a different answer. Whether the plan covers the components
--- a run is about to format is about the plan; whether the sources it names
--- are on this machine is about the machine, and a plan that will never
--- cover everything—one component of the project does not build, and the
--- solver leaves it out—must not stop the sources for the rest being
--- fetched.
-sourcesShortOf :: BuildPlan -> IO [Text]
-sourcesShortOf plan = do
+sourcesShortOf :: Choice "useCache" -> BuildPlan -> IO [PlanPackage]
+sourcesShortOf caching plan = do
   tarballs <- filter (isFetchable . fst) <$> plannedTarballs plan
-  absent <- map fst <$> filterM (fmap not . doesFileExist . snd) tarballs
+  absent <- fmap fst <$> filterM (fmap not . doesFileExist . snd) tarballs
   short <-
     if null absent
       then pure []
       else do
-        cache <- openCache =<< tokenFor plan
-        installed <- whatTheCompilerSees cache
+        cache <- openCache caching =<< tokenForBuildPlan plan
+        installed <- getInstalledPackages cache
         pure (filter (not . builtAlready installed) absent)
-  pure (map ppName short)
+  pure short
 
 -- | Has the compiler got this package already?
 builtAlready :: [InstalledPackage] -> PlanPackage -> Bool
@@ -518,12 +508,6 @@
     matches i = ipName i == ppName p && ipVersion i == ppVersion p
 
 -- | The project files that have changed since the plan was written.
---
--- A plan describes the dependencies as they were when @cabal@ last solved.
--- Edit a @build-depends@ and the plan on disk is about a different project,
--- and resolving fixities against it would answer for packages that are no
--- longer in play. Comparing modification times is one @stat@ each, so this
--- costs nothing to check every time.
 filesNewerThanPlan :: BuildPlan -> FilePath -> IO [FilePath]
 filesNewerThanPlan plan projectDir = quietly [] $ do
   planTime <- getModificationTime (planPathFor projectDir)
@@ -539,7 +523,7 @@
     projectFiles =
       ["cabal.project", "cabal.project.local", "cabal.project.freeze"]
     localDirs p =
-      Data.List.nub [dir | LocalPackage dir <- map ppSource (bpPackages p)]
+      Data.List.nub [dir | LocalPackage dir <- fmap ppSource (bpPackages p)]
     cabalFilesIn dir = quietly [] $ do
       entries <- listDirectory dir
       pure [dir </> f | f <- entries, ".cabal" `isSuffixOf` f]
@@ -548,29 +532,34 @@
       pure (if t > planTime then Just path else Nothing)
 
 -- | Do whatever is missing, by asking @cabal@.
---
--- Neither of these builds anything: a dry run only solves, and
--- @--only-download@ only fetches. Both are one-time costs, and @cabal@'s
--- package cache is shared between projects, so a machine that has seen a
--- dependency once never fetches it again.
---
--- This runs a subprocess and may reach the network, so it is a separate
--- call rather than something 'newResolver' does behind the caller's back.
--- An editor formatting on save must not block on it.
-prepare :: [PlanComponent] -> FilePath -> Readiness -> IO (Either Text ())
-prepare wanted projectDir readiness =
-  prepareWith (runCabal projectDir) (solvesFor projectDir) wanted projectDir readiness
+prepare ::
+  -- | Whether to use the cache.
+  Choice "useCache" ->
+  -- | Whether to download what is missing.
+  Choice "download" ->
+  -- | The components the run is about to format.
+  [PlanComponent] ->
+  -- | The project being prepared.
+  FilePath ->
+  -- | What it was found to be short of.
+  Readiness ->
+  IO (Either Text ())
+prepare caching downloading wanted projectDir readiness =
+  prepareWith
+    caching
+    downloading
+    (runCabal projectDir)
+    (futilityFor caching projectDir)
+    wanted
+    projectDir
+    readiness
 
--- | What a run knows about the asking earlier runs did, and how to add to
--- it.
---
--- Both halves are the same idea: @cabal@ was asked for something, it did
--- not help, and asking again will not help either. A run that formats on
--- save would otherwise ask on every save.
-data Solves = Solves
+-- | An account of actions we know are not worth attempting.
+data Futility = Futility
   { -- | Has solving this plan already been tried and left it as narrow?
     solveWasFutile :: IO Bool,
-    -- | Remember that it has.
+    -- | Record that a solve has been run and left it narrow, which is what
+    -- 'solveWasFutile' answers from afterwards.
     rememberFutileSolve :: IO (),
     -- | The packages an earlier fetch was still short of afterwards.
     fetchWasFutileFor :: IO [Text],
@@ -578,24 +567,20 @@
     rememberFutileFetch :: [Text] -> IO ()
   }
 
--- | Solves remembered nowhere, for a caller with nothing to remember them
--- in.
-forgetfulSolves :: Solves
-forgetfulSolves =
-  Solves
+-- | The state when we know nothing about futile actions yet.
+undiscoveredFutility :: Futility
+undiscoveredFutility =
+  Futility
     { solveWasFutile = pure False,
       rememberFutileSolve = pure (),
       fetchWasFutileFor = pure [],
       rememberFutileFetch = const (pure ())
     }
 
--- | Solves remembered in the cache, under the plan the project has now.
---
--- A project with no readable plan has no token to file anything under, and
--- nothing to remember either: a solve is exactly what it needs.
-solvesFor :: FilePath -> Solves
-solvesFor projectDir =
-  Solves
+-- | A memory kept in the cache, under the plan the project has now.
+futilityFor :: Choice "useCache" -> FilePath -> Futility
+futilityFor caching projectDir =
+  Futility
     { solveWasFutile = withCache False cachedFutileSolve,
       rememberFutileSolve = withCache () storeFutileSolve,
       fetchWasFutileFor = withCache [] cachedFutileFetch,
@@ -606,29 +591,34 @@
       readBuildPlan (planPathFor projectDir) >>= \case
         Left _ -> pure fallback
         Right plan -> do
-          opened <- openCache =<< tokenFor plan
+          opened <- openCache caching =<< tokenForBuildPlan plan
           maybe (pure fallback) use opened
 
--- | 'prepare', given a way to run @cabal@ and a memory of earlier solves.
+-- | 'prepare', given a way to run @cabal@ and a memory of what earlier
+-- attempts came to.
 prepareWith ::
-  -- | Run @cabal@ with these arguments
+  -- | Whether to use the cache.
+  Choice "useCache" ->
+  -- | Whether to download what is missing.
+  Choice "download" ->
+  -- | Run @cabal@ with these arguments.
   ([String] -> IO (Either Text ())) ->
-  -- | What is known about solves already asked for
-  Solves ->
-  -- | The components the run is about to format
+  -- | What earlier attempts came to.
+  Futility ->
+  -- | The components the run is about to format.
   [PlanComponent] ->
-  -- | The project being prepared
+  -- | The project being prepared.
   FilePath ->
-  -- | What it was found to be short of
+  -- | What it was found to be short of.
   Readiness ->
   IO (Either Text ())
-prepareWith cabal solves wanted projectDir = \case
+prepareWith caching downloading cabal futility wanted projectDir = \case
   Ready -> pure (Right ())
   SourcesMissing _ -> fetch
   PlanMissing -> solveThenFetch
   PlanStale _ -> solveThenFetch
   PlanNarrow _ ->
-    solveWasFutile solves >>= \case
+    solveWasFutile futility >>= \case
       True -> fetchWhatIsShort
       False -> solveThenFetch
   where
@@ -637,29 +627,31 @@
       cabal (args <> wholeProject) >>= \case
         Right () -> pure (Right ())
         Left _ -> cabal args
-    fetch = tryWholeProject ["build", "all", "--only-download"]
+    fetch
+      | isTrue downloading = tryWholeProject ["build", "all", "--only-download"]
+      | otherwise = pure (Right ())
     fetchWhatIsShort =
       readBuildPlan (planPathFor projectDir) >>= \case
         Left _ -> pure (Right ())
         Right plan -> do
-          short <- sourcesShortOf plan
-          refused <- fetchWasFutileFor solves
+          short <- fmap ppName <$> sourcesShortOf caching plan
+          refused <- fetchWasFutileFor futility
           if null short || all (`elem` refused) short
             then pure (Right ())
             else
               fetch >>= \case
                 Left err -> pure (Left err)
                 Right () -> do
-                  left <- sourcesShortOf plan
-                  rememberFutileFetch solves left
+                  left <- sourcesShortOf caching plan
+                  rememberFutileFetch futility (fmap ppName left)
                   pure (Right ())
     solveThenFetch =
       tryWholeProject ["build", "all", "--dry-run"] >>= \case
         Left err -> pure (Left err)
         Right () ->
-          checkReadiness wanted projectDir >>= \case
+          checkReadiness caching wanted projectDir >>= \case
             SourcesMissing _ -> fetch
-            PlanNarrow _ -> rememberFutileSolve solves >> fetchWhatIsShort
+            PlanNarrow _ -> rememberFutileSolve futility >> fetchWhatIsShort
             _ -> pure (Right ())
 
 -- | Run @cabal@ in a project directory, letting it speak for itself.
@@ -680,36 +672,50 @@
   code <- waitForProcess running
   pure $ case code of
     ExitSuccess -> Right ()
-    _ -> Left ("cabal " <> T.unwords (map T.pack args) <> " failed; see above")
+    _ -> Left ("cabal " <> T.unwords (fmap T.pack args) <> " failed; see above")
 
+-- | Fetch the sources of a trusted plan's dependencies that are neither
+-- installed nor fetched already, at the versions the plan names.
+fetchUninstalled ::
+  -- | Whether to use the cache.
+  Choice "useCache" ->
+  -- | The project the plan is for.
+  FilePath ->
+  -- | The build plan to use.
+  BuildPlan ->
+  IO ()
+fetchUninstalled caching projectDir plan =
+  sourcesShortOf caching plan >>= \case
+    [] -> pure ()
+    short ->
+      void . runCabal projectDir $
+        "fetch"
+          : "--no-dependencies"
+          : [T.unpack (ppName p <> "-" <> ppVersion p) | p <- short]
+
 -- | Get a plan that is safe to use, doing whatever @cabal@ work is needed.
---
--- This is the call most users want. It checks, asks @cabal@ if anything is
--- missing or possibly out of date, and then reads the plan. 'prepare' does
--- at most one solve and one fetch however much is missing, so a project
--- whose files are merely newer than its plan cannot send this into a loop,
--- and the plan is read once at the end rather than judged again.
-loadPlan :: [PlanComponent] -> FilePath -> IO (Either Text BuildPlan)
-loadPlan wanted projectDir = do
-  readiness <- checkReadiness wanted projectDir
-  prepare wanted projectDir readiness >>= \case
+loadPlan ::
+  -- | Whether to use the cache.
+  Choice "useCache" ->
+  -- | Whether to download what is missing.
+  Choice "download" ->
+  -- | The components the run is about to format, so that a plan which says
+  -- nothing about them is solved again rather than trusted.
+  [PlanComponent] ->
+  -- | The project whose plan it is.
+  FilePath ->
+  IO (Either Text BuildPlan)
+loadPlan caching downloading wanted projectDir = do
+  readiness <- checkReadiness caching wanted projectDir
+  prepare caching downloading wanted projectDir readiness >>= \case
     Left err -> pure (Left err)
     _ -> readBuildPlan (planPathFor projectDir)
 
 -- | Every planned package whose source could be in the package cache, with
 -- where that would be.
---
--- Not only the ones the plan will fetch. A package already installed still
--- has a tarball in the cache if anything ever downloaded it, and under Nix
--- that is the normal case for every dependency. A package with no tarball
--- costs one @stat@ and falls through.
---
--- Local packages are excluded: they are directories, not archives.
 plannedTarballs :: BuildPlan -> IO [(PlanPackage, FilePath)]
 plannedTarballs plan = do
   cacheRoot <- packageCacheRoot
-  -- Listed once rather than once per package: a plan holds hundreds of
-  -- these and the answer is the same for every one of them.
   repos <- quietly [] (Data.List.sort <$> listDirectory cacheRoot)
   traverse
     (\p -> (,) p <$> tarballFor cacheRoot repos p)
@@ -724,18 +730,23 @@
 -- repository it downloads from.
 packageCacheRoot :: IO FilePath
 packageCacheRoot =
-  readProgramOutput "cabal" ["path", "--remote-repo-cache", "--output-format=json"] >>= \case
-    Just said | Just dir <- remoteRepoCacheIn said -> pure dir
-    _ -> guessedPackageCacheRoot
+  readProgramOutput
+    "cabal"
+    ["path", "--remote-repo-cache", "--output-format=json"]
+    >>= \case
+      Just said | Just dir <- remoteRepoCacheIn said -> pure dir
+      _ -> guessedPackageCacheRoot
 
 -- | The package cache directory, out of what @cabal path@ printed.
 remoteRepoCacheIn :: Text -> Maybe FilePath
 remoteRepoCacheIn said = do
-  spoken <- listToMaybe (reverse (filter (not . T.null) (map T.strip (T.lines said))))
+  spoken <-
+    listToMaybe $
+      reverse (filter (not . T.null) (fmap T.strip (T.lines said)))
   value <- decodeStrict (T.encodeUtf8 spoken)
   parseMaybe (withObject "cabal path" (.: "remote-repo-cache")) value
 
--- | Where @cabal@ probably keeps them, for a @cabal@ that will not say.
+-- | Where @cabal@ probably keeps its downloaded packages.
 guessedPackageCacheRoot :: IO FilePath
 guessedPackageCacheRoot =
   lookupEnv "CABAL_DIR" >>= \case
@@ -770,25 +781,29 @@
 
 -- | Where a package's source tarball is, or where fetching would put it.
 tarballFor :: FilePath -> [FilePath] -> PlanPackage -> IO FilePath
-tarballFor cacheRoot repos p = case repositoryOf p of
-  ADirectory dir -> pure (dir </> flat)
-  Downloaded uri -> searched (hostOf uri)
-  Unsaid -> searched Nothing
+tarballFor cacheRoot repos p = case provenanceOf p of
+  RepoFromDirectory dir -> pure (dir </> flat)
+  RepoDownloaded uri -> searched (hostOf uri)
+  RepoNoProvenance -> searched Nothing
   where
     flat = T.unpack (ppName p <> "-" <> ppVersion p <> ".tar.gz")
     under repo =
-      cacheRoot </> repo </> T.unpack (ppName p) </> T.unpack (ppVersion p) </> flat
+      cacheRoot
+        </> repo
+        </> T.unpack (ppName p)
+        </> T.unpack (ppVersion p)
+        </> flat
     searched preferred = do
       let first' = fromMaybe hackageByDefault preferred
           rest = filter (/= first') repos
-      found <- filterM doesFileExist (map under (first' : rest))
+      found <- filterM doesFileExist (fmap under (first' : rest))
       pure (fromMaybe (under first') (listToMaybe found))
 
 -- | Which repository a package came from, where it came from one.
-repositoryOf :: PlanPackage -> Repository
-repositoryOf p = case ppSource p of
+provenanceOf :: PlanPackage -> RepoProvenance
+provenanceOf p = case ppSource p of
   RepoPackage _ repo -> repo
-  _ -> Unsaid
+  _ -> RepoNoProvenance
 
 -- | The host a URI names, which is what @cabal@ conventionally calls the
 -- repository that lives there.
@@ -817,11 +832,6 @@
   deriving (Eq, Show)
 
 -- | What can be asked about a module, once a plan says where to look.
---
--- The three questions "Tilia.Fixity" has, answered against the outside
--- world. They come back together because they share everything—the module
--- index, the cache, the packages the compiler holds, the memo of what has
--- been read—and answering them apart would settle all of it three times.
 data Resolver = Resolver
   { -- | What a module exports, with 'Nothing' for one that could not be
     -- read, which is not the same as its having no operators; see
@@ -836,33 +846,38 @@
     askExportNames :: Text -> IO (Maybe (Set OpName)),
     -- | The modules reading a module went through before giving up, the one
     -- it gave up on last. Asked only of the modules 'askFixities' gave up
-    -- on, and only so that a message can name the module really in the way
+    -- on, and only so that a message can name the exact problematic module
     -- rather than the import that happens to sit above it.
     askChain :: Text -> IO [Text]
   }
 
--- | Build the answers to what "Tilia.Fixity" asks.
+-- | Build a new 'Resolver'.
 --
 -- Answers are remembered on disk between runs by "Tilia.Fixity.Cache", so a
 -- package is decompressed and parsed once per machine rather than once per
 -- file.
 newResolver ::
-  -- | The build plan to use
+  -- | The build plan to use.
   BuildPlan ->
   IO Resolver
-newResolver = newResolverVia [FromInterface, FromSource]
+newResolver = newResolverVia (Do #useCache) [FromInterface, FromSource]
 
 -- | 'newResolver', restricted to the routes given.
 newResolverVia ::
-  -- | Which readings to try, in order
+  -- | Whether to use the cache.
+  Choice "useCache" ->
+  -- | Which readings to try, in order.
   [Route] ->
-  -- | The build plan to use
+  -- | The build plan to use.
   BuildPlan ->
   IO Resolver
-newResolverVia routes plan = do
-  tarballs <- plannedTarballs plan
-  cache <- openCache =<< tokenFor plan
-  installed <- whatTheCompilerSees cache
+newResolverVia caching routes plan = do
+  tarballs <-
+    if FromSource `elem` routes
+      then plannedTarballs plan
+      else pure []
+  cache <- openCache caching =<< tokenForBuildPlan plan
+  installed <- getInstalledPackages cache
   index <- buildModuleIndex cache installed tarballs
   let interfaces = interfaceIndex installed
   local <- localModules plan
@@ -872,14 +887,21 @@
   extensionsRead <- newIORef Map.empty
   exportsRead <- newIORef Map.empty
   interfacesRead <- newIORef Map.empty
+  reading <- newQSem =<< getNumCapabilities
   let interfaceOf modName = do
-        seen <- readIORef interfacesRead
-        case Map.lookup modName seen of
-          Just interface -> pure interface
-          Nothing -> do
+        slot <- newEmptyMVar
+        claimed <-
+          atomicModifyIORef' interfacesRead $ \m -> case Map.lookup modName m of
+            Just other -> (m, Left other)
+            Nothing -> (Map.insert modName slot m, Right slot)
+        case claimed of
+          Left other -> readMVar other
+          Right mine -> do
             found <- case Map.lookup modName interfaces of
               Nothing -> pure Nothing
-              Just (_, path) -> readInterface modName path
+              Just (_, path) ->
+                bracket_ (waitQSem reading) (signalQSem reading) $
+                  readInterface modName path
             -- Being listed is not the same as being readable: @ghc-pkg@
             -- names @GHC.Prim@ among @ghc-prim@'s modules and there is no
             -- file at the path that implies. So the table answers for a
@@ -887,7 +909,7 @@
             let interface = case found of
                   Just _ -> found
                   Nothing -> asInterface <$> Map.lookup modName builtinFixities
-            atomicModifyIORef' interfacesRead (\m -> (Map.insert modName interface m, ()))
+            putMVar mine interface
             pure interface
   let workings =
         Workings
@@ -968,17 +990,17 @@
         askChain = chain Set.empty
       }
 
--- | The operators a module's export list names, where that list can be
--- enumerated without reading what it passes on.
+-- | The operators a module's export list names, following what it
+-- reexports.
 --
 -- Asked only about modules whose fixities could not be established, and
 -- only to decide which of them an unsettled operator can be blamed on. A
--- module that exports whole modules keeps its own counsel and answers
--- 'Nothing'; one with no export list exports what it declares, which is
--- every fixity it could supply.
+-- module that hands on one nobody could read answers 'Nothing'; one with no
+-- export list exports what it declares, which is every fixity it could
+-- supply.
 exportNamesOfModule :: Workings -> Set Text -> Text -> IO (Maybe (Set OpName))
 exportNamesOfModule
-  Workings {wkCache, wkLocal, wkIndex, wkReachChildren, wkReachExports, wkMacros}
+  Workings{wkCache, wkLocal, wkIndex, wkReachChildren, wkReachExports, wkMacros}
   visiting
   modName
     | Just path <- Map.lookup modName wkLocal,
@@ -1045,7 +1067,7 @@
         readFileText path >>= \case
           Nothing -> pure Map.empty
           Just text -> inSource text
-    | otherwise = firstAnswer (map taking wkRoutes)
+    | otherwise = firstAnswer (fmap taking wkRoutes)
     where
       taking = \case
         FromInterface -> case Map.lookup modName wkInterfaces of
@@ -1102,31 +1124,31 @@
 -- not read arrives as 'Nothing' and stays 'Nothing', which is what lets
 -- 'Tilia.Fixity.lookupFixity' distinguish a conclusion from a guess.
 scopeFor ::
-  -- | What can be asked about the modules it imports
+  -- | What can be asked about the modules it imports.
   Resolver ->
   -- | Whether @ImplicitPrelude@ is on, which the module's own pragmas
-  -- and its package's @default-extensions@ decide between them
+  -- and its package's @default-extensions@ decide between them.
   Choice "implicitPrelude" ->
-  -- | The module whose scope is wanted, already parsed
+  -- | The module whose scope is wanted, already parsed.
   HsModule GhcPs ->
-  -- | Everything that module can see, and what it could not find out
+  -- | Everything that module can see, and what it could not find out.
   IO Scope
 scopeFor resolver implicitPrelude hsModule = do
   let imports = moduleImports implicitPrelude hsModule
-  answers <- traverse (\m -> (m,) <$> askFixities resolver m) (map importModule imports)
+  answers <- inParallel (\m -> (m,) <$> askFixities resolver m) (fmap importModule imports)
   let table = Map.fromList answers
       unread = [m | (m, Nothing) <- answers]
-  names <- Map.fromList <$> traverse (\m -> (m,) <$> askExportNames resolver m) unread
-  chains <- Map.fromList <$> traverse (\m -> (m,) <$> askChain resolver m) unread
+  names <- Map.fromList <$> inParallel (\m -> (m,) <$> askExportNames resolver m) unread
+  chains <- Map.fromList <$> inParallel (\m -> (m,) <$> askChain resolver m) unread
   kept <-
     Map.fromList
-      <$> traverse
+      <$> inParallel
         (\m -> (m,) <$> askChildren resolver m)
-        (Set.toList (Set.fromList (map importModule (filter expands imports))))
+        (Set.toList (Set.fromList (fmap importModule (filter expands imports))))
   pure $
     resolveScope
       implicitPrelude
-      Known
+      KnownModules
         { knownFixities = \m -> Map.findWithDefault Nothing m table,
           knownChildren = \m -> Map.findWithDefault Map.empty m kept,
           knownExportNames = \m -> Map.findWithDefault Nothing m names,
@@ -1172,13 +1194,9 @@
     -- | How to reach another module for what its export list names, tied
     -- back the same way again.
     wkReachExports :: Set Text -> Text -> IO (Maybe (Set OpName)),
-    -- | What the package a module belongs to puts in force. A module that
-    -- leans on its package's @default-extensions@ does not parse without
-    -- them, and one that does not parse cannot be read for anything.
+    -- | What extensions the package a module belongs to puts in force.
     wkExtensionsOf :: Text -> IO [Extension],
-    -- | What the plan settles about the questions a module's conditionals
-    -- ask, so that a branch written for another version of a dependency is
-    -- not read as part of it.
+    -- | Known macro expansions.
     wkMacros :: Macros,
     -- | The modules @cabal@ writes itself, which are therefore in no
     -- package's sources. See 'generatedModules'.
@@ -1190,15 +1208,11 @@
   -- | Where to look, and how to get back to the resolver.
   Workings ->
   -- | Modules currently being resolved further up the call chain.
-  --
-  -- Only passed through, so that a chase started here carries where it came
-  -- from. What is done about a module already in it belongs to
-  -- 'newResolverVia', which decides it before anything is remembered.
   Set Text ->
   -- | The module to resolve.
   Text ->
   -- | Its operator fixities, or, where they could not be established, the
-  -- module below it that stopped us if there was one.
+  -- module below it that stopped us.
   IO Established
 resolveModule
   Workings
@@ -1233,7 +1247,7 @@
               visiting'
               source
               modName
-    | otherwise = answered <$> firstAnswer (map taking wkRoutes)
+    | otherwise = answered <$> firstAnswer (fmap taking wkRoutes)
     where
       visiting' = Set.insert modName visiting
 
@@ -1295,14 +1309,6 @@
         Just c -> storeFixities c package modName fixities
 
 -- | Which package and tarball holds each module.
---
--- The module list of a package is itself cached: it comes from a @.cabal@
--- file inside an archive, and reading seventy of those is the bulk of what
--- starting up costs.
---
--- Where two packages expose the same module the first is kept. A plan that
--- builds cannot contain such a pair for any module the project imports, so
--- the choice only ever falls on a module nothing will ask about.
 buildModuleIndex ::
   -- | Where to remember each package's module list, if anywhere.
   Maybe Cache ->
@@ -1329,11 +1335,6 @@
       pure [(m, (key, tarball)) | m <- modules]
 
 -- | Where each installed module's compiled interface is.
---
--- Filed under the directory it was found in rather than under the package's
--- name and version, because those do not say which build: the same version
--- compiled with different flags can declare different fixities, and under
--- Nix a different build is a different directory.
 interfaceIndex :: [InstalledPackage] -> Map Text (Text, FilePath)
 interfaceIndex installed =
   Map.fromListWith
@@ -1356,35 +1357,35 @@
 asInterface fixities =
   Interface
     { interfaceDeclares = fixities,
-      interfacePassedOn = [],
+      interfaceReexports = [],
       interfaceChildren = Map.empty
     }
 
 -- | The fixities a compiled interface reports, and those it passes on.
 fromInterface ::
-  -- | A module's interface, if it has one
+  -- | A module's interface, if it has one.
   (Text -> IO (Maybe Interface)) ->
-  -- | The module to read
+  -- | The module to read.
   Text ->
   IO Established
 fromInterface interfaceOf modName =
   interfaceOf modName >>= \case
     Nothing -> pure (Unreadable Nothing)
     Just iface -> do
-      declarers <- traverse asked (distinct (map fst (interfacePassedOn iface)))
+      declarers <- inParallel asked (distinct (fmap fst (interfaceReexports iface)))
       pure $ case [m | (m, Nothing) <- declarers] of
         (m : _) -> Unreadable (Just m)
         [] ->
           Declares . Map.union (interfaceDeclares iface) . Map.unions $
             [ Map.filterWithKey (\(_, o) _ -> o == op) (interfaceDeclares declarer)
-            | (m, op) <- interfacePassedOn iface,
+            | (m, op) <- interfaceReexports iface,
               Just (Just declarer) <- [lookup m declarers]
             ]
   where
     asked m = do
       interface <- interfaceOf m
       pure (m, interface)
-    distinct = Map.keys . Map.fromList . map (,())
+    distinct = Map.keys . Map.fromList . fmap (,())
 
 -- | A package's module list from the @.cabal@ file in its tarball.
 fromCabalFile ::
@@ -1405,9 +1406,6 @@
     Nothing -> pure Nothing
     Just c -> cachedModules c key
   case remembered of
-    -- A cached entry was written after the tarball was verified, and the
-    -- key it is filed under contains the hash it was verified against, so a
-    -- changed tarball simply misses rather than matching the wrong data.
     Just ms -> pure (Just ms)
     Nothing ->
       verified p tarball >>= \case
@@ -1422,18 +1420,11 @@
               pure (Just ms)
 
 -- | How a package's cached answers are filed.
---
--- The expected hash is part of the key, so everything derived from a
--- tarball is bound to the exact bytes it was derived from. A package with
--- no hash in the plan is keyed by name and version alone.
 cacheKey :: PlanPackage -> Text
 cacheKey p =
   ppName p <> "-" <> ppVersion p <> maybe "" (("-" <>) . T.take 16) (sourceHashOf p)
 
 -- | Does the tarball hash to what the plan says it should?
---
--- Hashing a few megabytes is not free, which is why it happens only on a
--- cache miss: once per package version per machine.
 verified :: PlanPackage -> FilePath -> IO Bool
 verified p tarball = case sourceHashOf p of
   Nothing -> pure True
@@ -1467,7 +1458,7 @@
   FilePath ->
   -- | The module to read.
   Text ->
-  -- | What it declares, including what it only passes on, and whether that
+  -- | What it declares, including what it only reexports, and whether that
   -- is worth remembering.
   IO Reading
 fromSource macros extensions reach reachChildren visiting tarball modName =
@@ -1485,9 +1476,7 @@
 data Reading
   = -- | The archive was there, and this is what reading it established.
     FromArchive Established
-  | -- | There was no archive to open. That is a fact about this machine and
-    -- not about the module—the plan can stay exactly as it is while
-    -- somebody downloads the sources—so it is never remembered.
+  | -- | There was no archive to open.
     NoArchive
 
 -- | The fixities a module's text declares and passes on.
@@ -1502,8 +1491,8 @@
   (Text -> IO (Maybe (Fixities))) ->
   -- | How to reach another module for what its names carry with them.
   (Text -> IO (Map OpName (Set OpName))) ->
-  -- | Modules currently being resolved, passed through so that a
-  -- re-export chain cannot loop.
+  -- | Modules currently being resolved, passed through so that a re-export
+  -- chain cannot loop.
   Set Text ->
   -- | The module's source.
   Text ->
@@ -1531,22 +1520,11 @@
 -- another. Which of them holds depends on how the module is compiled, which
 -- is not ours to decide, so disagreement is not an answer. Agreement across
 -- the ones we could read is one, and a stronger one than the blanked text
--- could give: it is a fact about the module rather than about a reading.
+-- could give.
 --
 -- A configuration whose imports could not be resolved is passed over rather
 -- than counted against the rest, because almost every one of those is a
--- branch meant for somewhere else. @System.IO.CodePage@ imports
--- @System.Win32.CodePage@ under @#ifdef WINDOWS@, and no plan solved on
--- Linux has Win32 anywhere in it. Refusing the whole module over a branch
--- that will never be compiled here would be letting a fact about this
--- machine stand as a fact about the module.
---
--- Every configuration unresolvable is still no answer. There is nothing
--- left to agree, and saying the module declares nothing would be a guess
--- rather than the silence it deserves. What is passed on then is the first
--- reason any configuration gave, which is as good as any: they are branches
--- of one module, and whichever of them is reported the reader is being sent
--- to a real module that really could not be read.
+-- branch meant for a different platform.
 agreeing :: NonEmpty Established -> Established
 agreeing answers = case [fixities | Declares fixities <- toList answers] of
   [] -> Unreadable (listToMaybe (catMaybes [below | Unreadable below <- toList answers]))
@@ -1577,10 +1555,6 @@
             Just text ->
               Map.fromList . concat
                 <$> traverse (locate dir (sourceDirs text)) (containedModules text)
-
-    -- A package may list several source directories and the @.cabal@ file
-    -- does not say which one holds which module, so they are tried in turn
-    -- and the first that has the file wins.
     locate dir dirs m = do
       found <-
         filterM
@@ -1601,11 +1575,7 @@
     then Just . T.decodeUtf8Lenient <$> BS.readFile path
     else pure Nothing
 
--- | What a module passes on, as well as what it declares.
---
--- A module that exports an operator it did not declare carries no fixity of
--- its own for it, so the declaration is chased through the export list into
--- whichever module the name came from.
+-- | What a module reexports, as well as what it declares.
 withReexports ::
   -- | Whether @ImplicitPrelude@ is on in the module being read.
   Choice "implicitPrelude" ->
@@ -1684,11 +1654,11 @@
 childrenWithReexports ::
   -- | Whether @ImplicitPrelude@ is on in the module being read.
   Choice "implicitPrelude" ->
-  -- | How to reach another module for what its names carry
+  -- | How to reach another module for what its names carry.
   (Text -> IO (Map OpName (Set OpName))) ->
-  -- | The name this module was looked up under
+  -- | The name this module was looked up under.
   Text ->
-  -- | The module, already parsed
+  -- | The module, already parsed.
   HsModule GhcPs ->
   IO (Map OpName (Set OpName))
 childrenWithReexports implicitPrelude reachChildren modName hsModule =
@@ -1704,26 +1674,18 @@
           : Map.fromListWith Set.union [(parent, ops) | ((_, parent), Just ops) <- carried]
           : wholes
 
--- | The operators a module's export list names, following what it hands on.
---
--- 'exportedOperators' answers for a list that names everything outright.
--- Where the list hands a whole module on, or a @T(..)@ for a type declared
--- elsewhere, the answer is in another module and this goes and gets it.
---
--- 'Nothing' where any part of the list stays beyond us, since a set that
--- leaves names out would clear a module of carrying an operator it may
--- well carry. Everything or nothing: this answer is only ever used to rule
--- a module out.
+-- | The operators a module's export list names, following what it
+-- reexports.
 exportNamesWithReexports ::
   -- | Whether @ImplicitPrelude@ is on in the module being read.
   Choice "implicitPrelude" ->
-  -- | How to reach another module for what its export list names
+  -- | How to reach another module for what its export list names.
   (Text -> IO (Maybe (Set OpName))) ->
-  -- | How to reach another module for what its names carry
+  -- | How to reach another module for what its names carry.
   (Text -> IO (Map OpName (Set OpName))) ->
-  -- | The name this module was looked up under
+  -- | The name this module was looked up under.
   Text ->
-  -- | The module, already parsed
+  -- | The module, already parsed.
   HsModule GhcPs ->
   IO (Maybe (Set OpName))
 exportNamesWithReexports
@@ -1754,18 +1716,18 @@
             Just kids <- [Map.lookup parent declared]
           ]
 
--- | What the types a module hands on but does not declare carry with them,
--- asked of the modules they could have come from.
+-- | What the types a module reexports carry with them, asked of the modules
+-- they could have come from.
 carriedNames ::
   -- | Whether @ImplicitPrelude@ is on in the module being read.
   Choice "implicitPrelude" ->
-  -- | How to reach another module for what its export list names
+  -- | How to reach another module for what its export list names.
   (Text -> IO (Map OpName (Set OpName))) ->
-  -- | The module, already parsed
+  -- | The module, already parsed.
   HsModule GhcPs ->
-  -- | Export items
+  -- | Export items.
   [ExportItem] ->
-  -- | For each handed-on name, what it carries, or 'Nothing' where no
+  -- | For each reexported name, what it carries, or 'Nothing' where no
   -- module that could have supplied it had anything to say about it.
   IO [((Maybe Text, OpName), Maybe (Set OpName))]
 carriedNames implicitPrelude reachChildren hsModule items =
@@ -1784,7 +1746,7 @@
         [] -> Nothing
         kids -> Just (Set.unions kids)
 
--- | Could this import have supplied a name an export list hands on?
+-- | Could this import have supplied a name an export list reexports?
 canSupply :: Maybe Text -> OpName -> Import -> Bool
 canSupply qualifier op i =
   reaches && case importNames i of
@@ -1796,12 +1758,19 @@
       Nothing -> not (importQualified i)
       Just q -> importAlias i == q
 
--- | The modules a @module M@ export hands on whole, by their own names.
+-- | The modules a @module M@ export reexports whole, by their own names.
 wantedModules ::
+  -- | Whether @ImplicitPrelude@ is on in the module being read.
   Choice "implicitPrelude" ->
+  -- | The name this module was looked up under, so that a module handing
+  -- itself on under it is not chased.
   Text ->
+  -- | The module, already parsed.
   HsModule GhcPs ->
+  -- | Export items.
   [ExportItem] ->
+  -- | The modules named, with an alias resolved to what it was imported
+  -- as, and this module itself left out.
   [Text]
 wantedModules implicitPrelude modName hsModule items =
   Set.toList . Set.fromList $
@@ -1813,29 +1782,17 @@
     imports = moduleImports implicitPrelude hsModule
     isSelf m = Just m == moduleName hsModule || m == modName
 
--- | What to parse a module with: what its package puts in force, and then
--- whatever its own pragmas say about that.
-configFor :: [Extension] -> Text -> ParserConfig
-configFor extensions source = parserConfigFor (effectiveExtensions extensions source)
-
--- | What a parse produced, where only having it or not matters.
-whatParsed :: Either e a -> Maybe a
-whatParsed = either (const Nothing) Just
-
 -- | Every configuration the preprocessor allows of a module's text that is
 -- Haskell, parsed, each with whether it has the Prelude without importing
 -- it.
 configurationsOf ::
   -- | What the plan settles about the questions its conditionals ask.
   Macros ->
-  -- | What the module's package puts in force, or 'Nothing' where nothing
-  -- is known about it. Then it is parsed under the most generous edition
-  -- rather than the narrowest, and taken to have the Prelude unless it
-  -- says otherwise—both being the way to be wrong that costs least.
+  -- | What extensions the module's package puts in force.
   Maybe [Extension] ->
-  -- | The module's name, for the parser to put in its errors
+  -- | The module's name, for the parser to put in its errors.
   Text ->
-  -- | Its text
+  -- | Its text.
   Text ->
   Maybe (NonEmpty (Choice "implicitPrelude", HsModule GhcPs))
 configurationsOf macros extensions modName text =
@@ -1845,7 +1802,9 @@
     parsed leaf =
       (,) (hasImplicitPrelude (fromMaybe [] extensions) leaf) . pmModule
         <$> whatParsed (parseModule (configOf leaf) named leaf)
-    configOf leaf = maybe defaultParserConfig (`configFor` leaf) extensions
+    whatParsed = either (const Nothing) Just
+    configOf leaf = maybe defaultParserConfig (configFor leaf) extensions
+    configFor leaf exts = parserConfigFor (effectiveExtensions exts leaf)
     named = T.unpack modName
 
 -- | Does this module see the Prelude without importing it?
@@ -1854,11 +1813,6 @@
   fromBool (ImplicitPrelude `elem` effectiveExtensions extensions source)
 
 -- | Find a module inside a tarball and say what was found.
---
--- Looked for under each of the endings a package may write a module with,
--- Haskell first. An @.hsc@ is reported rather than read: it is not Haskell
--- until @hsc2hs@ has been over it, and what it declares is answered out of
--- 'hscFixities' instead.
 readModule :: FilePath -> Text -> IO (Maybe InArchive)
 readModule tarball modName = quietly Nothing $ do
   bytes <- BL.readFile tarball
@@ -1867,7 +1821,7 @@
   pure (listToMaybe (mapMaybe (pick dirs candidates) moduleEndings))
   where
     suffix ending = "/" <> T.unpack (T.replace "." "/" modName) <> ending
-    suffixes = map suffix moduleEndings
+    suffixes = fmap suffix moduleEndings
     sweep cabal found = \case
       Tar.Next entry rest
         | Tar.NormalFile content _ <- Tar.entryContent entry,
@@ -1893,9 +1847,6 @@
 
 -- | The endings a package may write a module under, in the order they are
 -- tried.
---
--- Plain Haskell first: a package that ships both has generated the one from
--- the other, and the generated one is the module as it will be compiled.
 moduleEndings :: [String]
 moduleEndings = [".hs", ".hsc"]
 
@@ -1918,9 +1869,6 @@
 writtenForHsc = isSuffixOf ".hsc"
 
 -- | What an @.hsc@ module declares, which is nothing unless it is named.
---
--- See 'hscFixities' for why an absence is an answer here and not a refusal
--- to give one.
 hscDeclares :: Text -> Established
 hscDeclares modName =
   Declares (maybe Map.empty inBothNamespaces (Map.lookup modName hscFixities))
diff --git a/src/Tilia/Format.hs b/src/Tilia/Format.hs
--- a/src/Tilia/Format.hs
+++ b/src/Tilia/Format.hs
@@ -9,6 +9,7 @@
     formatErrorExitCode,
     refused,
     Session,
+    PlanSource (..),
     newSession,
     fixityNotesOf,
     formatSource,
@@ -28,10 +29,17 @@
 import Data.Text (Text)
 import Data.Text qualified as T
 import GHC.LanguageExtensions.Type (Extension (ImplicitPrelude))
+import Tilia.Cabal.Package
+  ( PackageProblem (..),
+    PackageReader,
+    describePackageProblem,
+    newPackageReader,
+  )
+import Tilia.Cabal.Project (ProjectRoot (..), findProjectRoot)
 import Tilia.Cpp
   ( CppError (..),
     blankCpp,
-    branchLeaves,
+    correspondingBranches,
     describeCppError,
     formatWithCpp,
     usesCpp,
@@ -40,22 +48,25 @@
 import Tilia.Cpp.Macros (Macros)
 import Tilia.Doc (defaultRenderOptions, printDoc)
 import Tilia.Equivalence (commentDifference, syntaxDifference)
-import Tilia.Fixity (OpName, Unknown (..), operatorSpelling, spellUnreadIn, unknownOperators)
+import Tilia.Fixity
+  ( OpName,
+    Unknown (..),
+    operatorSpelling,
+    spellUnreadIn,
+    unknownOperators,
+  )
 import Tilia.Fixity.Debug (FixityNotes, fixityNotes)
 import Tilia.Fixity.Plan
   ( PlanComponent,
     Resolver (..),
+    Route (FromInterface, FromSource),
+    fetchUninstalled,
     loadPlan,
     macrosOf,
-    newResolver,
+    newResolverVia,
+    readGivenPlan,
     scopeFor,
   )
-import Tilia.Package
-  ( PackageProblem (..),
-    PackageReader,
-    describePackageProblem,
-    newPackageReader,
-  )
 import Tilia.Palette (Color (Operator, Place), Palette, paint)
 import Tilia.Parser
   ( ParseError,
@@ -68,16 +79,15 @@
     pmSource,
   )
 import Tilia.Pragma (effectiveExtensions, movesPositions)
-import Tilia.Project (ProjectRoot (..), findProjectRoot)
 import Tilia.Render (RenderConfig (..), defaultRenderConfig, renderModule)
 import Tilia.Source (comments)
+import Tilia.Utils (tshow)
 
 -- | Why a file could not be formatted.
 data FormatError
   = -- | No @cabal.project@ or @.cabal@ file above it.
     NoProject FilePath
-  | -- | A project, but no build plan we could read or produce. The text is
-    -- whatever @cabal@ had to say about it.
+  | -- | A project, but no build plan we could read or produce, and why.
     NoBuildPlan FilePath Text
   | -- | We failed to read .cabal file.
     NoPackage FilePath PackageProblem
@@ -97,7 +107,7 @@
   | -- | Formatting is not idempotent.
     NotIdempotent FilePath Text
 
--- | Say what went wrong, in one line.
+-- | Say what went wrong.
 describeFormatError :: Palette -> FormatError -> Text
 describeFormatError palette = \case
   NoProject path ->
@@ -123,7 +133,7 @@
     "will not format "
       <> file path
       <> ": "
-      <> T.intercalate ", and " (map saying (together unknown))
+      <> T.intercalate ", and " (fmap saying (together unknown))
     where
       saying (why, ops) =
         (if length ops == 1 then "the fixity of " else "the fixities of ")
@@ -154,40 +164,40 @@
 -- | The exit status a failure should leave behind.
 formatErrorExitCode :: FormatError -> Int
 formatErrorExitCode = \case
-  NoProject {} -> 2
-  NoBuildPlan {} -> 3
-  NotParsed {} -> 4
-  PositionPragmas {} -> 5
+  NoProject{} -> 2
+  NoBuildPlan{} -> 3
+  NotParsed{} -> 4
+  PositionPragmas{} -> 5
   NoPackage _ problem -> case problem of
     NoPackageFile -> 6
-    PackageUnreadable {} -> 6
-    PackageMalformed {} -> 7
-    FileUnclaimed {} -> 8
-  UnknownFixity {} -> 15
-  Unreadable {} -> 16
-  NotEquivalent {} -> 17
-  NotIdempotent {} -> 18
+    PackageUnreadable{} -> 6
+    PackageMalformed{} -> 7
+    FileUnclaimed{} -> 8
+  UnknownFixity{} -> 15
+  Unreadable{} -> 16
+  NotEquivalent{} -> 17
+  NotIdempotent{} -> 18
   CppUnsupported _ why -> case why of
-    UnhandledDirective {} -> 9
+    UnhandledDirective{} -> 9
     UnsplittableConditional -> 10
     TooManyConfigurations -> 11
-    ConfigurationNotParsed {} -> 12
-    DirectiveUnplaceable {} -> 13
-    DirectiveInQuotedText {} -> 14
+    ConfigurationNotParsed{} -> 12
+    DirectiveUnplaceable{} -> 13
+    DirectiveInQuotedText{} -> 14
 
 -- | Did we decline to format the file, rather than fail to?
 refused :: FormatError -> Bool
 refused = \case
-  PositionPragmas {} -> True
-  CppUnsupported {} -> True
-  UnknownFixity {} -> True
-  NotParsed {} -> False
-  NoPackage {} -> False
-  Unreadable {} -> False
-  NotEquivalent {} -> False
-  NotIdempotent {} -> False
-  NoProject {} -> False
-  NoBuildPlan {} -> False
+  PositionPragmas{} -> True
+  CppUnsupported{} -> True
+  UnknownFixity{} -> True
+  NotParsed{} -> False
+  NoPackage{} -> False
+  Unreadable{} -> False
+  NotEquivalent{} -> False
+  NotIdempotent{} -> False
+  NoProject{} -> False
+  NoBuildPlan{} -> False
 
 -- | What a run works out once and then uses for every file.
 --
@@ -212,13 +222,24 @@
     sessionFixityNotes :: Maybe (IORef (Map FilePath FixityNotes))
   }
 
+-- | Where a session's build plan comes from.
+data PlanSource
+  = -- | The project's own, solved again or fetched for with Cabal.
+    PlanFromCabal [PlanComponent]
+  | -- | A plan file trusted as up to date, so that we can avoid running
+    -- Cabal to solve it.
+    GivenPlan FilePath
+
 -- | Settle everything that does not depend on the file being formatted.
 newSession ::
-  -- | Where to start looking for the project
+  -- | Where to start looking for the project.
   FilePath ->
-  -- | The components about to be formatted, so that a plan which says
-  -- nothing about them can be solved again rather than trusted
-  [PlanComponent] ->
+  -- | Where the build plan comes from.
+  PlanSource ->
+  -- | Whether to read from and write to the cache.
+  Choice "useCache" ->
+  -- | Whether to download sources that are missing.
+  Choice "download" ->
   -- | Check AST equivalence.
   Choice "checkAst" ->
   -- | Check idempotence.
@@ -227,10 +248,19 @@
   -- with 'fixityNotesOf'.
   Choice "debugFixity" ->
   IO (Either FormatError Session)
-newSession start components checkAst checkIdempotence debugFixity = runExceptT $ do
+newSession start planSource caching downloading checkAst checkIdempotence debugFixity = runExceptT $ do
   root <- prPath <$> (need (NoProject start) =<< liftIO (findProjectRoot start))
-  plan <- orElse (NoBuildPlan root) =<< liftIO (loadPlan components root)
-  resolver <- liftIO (newResolver plan)
+  (plan, resolver) <- case planSource of
+    PlanFromCabal components -> do
+      plan <- orElse (NoBuildPlan root) =<< liftIO (loadPlan caching downloading components root)
+      (,) plan <$> liftIO (newResolverVia caching [FromInterface, FromSource] plan)
+    GivenPlan path -> do
+      plan <- orElse (NoBuildPlan root) =<< liftIO (readGivenPlan root path)
+      routes <-
+        if isTrue downloading
+          then [FromInterface, FromSource] <$ liftIO (fetchUninstalled caching root plan)
+          else pure [FromInterface]
+      (,) plan <$> liftIO (newResolverVia caching routes plan)
   askPackage <- liftIO newPackageReader
   notes <-
     if isTrue debugFixity
@@ -259,18 +289,14 @@
   Just ref -> readIORef ref
 
 -- | Format source that has already been read.
---
--- The text is passed in rather than read here because a caller that means
--- to compare the two needs the original anyway, and reading a file twice to
--- format it once is the sort of thing this is trying to stop doing.
 formatSource ::
-  -- | What the run has worked out already
+  -- | What the run has worked out already.
   Session ->
-  -- | The file the source came from, for reporting and for its package
+  -- | The file the source came from.
   FilePath ->
-  -- | The source
+  -- | The source.
   Text ->
-  -- | Result
+  -- | Result.
   IO (Either FormatError Text)
 formatSource session path source = runExceptT $ do
   when (movesPositions source) $
@@ -308,7 +334,7 @@
       formatting (extensions, cpp) already text
         | cpp = do
             render <- case parseModule config path (reading text) of
-              Left _ -> pure defaultRenderConfig {rcExtensions = extensions}
+              Left _ -> pure defaultRenderConfig{rcExtensions = extensions}
               Right whole -> renderConfigFor extensions (pmModule whole)
             printed <-
               orElse
@@ -335,12 +361,17 @@
   when (isTrue (sessionCheckIdempotence session)) $ do
     (settled, _) <- formatting (extensionsAndCpp formatted) printedTree formatted
     when (settled /= formatted) $
-      throwE (NotIdempotent path (whereTheyDiffer formatted settled))
+      throwE (NotIdempotent path (whyNotIdempotent formatted settled))
   pure formatted
 
--- | Where two spellings of the same file first disagree.
-whereTheyDiffer :: Text -> Text -> Text
-whereTheyDiffer before after =
+-- | Why a second formatting pass did not come out like the first.
+whyNotIdempotent ::
+  -- | What the first pass printed.
+  Text ->
+  -- | What the second pass printed.
+  Text ->
+  Text
+whyNotIdempotent before after =
   case [n | (n, one, two) <- zip3 [1 :: Int ..] first second, one /= two] of
     (n : _) -> "line " <> tshow n <> " differs"
     [] ->
@@ -351,26 +382,20 @@
   where
     first = T.lines before
     second = T.lines after
-    tshow :: Int -> Text
-    tshow = T.pack . show
 
 -- | What formatting changed about the program.
---
--- A file with conditionals is compared one configuration at a time, because
--- the text as it stands is not a program: the branches only make one once
--- the preprocessor has chosen between them.
 rewritten ::
-  -- | How to parse both sides
+  -- | How to parse both sides.
   ParserConfig ->
-  -- | Whether the file uses the preprocessor
+  -- | Whether the file uses the preprocessor.
   Bool ->
-  -- | The file, for the parser's messages
+  -- | The file, for the parser's messages.
   FilePath ->
-  -- | What was read, and the tree it was printed from where it has one
+  -- | What was read, and the tree it was printed from where it has one.
   (Text, Maybe ParsedModule) ->
-  -- | What was printed
+  -- | What was printed.
   Text ->
-  -- | What formatting changed, and the tree of what was printed
+  -- | What formatting changed, and the tree of what was printed.
   (Maybe Text, Maybe ParsedModule)
 rewritten config cpp path (before, printedFrom') after
   | not cpp = case parseModule config path after of
@@ -379,8 +404,6 @@
           Nothing
         )
       Right a' -> case printedFrom' <|> whatParsed (parseModule config path before) of
-        -- The input parsed once already, or there would be nothing to
-        -- compare.
         Nothing -> (Nothing, Just a')
         Just b' -> (comparing b' a', Just a')
   | otherwise = (underCpp, Nothing)
@@ -392,33 +415,19 @@
           (comments (pmSource b'))
           (comments (pmSource a'))
     whatParsed = either (const Nothing) Just
-    underCpp = case (branchLeaves before, branchLeaves after) of
-      -- Neither can really happen: a source that would not split never got
-      -- as far as being formatted. Saying so beats saying nothing.
-      (Left _, _) -> Just "the input could not be split into configurations"
-      (_, Left _) -> Just "the output could not be split into configurations"
-      (Right went, Right came)
-        | length went /= length came ->
-            Just
-              ( "the output has "
-                  <> tshow (length came)
-                  <> " configurations where the input had "
-                  <> tshow (length went)
-              )
-        | otherwise ->
-            firstJust
-              [ ("in one configuration, " <>) <$> difference b a
-              | (b, a) <- zip went came
-              ]
+    underCpp = case correspondingBranches before after of
+      Left _ -> Just "the input or output could not be split into configurations"
+      Right pairs -> firstJust [compareBranch b a | (b, a) <- pairs]
+    compareBranch Nothing Nothing = Nothing
+    compareBranch Nothing (Just _) = Just "a configuration no longer aborts preprocessing"
+    compareBranch (Just _) Nothing = Just "a configuration now aborts preprocessing"
+    compareBranch (Just b) (Just a) = ("in one configuration, " <>) <$> difference b a
     difference b a = case (parseModule config path b, parseModule config path a) of
-      -- The input parsed once already, or there would be nothing to compare.
       (Left _, _) -> Nothing
       (_, Left e) ->
         Just ("the formatted output does not parse: " <> describeParseError e)
       (Right b', Right a') -> comparing b' a'
     firstJust = foldr (<|>) Nothing
-    tshow :: Int -> Text
-    tshow = T.pack . show
 
 -- | Give up with the given error where there is one to give up over.
 orElse :: (e -> FormatError) -> Either e a -> ExceptT FormatError IO a
diff --git a/src/Tilia/Imports.hs b/src/Tilia/Imports.hs
--- a/src/Tilia/Imports.hs
+++ b/src/Tilia/Imports.hs
@@ -26,124 +26,161 @@
 import Tilia.Span (endPoint, startPoint)
 import Tilia.Span.Ghc (spanOf, spanOfSrcSpan)
 
--- | Whether an explicit @import Prelude@ is telling the reader anything.
-data PreludeImport
-  = -- | @ImplicitPrelude@ is on, so the module has the Prelude whatever it
-    -- says, and the line only trims what it already takes.
-    Refines
-  | -- | @ImplicitPrelude@ is off, so the line is the only reason the module
-    -- has a Prelude at all, and it is an import like any other.
-    Provides
-  deriving (Eq, Show)
-
--- | Sort a module's imports and fold together the ones that say the same
--- thing.
+-- | Sort and fold together a module's imports.
 normalizeImports ::
-  -- | Whether @ImplicitPrelude@ is on
+  -- | Whether @ImplicitPrelude@ is on.
   Choice "implicitPrelude" ->
-  -- | Source lines the block must not be sorted across
+  -- | Source lines the block must not be sorted across.
   [Int] ->
-  -- | The module's comments
+  -- | The module's comments.
   [Comment] ->
-  -- | Original imports
+  -- | Original imports.
   [LImportDecl GhcPs] ->
-  -- | Normalized imports
+  -- | Normalized imports.
   [LImportDecl GhcPs]
 normalizeImports implicitPrelude barriers written imports =
-  concatMap stretch (segmented (dividing imports barriers) tidied)
+  concatMap stretch (cutAtBarriers (barriersBetween imports barriers) tidied)
   where
-    prelude = if isTrue implicitPrelude then Refines else Provides
-    tidied = map (fmap (tidyList written)) imports
-    stretch is = foldRuns (fuse written) [((identity prelude i, alone i), i) | i <- is]
+    tidied = fmap (fmap (tidyImportList written)) imports
+    stretch is =
+      foldRuns
+        (combineImports written)
+        [((importIdentity implicitPrelude i, alone i), i) | i <- is]
     alone i
       | any strands (spanOf i) = startLineOf i
       | otherwise = 0
       where
         strands s =
-          any (unanchored (itemStarts i)) (filter loose (commentsWithin s written))
+          any
+            (unanchored (itemStarts i))
+            (filter loose (commentsWithin s written))
         loose = not . commentTrailing
     unanchored starts c = not (any (> endPoint (commentSpan c)) starts)
     startLineOf i = case srcSpanStart (getLocA i) of
       RealSrcLoc l _ -> srcLocLine l
       _ -> 0
 
--- | Where every name an import lists begins, the names inside a thing's own
--- brackets among them.
+-- | Where every name an import lists begins, each as a line and a column.
+--
+-- The names inside a thing's own brackets count too, so @T (A, B)@ gives
+-- three positions: the start of @T@, of @A@ and of @B@. An import with no
+-- list has none at all.
 itemStarts :: LImportDecl GhcPs -> [(Int, Int)]
 itemStarts (L _ decl) = case ideclImportList decl of
   Nothing -> []
   Just (_, L _ items) -> concatMap starts items
   where
-    starts item = foldMap ((: []) . startPoint) (spanOf item) <> inside (unLoc item)
+    starts item =
+      foldMap ((: []) . startPoint) (spanOf item)
+        <> inside (unLoc item)
     inside = \case
       IEThingWith _ _ _ members _ ->
         concatMap (foldMap ((: []) . startPoint) . spanOf) members
       _ -> []
 
--- | The lines that fall between imports, out of the lines that must not be
--- sorted across.
-dividing :: [LImportDecl GhcPs] -> [Int] -> [Int]
-dividing imports = filter (not . within)
+-- | The barriers that fall between two imports rather than inside one.
+barriersBetween ::
+  -- | The imports as written, for the lines each of them covers.
+  [LImportDecl GhcPs] ->
+  -- | Lines the block must not be sorted across.
+  [Int] ->
+  -- | Those of them that lie between imports.
+  [Int]
+barriersBetween imports = filter (not . within)
   where
     within l = any (\(from, to) -> from <= l && l <= to) spans'
-    spans' = [(srcLocLine from, srcLocLine to) | i <- imports, Just (from, to) <- [endsOf i]]
+    spans' =
+      [ (srcLocLine from, srcLocLine to)
+      | i <- imports,
+        Just (from, to) <- [endsOf i]
+      ]
     endsOf i = case (srcSpanStart (getLocA i), srcSpanEnd (getLocA i)) of
       (RealSrcLoc from _, RealSrcLoc to _) -> Just (from, to)
       _ -> Nothing
 
--- | Cut a list of imports into the stretches the barriers leave between
--- them, in order.
-segmented :: [Int] -> [LImportDecl GhcPs] -> [[LImportDecl GhcPs]]
-segmented [] imports = [imports]
-segmented barriers imports =
-  groupBy ((==) `on` fst) [(between i, i) | i <- imports] & map (map snd)
+-- | Cut the imports into the stretches the barriers leave between them.
+cutAtBarriers ::
+  -- | Lines the block must not be sorted across, in ascending order.
+  [Int] ->
+  -- | The imports, as they were written.
+  [LImportDecl GhcPs] ->
+  -- | One stretch per run of imports between barriers, in the same order.
+  [[LImportDecl GhcPs]]
+cutAtBarriers [] imports = [imports]
+cutAtBarriers barriers imports =
+  groupBy ((==) `on` fst) [(between i, i) | i <- imports] & fmap (fmap snd)
   where
     between i = length (takeWhile (< lineOf i) barriers)
     lineOf i = case srcSpanStart (getLocA i) of
       RealSrcLoc l _ -> srcLocLine l
       _ -> 0
 
-----------------------------------------------------------------------------
--- Runs
-
 -- | Sort by the keys, then replace each run of equal keys by one value
 -- folded out of it.
---
--- The sort is stable, so a run holds its values in the order they were
--- written and the fold sees them that way round. That is worth having:
--- folding keeps the first one's identity, and \"first\" should mean first
--- in the file.
-foldRuns :: (Ord k) => (a -> a -> a) -> [(k, a)] -> [a]
+foldRuns ::
+  (Ord k) =>
+  -- | How to fold two values that share a key.
+  (a -> a -> a) ->
+  -- | The values, each under the key it sorts and folds by.
+  [(k, a)] ->
+  -- | One value per distinct key, in key order.
+  [a]
 foldRuns fold' =
-  map (foldl1 fold' . map snd) . groupBy ((==) `on` fst) . sortOn fst
-
-----------------------------------------------------------------------------
--- Which imports are the same import
+  fmap (foldl1 fold' . fmap snd) . groupBy ((==) `on` fst) . sortOn fst
 
--- | What has to agree before two imports may be folded together, in the
--- order imports should be printed in.
+-- | What has to agree before two imports may be folded together.
 --
--- The two leading keys are about reading rather than about identity. A
--- @Prelude@ that only refines what the module already has goes at the end,
--- since looking for it among the @D@s would be looking for the least
+-- The derived ordering is the whole of the policy: the fields are compared
+-- in the order they are declared, which is the order imports are printed
+-- in. The two leading fields are about reading rather than about identity.
+-- A @Prelude@ that only refines what the module already has goes at the
+-- end, since looking for it among the @D@s would be looking for the least
 -- interesting line in the block. The package goes before the module name so
 -- that the imports from one package stay in one run; sorting by module
 -- first would interleave them and hide who provides what.
-identity ::
-  PreludeImport ->
+data ImportIdentity = ImportIdentity
+  { -- | A @Prelude@ that only refines what the module already has.
+    iiRefinesPrelude :: Bool,
+    -- | The package it names, where it names one.
+    iiPackage :: (Int, Text),
+    -- | The module it brings in.
+    iiModule :: Text,
+    -- | Written @{-\# SOURCE \#-}@?
+    iiBoot :: Bool,
+    -- | Written @safe@?
+    iiSafe :: Bool,
+    -- | Written @qualified@?
+    iiQualified :: Bool,
+    -- | The name it was given with @as@, where it was given one.
+    iiAlias :: Maybe Text,
+    -- | Whether its list hides rather than names, where it has a list.
+    iiHides :: Maybe Bool,
+    -- | Whether it is a @quote@ rather than a @splice@ import, where it is
+    -- levelled at all.
+    iiLevel :: Maybe Bool
+  }
+  deriving (Eq, Ord, Show)
+
+-- | The identity of one import.
+importIdentity ::
+  -- | Whether @ImplicitPrelude@ is on.
+  Choice "implicitPrelude" ->
+  -- | The import.
   LImportDecl GhcPs ->
-  (Bool, (Int, Text), Text, Bool, Bool, Bool, Maybe Text, Maybe Bool, Maybe Bool)
-identity prelude (L _ decl) =
-  ( prelude == Refines && named (ideclName decl) == T.pack "Prelude",
-    package (ideclPkgQual decl),
-    named (ideclName decl),
-    ideclSource decl == IsBoot,
-    ideclSafe decl,
-    isImportDeclQualified (ideclQualified decl),
-    named <$> ideclAs decl,
-    hides . fst <$> ideclImportList decl,
-    lifted (ideclLevelSpec decl)
-  )
+  ImportIdentity
+importIdentity implicitPrelude (L _ decl) =
+  ImportIdentity
+    { iiRefinesPrelude =
+        isTrue implicitPrelude && named (ideclName decl) == T.pack "Prelude",
+      iiPackage = package (ideclPkgQual decl),
+      iiModule = named (ideclName decl),
+      iiBoot = ideclSource decl == IsBoot,
+      iiSafe = ideclSafe decl,
+      iiQualified = isImportDeclQualified (ideclQualified decl),
+      iiAlias = named <$> ideclAs decl,
+      iiHides = hides . fst <$> ideclImportList decl,
+      iiLevel = lifted (ideclLevelSpec decl)
+    }
   where
     named = T.pack . moduleNameString . unLoc
     package = \case
@@ -164,76 +201,63 @@
       ImportDeclSplice -> False
       ImportDeclQuote -> True
 
-----------------------------------------------------------------------------
--- Folding two imports into one
-
 -- | Keep the first import and give it everything the second named.
---
--- The result covers both of their spans. That matters for comments: one
--- written between the two has to land inside the declaration that replaces
--- them, and a folded import claiming only the first one's span would leave
--- it nowhere to go.
-fuse :: [Comment] -> LImportDecl GhcPs -> LImportDecl GhcPs -> LImportDecl GhcPs
-fuse written (L ann kept) (L other folded) =
+combineImports ::
+  -- | The module's comments, which decide how far the span may grow.
+  [Comment] ->
+  -- | The import kept, whose spelling the result takes.
+  LImportDecl GhcPs ->
+  -- | The import folded in, which gives up its list and its span.
+  LImportDecl GhcPs ->
+  -- | The first, listing what both named, across both their spans.
+  LImportDecl GhcPs
+combineImports written (L ann kept) (L other folded) =
   L
-    ann {entry = EpaSpan (combineSrcSpans (locA ann) (locA other))}
-    kept {ideclImportList = both (ideclImportList kept) (ideclImportList folded)}
+    ann{entry = EpaSpan (combineSrcSpans (locA ann) (locA other))}
+    kept{ideclImportList = both (ideclImportList kept) (ideclImportList folded)}
   where
     both (Just (interpretation, L l xs)) (Just (_, L l' ys)) =
-      Just (interpretation, L (widened written l l') (tidyItems written (xs <> ys)))
+      Just (interpretation, L (widened written l l') (tidyImportItems written (xs <> ys)))
     both _ _ = Nothing
 
-----------------------------------------------------------------------------
--- The names inside an import list
-
-tidyList :: [Comment] -> ImportDecl GhcPs -> ImportDecl GhcPs
-tidyList written decl =
-  decl {ideclImportList = fmap (fmap (tidyItems written)) <$> ideclImportList decl}
+-- | An import with its list sorted and the entries naming one thing folded
+-- together. An import with no list is left as it is.
+tidyImportList :: [Comment] -> ImportDecl GhcPs -> ImportDecl GhcPs
+tidyImportList written decl =
+  decl
+    { ideclImportList =
+        fmap (fmap (tidyImportItems written)) <$> ideclImportList decl
+    }
 
 -- | Sort an import list and fold together the entries naming one thing.
 --
 -- @import M (T (A), T (B))@ names one type twice and comes out as @import M
 -- (T (A, B))@.
-tidyItems :: [Comment] -> [LIE GhcPs] -> [LIE GhcPs]
-tidyItems written items
-  -- An import list should hold nothing but names, and the parser will accept
-  -- things there that the compiler goes on to reject—@import M (module N)@
-  -- among them. Sorting a list we cannot read would be guessing.
+tidyImportItems :: [Comment] -> [LIE GhcPs] -> [LIE GhcPs]
+tidyImportItems written items
   | any (unnameable . unLoc) items = items
-  | otherwise = foldRuns (wider written) [(nameOf (unLoc i), fmap sortSubnames i) | i <- items]
+  | otherwise =
+      foldRuns
+        (wider written)
+        [(nameIdentity (unLoc i), fmap sortSubnames i) | i <- items]
   where
     unnameable = \case
-      IEVar {} -> False
-      IEThingAbs {} -> False
-      IEThingAll {} -> False
-      IEThingWith {} -> False
+      IEVar{} -> False
+      IEThingAbs{} -> False
+      IEThingAll{} -> False
+      IEThingWith{} -> False
       _ -> True
 
 -- | Cover both of these regions, if anything was written between them.
---
--- A region says two things at once: where a comment written inside it
--- belongs, and how the construct was laid out. What comes out of folding was
--- never written, so it has no layout of its own, and taking the region that
--- covers everything folded in would have it laid out across all the lines
--- those names were spread over—several lines for a name or two.
---
--- So the region grows only where growing it is the point: when a comment
--- falls between the two, and would otherwise be left outside the entry that
--- now holds the names it was written among.
 widened :: [Comment] -> EpAnn ann -> EpAnn ann -> EpAnn ann
 widened written a b
-  | any holdsComment (spanOfSrcSpan combined) = a {entry = EpaSpan combined}
+  | any holdsComment (spanOfSrcSpan combined) = a{entry = EpaSpan combined}
   | otherwise = a
   where
     combined = combineSrcSpans (locA a) (locA b)
     holdsComment s = not (null (commentsWithin s written))
 
 -- | Of two entries naming one thing, the one that brings in more of it.
---
--- Naming all of a type beats naming some of its pieces, which beats naming
--- the type alone. Where both name some, the two lists go together. The
--- documentation is dropped whenever two entries are folded: it was written
--- against one of them and would become a claim about both.
 wider :: [Comment] -> LIE GhcPs -> LIE GhcPs -> LIE GhcPs
 wider written (L ann kept) (L other folded) =
   L (widened written ann other) (combine kept folded)
@@ -259,46 +283,67 @@
       (NoIEWildcard, NoIEWildcard) -> NoIEWildcard
       _ -> IEWildcard 0
 
+-- | An entry with the names in its own brackets sorted and deduplicated.
 sortSubnames :: IE GhcPs -> IE GhcPs
 sortSubnames = \case
   IEThingWith x n wildcard subs doc ->
     IEThingWith x n wildcard (dedupeSubnames subs) doc
   other -> other
 
--- | The same name written twice in a sub-list is written once here. Which
--- of the two survives cannot matter: they name the same thing.
+-- | Deduplicate names in sub-lists.
 dedupeSubnames :: [LIEWrappedName GhcPs] -> [LIEWrappedName GhcPs]
-dedupeSubnames subs = foldRuns const [(nameKey (unLoc s), s) | s <- subs]
+dedupeSubnames subs = foldRuns const [(wrappedNameIdentity (unLoc s), s) | s <- subs]
 
-----------------------------------------------------------------------------
--- Ordering names
+-- | Where a name sorts, and what makes two of them name one thing.
+--
+-- The derived ordering is the whole of the policy: the fields are compared
+-- in the order they are declared. Names are grouped first by what kind of
+-- thing is named, so that the @pattern@s and the @type@s of an import list
+-- stay together. Then the ones spelled with letters come before the ones
+-- spelled with punctuation, which gathers the operators at the end where
+-- they are easy to find; ordering by character code would scatter them,
+-- some before the letters and some after.
+data NameIdentity = NameIdentity
+  { -- | Which kind of thing is named: a plain name, then a @default@, a
+    -- @pattern@, a @type@ and a @data@.
+    niKind :: Int,
+    -- | Is it spelled with punctuation rather than letters?
+    niPunctuation :: Bool,
+    -- | The name as it was written.
+    niName :: String
+  }
+  deriving (Eq, Ord, Show)
 
-nameOf :: IE GhcPs -> (Int, Bool, String)
-nameOf = \case
-  IEVar _ x _ -> nameKey (unLoc x)
-  IEThingAbs _ x _ -> nameKey (unLoc x)
-  IEThingAll _ x _ -> nameKey (unLoc x)
-  IEThingWith _ x _ _ _ -> nameKey (unLoc x)
-  -- 'tidyItems' has already refused to touch a list holding anything else.
-  _ -> (maxBound, True, "")
+-- | The identity of the name an entry is about.
+nameIdentity :: IE GhcPs -> NameIdentity
+nameIdentity = \case
+  IEVar _ x _ -> wrappedNameIdentity (unLoc x)
+  IEThingAbs _ x _ -> wrappedNameIdentity (unLoc x)
+  IEThingAll _ x _ -> wrappedNameIdentity (unLoc x)
+  IEThingWith _ x _ _ _ -> wrappedNameIdentity (unLoc x)
+  _ ->
+    NameIdentity
+      { niKind = maxBound,
+        niPunctuation = True,
+        niName = ""
+      }
 
--- | Where a name sorts.
---
--- Grouped first by what kind of thing is named, so that the @pattern@s and
--- the @type@s of an import list stay together. Then the names spelled with
--- letters before the ones spelled with punctuation, which gathers the
--- operators at the end where they are easy to find; ordering by character
--- code would scatter them, some before the letters and some after.
-nameKey :: IEWrappedName GhcPs -> (Int, Bool, String)
-nameKey = \case
+-- | The identity of one name, as an import list writes it.
+wrappedNameIdentity :: IEWrappedName GhcPs -> NameIdentity
+wrappedNameIdentity = \case
   IEName _ x -> spelled 0 x
   IEDefault _ x -> spelled 1 x
   IEPattern _ x -> spelled 2 x
   IEType _ x -> spelled 3 x
   IEData _ x -> spelled 4 x
   where
-    spelled :: Int -> LocatedN RdrName -> (Int, Bool, String)
-    spelled kind (unLoc -> name) = (kind, punctuation text, text)
+    spelled :: Int -> LocatedN RdrName -> NameIdentity
+    spelled kind (unLoc -> name) =
+      NameIdentity
+        { niKind = kind,
+          niPunctuation = punctuation text,
+          niName = text
+        }
       where
         text = occNameString (rdrNameOcc name)
     punctuation = \case
diff --git a/src/Tilia/Package.hs b/src/Tilia/Package.hs
deleted file mode 100644
--- a/src/Tilia/Package.hs
+++ /dev/null
@@ -1,230 +0,0 @@
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
--- | Information coming from .cabal files.
-module Tilia.Package
-  ( PackageProblem (..),
-    describePackageProblem,
-    PackageReader,
-    newPackageReader,
-  )
-where
-
-import Data.ByteString qualified as BS
-import Data.IORef
-import Data.List (isSuffixOf, sortOn)
-import Data.List.NonEmpty qualified as NE
-import Data.Map.Strict (Map)
-import Data.Map.Strict qualified as Map
-import Data.Ord (Down (..))
-import Data.Text (Text)
-import Data.Text qualified as T
-import Distribution.Fields.ParseResult (runParseResult)
-import Distribution.PackageDescription
-  ( Benchmark (..),
-    BuildInfo (..),
-    CondTree (..),
-    Executable (..),
-    GenericPackageDescription (..),
-    Library (..),
-    TestSuite (..),
-  )
-import Distribution.PackageDescription.Parsec (parseGenericPackageDescription)
-import Distribution.Parsec (showPError)
-import Distribution.Utils.Path (getSymbolicPath)
-import GHC.Driver.Session qualified as GHC
-import GHC.LanguageExtensions.Type (Extension)
-import Language.Haskell.Extension qualified as Cabal
-import System.Directory (canonicalizePath, doesDirectoryExist, listDirectory)
-import System.FilePath (equalFilePath, splitDirectories, takeDirectory, (</>))
-import Tilia.Pragma (lookupExtension)
-import Tilia.Utils (attempted, quietly)
-
--- | Why a file's extensions could not be settled.
-data PackageProblem
-  = -- | No @.cabal@ file at or above the module.
-    NoPackageFile
-  | -- | A @.cabal@ file that could not be read at all, and what went wrong.
-    PackageUnreadable FilePath Text
-  | -- | A @.cabal@ file that was read but did not parse, and everything the
-    -- parser had to say about it. One message per line, each already
-    -- carrying the position it refers to.
-    PackageMalformed FilePath [Text]
-  | -- | A @.cabal@ file naming no component whose @hs-source-dirs@ holds
-    -- the module.
-    FileUnclaimed FilePath
-  deriving (Eq, Show)
-
--- | Say what went wrong, in one line.
-describePackageProblem :: PackageProblem -> Text
-describePackageProblem = \case
-  NoPackageFile -> "no .cabal file above it"
-  PackageUnreadable file why -> T.pack file <> " could not be read: " <> why
-  PackageMalformed file complaints ->
-    T.pack file <> " does not parse:" <> foldMap ("\n  " <>) complaints
-  FileUnclaimed file ->
-    T.pack file <> " names no component whose hs-source-dirs holds it"
-
--- | What we retain from reading a .cabal file.
-type PackageReader = FilePath -> IO (Either PackageProblem [Extension])
-
--- | A 'PackageReader' that remembers what it has already worked out.
-newPackageReader :: IO PackageReader
-newPackageReader = do
-  covering <- newIORef Map.empty
-  described <- newIORef Map.empty
-  pure $ \path -> quietly (Left NoPackageFile) $ do
-    file <- canonicalizePath path
-    from <- startingDirectory file
-    findCabalFile covering from >>= \case
-      Nothing -> pure (Left NoPackageFile)
-      Just cabalFile ->
-        componentsOf described cabalFile >>= \case
-          Left problem -> pure (Left problem)
-          Right components -> pure $ case claiming file components of
-            Just c -> Right (componentExtensions c)
-            Nothing -> Left (FileUnclaimed cabalFile)
-
--- | Where to start looking for a @.cabal@ file.
-startingDirectory :: FilePath -> IO FilePath
-startingDirectory path = do
-  isDirectory <- quietly False (doesDirectoryExist path)
-  pure (if isDirectory then path else takeDirectory path)
-
--- | A component of a package, with everything about it already worked out.
-data Component = Component
-  { -- | Its source directories, absolute and canonical.
-    componentDirs :: [FilePath],
-    -- | The extensions it puts in force.
-    componentExtensions :: [Extension]
-  }
-
--- | Which component holds the file, of those whose directories cover it.
-claiming :: FilePath -> [Component] -> Maybe Component
-claiming file components =
-  case sortOn (Down . fst) [(nearness c, c) | c <- components, covered c] of
-    ((_, c) : _) -> Just c
-    [] -> Nothing
-  where
-    covered = not . null . covering
-    nearness = maximum . map length . covering
-    covering c = [d | d <- componentDirs c, d `covers` file]
-
--- | Whether a file is somewhere under a directory.
-covers :: FilePath -> FilePath -> Bool
-covers directory file = go (splitDirectories directory) (splitDirectories file)
-  where
-    go [] (_ : _) = True
-    go (d : ds) (f : fs) = equalFilePath d f && go ds fs
-    go _ _ = False
-
--- | The nearest @.cabal@ file at or above a directory.
-findCabalFile ::
-  -- | What is known already, by directory: the file covering it, or
-  -- 'Nothing' for one with no @.cabal@ anywhere above it. Read before the
-  -- walk and added to after it, for every directory the walk passed through
-  -- rather than only the one asked about—none of the others held a @.cabal@
-  -- either, which is why the walk went through them, so the answer is
-  -- theirs as well.
-  IORef (Map FilePath (Maybe FilePath)) ->
-  -- | Where to start, which is walked upwards until a @.cabal@ file turns
-  -- up or the filesystem root is reached.
-  FilePath ->
-  IO (Maybe FilePath)
-findCabalFile ref = climb []
-  where
-    climb passed directory = do
-      known <- readIORef ref
-      case Map.lookup directory known of
-        Just answer -> settle passed answer
-        Nothing -> do
-          entries <- quietly [] (listDirectory directory)
-          case filter (".cabal" `isSuffixOf`) entries of
-            (named : _) -> settle (directory : passed) (Just (directory </> named))
-            [] ->
-              let parent = takeDirectory directory
-               in if parent == directory
-                    then settle (directory : passed) Nothing
-                    else climb (directory : passed) parent
-    settle passed answer = do
-      modifyIORef' ref (\m -> foldl' (\acc d -> Map.insert d answer acc) m passed)
-      pure answer
-
--- | What a @.cabal@ file amounts to.
-componentsOf ::
-  IORef (Map FilePath (Either PackageProblem [Component])) ->
-  FilePath ->
-  IO (Either PackageProblem [Component])
-componentsOf ref cabalFile = do
-  known <- readIORef ref
-  case Map.lookup cabalFile known of
-    Just answer -> pure answer
-    Nothing -> do
-      answer <- settle
-      modifyIORef' ref (Map.insert cabalFile answer)
-      pure answer
-  where
-    settle =
-      attempted (BS.readFile cabalFile) >>= \case
-        Left why -> pure (Left (PackageUnreadable cabalFile why))
-        Right bytes ->
-          case snd (runParseResult (parseGenericPackageDescription bytes)) of
-            Left (_, complaints) ->
-              pure (Left (PackageMalformed cabalFile (map said (NE.toList complaints))))
-            Right description ->
-              Right
-                <$> traverse
-                  (component (takeDirectory cabalFile))
-                  (buildInfos description)
-    said = T.pack . showPError cabalFile
-
--- | One component, with its directories resolved and its extensions settled.
-component :: FilePath -> BuildInfo -> IO Component
-component root bi = do
-  dirs <- traverse (quietlyCanonical . (root </>)) (sourceDirsOf bi)
-  pure
-    Component
-      { componentDirs = concat dirs,
-        componentExtensions = extensionsInForce bi
-      }
-  where
-    sourceDirsOf b = case map getSymbolicPath (hsSourceDirs b) of
-      [] -> ["."]
-      ds -> ds
-    quietlyCanonical d =
-      quietly [] $
-        doesDirectoryExist d >>= \case
-          True -> pure <$> canonicalizePath d
-          False -> pure []
-
--- | Every component's build settings, in the order they are declared.
-buildInfos :: GenericPackageDescription -> [BuildInfo]
-buildInfos described =
-  concat
-    [ foldMap (pure . libBuildInfo . condTreeData) (condLibrary described),
-      named (libBuildInfo . condTreeData) (condSubLibraries described),
-      named (buildInfo . condTreeData) (condExecutables described),
-      named (testBuildInfo . condTreeData) (condTestSuites described),
-      named (benchmarkBuildInfo . condTreeData) (condBenchmarks described)
-    ]
-  where
-    named f = map (f . snd)
-
--- | The extensions a component puts in force, before any module's pragmas.
-extensionsInForce :: BuildInfo -> [Extension]
-extensionsInForce bi =
-  foldl apply (GHC.languageExtensions edition) (defaultExtensions bi)
-  where
-    edition = ghcLanguage =<< defaultLanguage bi
-    apply acc = \case
-      Cabal.EnableExtension e
-        | Just on <- named e, on `notElem` acc -> acc <> [on]
-      Cabal.DisableExtension e
-        | Just off <- named e -> filter (/= off) acc
-      _ -> acc
-    named = lookupExtension . T.pack . show
-
--- | GHC's name for a language edition, when it has one.
-ghcLanguage :: Cabal.Language -> Maybe GHC.Language
-ghcLanguage l = lookup (show l) [(show e, e) | e <- [minBound .. maxBound]]
diff --git a/src/Tilia/Parser.hs b/src/Tilia/Parser.hs
--- a/src/Tilia/Parser.hs
+++ b/src/Tilia/Parser.hs
@@ -39,7 +39,7 @@
 import Tilia.Span (Span (..))
 import Tilia.Span.Ghc (spanOfReal)
 
--- | A module that parsed, together with the comments found in it.
+-- | A parsed module, together with the comments found in it.
 data ParsedModule = ParsedModule
   { -- | The syntax tree, exactly as GHC produced it.
     pmModule :: HsModule GhcPs,
@@ -50,9 +50,7 @@
     -- | The lines above the module that the parser never sees.
     --
     -- The lexer skips a @#!@ line, which puts it in no annotation and no
-    -- node, so nothing downstream could put it back. Whatever empty line
-    -- follows the last of them is kept too: it is what holds the module off
-    -- the interpreter line, and it is the author's to decide.
+    -- node, so nothing downstream could put it back.
     pmPrologue :: [Text],
     -- | Where the file header stops and the module proper begins, if the
     -- module has anything after its header.
@@ -66,29 +64,25 @@
 
 -- | Parse a module.
 parseModule ::
+  -- | Parser config.
   ParserConfig ->
-  -- | Path, used only in positions reported back
+  -- | Path, used only in positions reported back.
   FilePath ->
-  -- | The source
+  -- | The source.
   Text ->
   Either ParseError ParsedModule
 parseModule config path source =
   parseConfiguration config path (linesOf (Written source)) source
 
 -- | Parse one configuration of a module.
---
--- The text to parse is one configuration of the module; the 'Written' text
--- is the module the author wrote, which is what every question about the
--- source is answered against. Without the preprocessor the two are the same
--- text and this is 'parseModule'.
 parseConfiguration ::
   ParserConfig ->
-  -- | Path, used only in positions reported back
+  -- | Path, used only in positions reported back.
   FilePath ->
   -- | The lines of the module as written, except for the lines that do not
-  -- belong to this configuration
+  -- belong to this configuration.
   Lines ->
-  -- | The configuration of it to parse
+  -- | The configuration of it to parse.
   Text ->
   Either ParseError ParsedModule
 parseConfiguration config path written source =
@@ -107,8 +101,6 @@
                 pmHeaderEnd = headerEndOf hsModule
               }
   where
-    -- Everything above the @signature@ keyword: the parser leaves those
-    -- here rather than in the tree. A module's are in both.
     headerComments = concat . GHC.header_comments
 
     sourceType = sourceTypeOf path
@@ -119,7 +111,7 @@
 
     whyNot pstate =
       case sortOn at (toList (GHC.getMessages (GHC.getPsErrorMessages pstate))) of
-        m : _ -> ParseError {peSpan = GHC.errMsgSpan m, peProblem = saying m}
+        m : _ -> ParseError{peSpan = GHC.errMsgSpan m, peProblem = saying m}
         [] ->
           ParseError
             { peSpan = GHC.mkSrcSpanPs (GHC.last_loc pstate),
@@ -160,7 +152,7 @@
 
 -- | Options to parse with.
 parserOpts :: ParserConfig -> GHC.ParserOpts
-parserOpts ParserConfig {pcExtensions} =
+parserOpts ParserConfig{pcExtensions} =
   GHC.mkParserOpts
     (EnumSet.fromList pcExtensions)
     quietDiagnostics
@@ -185,10 +177,6 @@
     }
 
 -- | The @#!@ lines a file begins with, and the empty line after them.
---
--- At most one empty line is taken: the rest would only be collapsed
--- wherever they were reproduced, so keeping them would be keeping a
--- distinction that cannot survive.
 prologueOf :: [Text] -> [Text]
 prologueOf ls = case span isShebang ls of
   ([], _) -> []
@@ -197,14 +185,11 @@
     isShebang = T.isPrefixOf "#!"
 
 -- | The start of the first thing that is not part of the header.
---
--- Imports and declarations are the only things that can end a header, and
--- either may come first, so both are consulted.
 headerEndOf :: HsModule GhcPs -> Maybe Span
 headerEndOf hsModule =
   foldl' earliest Nothing $
-    map getLocA (hsmodImports hsModule)
-      <> map getLocA (hsmodDecls hsModule)
+    fmap getLocA (hsmodImports hsModule)
+      <> fmap getLocA (hsmodDecls hsModule)
   where
     earliest acc l = case GHC.srcSpanToRealSrcSpan l of
       Nothing -> acc
@@ -228,7 +213,7 @@
 describeParseError e =
   T.pack (GHC.showSDocUnsafe (GHC.ppr (peSpan e))) <> ": " <> peProblem e
 
--- | What the parser is allowed to accept.
+-- | Parser configuration.
 newtype ParserConfig = ParserConfig
   { -- | Extensions to enable before parsing.
     pcExtensions :: [Extension]
@@ -240,9 +225,9 @@
 
 -- | What to parse with, given whatever the package had to say.
 parserConfigFor ::
-  -- | What the package puts in force, or nothing if there is no package
+  -- | What the package puts in force, or nothing if there is no package.
   [Extension] ->
-  -- | The resulting parser config
+  -- | The resulting parser config.
   ParserConfig
 parserConfigFor package =
   ParserConfig
diff --git a/src/Tilia/Pragma.hs b/src/Tilia/Pragma.hs
--- a/src/Tilia/Pragma.hs
+++ b/src/Tilia/Pragma.hs
@@ -51,10 +51,10 @@
     pragmaNames body =
       let (keyword, names) = T.break (== ' ') body
        in if T.toUpper keyword == "LANGUAGE"
-            then filter (not . T.null) (map T.strip (T.splitOn "," names))
+            then filter (not . T.null) (fmap T.strip (T.splitOn "," names))
             else []
 
--- | The extension one writes this name for, if any compiler knows it.
+-- | Parse an extension name.
 lookupExtension :: Text -> Maybe Extension
 lookupExtension name = Map.lookup name extensionsByName
 
diff --git a/src/Tilia/Process.hs b/src/Tilia/Process.hs
--- a/src/Tilia/Process.hs
+++ b/src/Tilia/Process.hs
@@ -1,7 +1,10 @@
 {-# LANGUAGE LambdaCase #-}
 
 -- | Running a program and reading its output.
-module Tilia.Process (readProgramOutput) where
+module Tilia.Process
+  ( readProgramOutput,
+  )
+where
 
 import Control.Concurrent (forkIO, newEmptyMVar, putMVar, takeMVar)
 import Data.ByteString qualified as BS
@@ -24,16 +27,9 @@
 
 -- | Run a program and read what it printed on standard output.
 --
--- 'Nothing' where it could not be run at all or did not succeed, which the
--- callers treat alike: both mean this program has nothing to tell them.
--- Whatever it printed on its error stream is read but not kept—see 'drain'
--- for why it has to be read—because the one thing worse than a tool that
--- cannot answer is a tool that says so over the formatter's own output.
+-- 'Nothing' where it could not be run at all or did not succeed.
 --
--- Line endings come back as newlines however the program wrote them. A
--- child writing to a pipe on Windows ends its lines the Windows way, and
--- every caller here goes on to split what it gets into lines and compare
--- them against something.
+-- Line endings come back as newlines however the program wrote them.
 readProgramOutput :: FilePath -> [String] -> IO (Maybe Text)
 readProgramOutput program args = quietly Nothing $
   withCreateProcess spec $ \toChild fromChild childErrors running -> do
diff --git a/src/Tilia/Project.hs b/src/Tilia/Project.hs
deleted file mode 100644
--- a/src/Tilia/Project.hs
+++ /dev/null
@@ -1,93 +0,0 @@
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Finding the project a file belongs to.
---
--- A formatter is usually handed a file, not a project. An editor may run it
--- with the working directory set to the file's own directory, or to the
--- editor's, or to wherever the user happened to start it. None of those is
--- reliably the root, and the root is what the build plan and the package
--- cache are found relative to.
-module Tilia.Project
-  ( ProjectRoot (..),
-    Marker (..),
-    markerFile,
-    findProjectRoot,
-  )
-where
-
-import Data.List (isSuffixOf)
-import Data.Maybe (listToMaybe)
-import System.Directory
-  ( canonicalizePath,
-    doesDirectoryExist,
-    listDirectory,
-  )
-import System.FilePath (takeDirectory)
-import Tilia.Utils (quietly)
-
--- | A project, and what marked it out.
-data ProjectRoot = ProjectRoot
-  { -- | The directory.
-    prPath :: FilePath,
-    -- | What identified it.
-    prMarker :: Marker
-  }
-  deriving (Eq, Show)
-
--- | What a project was recognised by.
---
--- The two are read differently—one names the packages of a build, the
--- other is a package—so which it was has to survive being found.
-data Marker
-  = -- | A @cabal.project@, which names the packages.
-    ProjectFile
-  | -- | A @.cabal@ file, by its name: a package with no project around it.
-    PackageFile FilePath
-  deriving (Eq, Show)
-
--- | The file a marker stands for, for reporting.
-markerFile :: Marker -> FilePath
-markerFile = \case
-  ProjectFile -> "cabal.project"
-  PackageFile named -> named
-
--- | Walk upwards from a file or directory looking for a project.
---
--- A @cabal.project@ anywhere above wins over a @.cabal@ file nearer to
--- hand, so that a package inside a multi-package repository resolves to the
--- repository rather than to itself. That is where @cabal@ solves the build
--- and writes the plan, and a run rooted at the package would go looking for
--- a plan that is one directory up.
---
--- Only what @cabal@ reads counts. A @stack.yaml@ is not a project here: it
--- would stop the climb at a directory @cabal@ cannot solve in, whereas
--- passing over it settles on a @.cabal@ that @cabal@ can, which is the
--- difference between formatting a stack project and refusing it.
---
--- Stops at the filesystem root and returns 'Nothing' rather than guessing.
--- Formatting a file that belongs to no project is a perfectly ordinary
--- thing to do; it simply cannot have its fixities resolved.
-findProjectRoot :: FilePath -> IO (Maybe ProjectRoot)
-findProjectRoot start = quietly Nothing $ do
-  from <- startingDirectory
-  found <- traverse markersIn (from : ancestorsOf from)
-  pure (listToMaybe (concatMap fst found <> concatMap snd found))
-  where
-    startingDirectory = do
-      absolute <- canonicalizePath start
-      isDirectory <- doesDirectoryExist absolute
-      pure (if isDirectory then absolute else takeDirectory absolute)
-
-    ancestorsOf directory =
-      let parent = takeDirectory directory
-       in if parent == directory then [] else parent : ancestorsOf parent
-
-    markersIn directory = quietly ([], []) $ do
-      entries <- listDirectory directory
-      pure
-        ( [ProjectRoot directory ProjectFile | "cabal.project" `elem` entries],
-          [ ProjectRoot directory (PackageFile named)
-          | named <- take 1 (filter (".cabal" `isSuffixOf`) entries)
-          ]
-        )
diff --git a/src/Tilia/Render.hs b/src/Tilia/Render.hs
--- a/src/Tilia/Render.hs
+++ b/src/Tilia/Render.hs
@@ -72,10 +72,8 @@
     (stackHeader, rest) = takeStackHeader (pmHeaderEnd parsed) plain
     (pragmas, uncovered) = takeHeaderPragmas (pmSource parsed) (pmHeaderEnd parsed) rest
     loose = heldOffModuleDoc hsMod haddocks pragmas uncovered
-
     implicitPrelude =
       fromBool (Set.member ImplicitPrelude (rcExtensions settings))
-
     sorted m =
       m
         { hsmodImports =
@@ -98,10 +96,10 @@
 
 -- | Keep a comment from running into a Haddock.
 heldOff :: [Comment] -> [Comment] -> [Comment]
-heldOff haddocks = map holdOff
+heldOff haddocks = fmap holdOff
   where
     written = filter (not . bracketed) haddocks
-    ends = Set.fromList (map (spanEndLine . commentSpan) written)
+    ends = Set.fromList (fmap (spanEndLine . commentSpan) written)
     starts =
       Set.fromList
         [ spanStartLine (commentSpan h)
@@ -123,9 +121,9 @@
 -- | Hold the first comment of the header off the module's own Haddock.
 heldOffModuleDoc ::
   HsModule GhcPs ->
-  -- | The Haddocks of the module, the module's own among them
+  -- | The Haddocks of the module, the module's own among them.
   [Comment] ->
-  -- | The pragmas the header is about to hoist
+  -- | The pragmas the header is about to hoist.
   [HeaderPragma] ->
   [Comment] ->
   [Comment]
@@ -133,7 +131,7 @@
   | Just ended <- endOfModuleDoc,
     Just began <- startOfModuleLine,
     (before', c : after') <- break (uncoveredBetween ended began) cs =
-      before' <> (c {commentGapAbove = True} : after')
+      before' <> (c{commentGapAbove = True} : after')
   | otherwise = cs
   where
     uncoveredBetween ended began c =
@@ -142,13 +140,13 @@
         && not (Set.member (spanEndLine here + 1) travellers)
       where
         here = commentSpan c
-    travellers = Set.fromList (map (spanStartLine . hpSpan) pragmas)
+    travellers = Set.fromList (fmap (spanStartLine . hpSpan) pragmas)
     endOfModuleDoc = do
       s <- moduleDoc
       c <- lookup (startPoint s) [(startPoint (commentSpan h), h) | h <- haddocks]
       if bracketed c then Nothing else Just (spanEndLine s)
     moduleDoc = case hsmodExt hsMod of
-      XModulePs {hsmodHaddockModHeader = Just d} -> spanOfSrcSpan (getLoc d)
+      XModulePs{hsmodHaddockModHeader = Just d} -> spanOfSrcSpan (getLoc d)
       _ -> Nothing
     startOfModuleLine = spanStartLine <$> (spanOf =<< hsmodName hsMod)
 
@@ -171,13 +169,13 @@
 -- | Separate the comments the syntax tree also knows about from the rest.
 splitHaddocks ::
   HsModule GhcPs ->
-  -- | Every comment in the module
+  -- | Every comment in the module.
   [Comment] ->
-  -- | The ones the tree carries, and the ones it does not
+  -- | The ones the tree carries, and the ones it does not.
   ([Comment], [Comment])
 splitHaddocks hsMod = foldr sort' ([], [])
   where
-    inTree = Set.fromList (map startPoint (haddockSpans hsMod))
+    inTree = Set.fromList (fmap startPoint (haddockSpans hsMod))
     sort' c (docs, rest)
       | startPoint (commentSpan c) `Set.member` inTree =
           (widenTrigger c : docs, rest)
diff --git a/src/Tilia/Render/Body.hs b/src/Tilia/Render/Body.hs
--- a/src/Tilia/Render/Body.hs
+++ b/src/Tilia/Render/Body.hs
@@ -1,26 +1,10 @@
 {-# LANGUAGE LambdaCase #-}
 
--- | Which constructs absorb the line break that introduces them.
---
--- A body is a node together with the site it stands at, and the one question
--- an enclosing construct has to ask of it is where to put it: on the line it
--- has already started, or on the next one indented. "Tilia.Doc.Body"
--- states that question as a class; this module answers it, for the two kinds
--- of node that can stand as a body.
---
--- The answers are a table, not an argument. Threading a @body -> Placement@
--- callback through every construct that has a body—equations, guards, @if@,
--- @let@, @case@, lambdas, statements—spreads one small piece of knowledge
--- across a dozen signatures and makes each of them carry a second parameter
--- that only ever has two possible values. Here it is written down once, and
--- what the constructs pass around is the body itself.
+-- | Hanging vs non-hanging constructs.
 module Tilia.Render.Body
-  ( -- * Bodies
-    ExprBody (..),
+  ( ExprBody (..),
     CmdBody (..),
     CmdTopBody (..),
-
-    -- * The table
     exprHangs,
     operatorName,
     cmdTopHangs,
@@ -37,9 +21,6 @@
 import Tilia.Span
 import Tilia.Span.Ghc
 
-----------------------------------------------------------------------------
--- Bodies
-
 -- | An expression standing as the body of an enclosing construct.
 data ExprBody = ExprBody Ctx Site (LHsExpr GhcPs)
 
@@ -62,37 +43,22 @@
     at ctx l (\(HsCmdTop _ cmd) -> knotCmd (ctxKnot ctx) ctx site cmd)
   bodyPlacement (CmdTopBody _ _ l) = cmdTopHangs (unLoc l)
 
-----------------------------------------------------------------------------
--- The table
-
 -- | Does this expression absorb the line break that introduces it?
---
--- A @do@ block, a @case@ and a lambda all begin with a keyword and continue
--- on the lines below, so @f = do@ costs nothing and saves a line. Everything
--- not named here has to start on a line of its own.
 exprHangs :: HsExpr GhcPs -> Placement
 exprHangs = \case
   HsDo _ (DoExpr _) _ -> Hanging
   HsDo _ (MDoExpr _) _ -> Hanging
-  HsCase {} -> Hanging
+  HsCase{} -> Hanging
   HsLam _ lamVariant mg -> case lamVariant of
     LamCase -> Hanging
     LamCases -> Hanging
-    -- A lambda whose parameters ran over several lines leaves its body
-    -- indented under nothing legible, so only a compact one hangs.
     LamSingle -> case mg of
       MG _ (L _ [L _ (Match _ _ (L _ ps@(_ : _)) _)])
         | maybe False isSingleLine (spansOf ps) -> Hanging
       _ -> Normal
   HsProc _ p _
-    -- The indentation breaks when the pattern runs over more than one line,
-    -- so hanging is only safe when it does not.
     | maybe False isSingleLine (spanOf p) -> Hanging
     | otherwise -> Normal
-  -- An application hangs on its last argument, and a chain through @$@ on
-  -- its right operand: both of those are the thing that would be introduced.
-  -- No other operator qualifies, @$@ being the one whose whole purpose is to
-  -- hand a block to what precedes it.
   HsApp _ _ y -> exprHangs (unLoc y)
   OpApp _ _ op y
     | Just n <- operatorName op,
@@ -103,9 +69,9 @@
 -- | Does this command absorb the line break that introduces it?
 cmdHangs :: HsCmd GhcPs -> Placement
 cmdHangs = \case
-  HsCmdDo {} -> Hanging
-  HsCmdCase {} -> Hanging
-  HsCmdLam {} -> Hanging
+  HsCmdDo{} -> Hanging
+  HsCmdCase{} -> Hanging
+  HsCmdLam{} -> Hanging
   _ -> Normal
 
 cmdTopHangs :: HsCmdTop GhcPs -> Placement
diff --git a/src/Tilia/Render/Class.hs b/src/Tilia/Render/Class.hs
--- a/src/Tilia/Render/Class.hs
+++ b/src/Tilia/Render/Class.hs
@@ -1,15 +1,11 @@
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
 {-# LANGUAGE RecordWildCards #-}
 
 -- | Classes, instances and families.
---
--- What these have in common is a head followed by a body of declarations,
--- and a recurring difficulty: the syntax tree keeps the body's declarations
--- in several lists—signatures here, bindings there, associated families
--- somewhere else—so the order the author wrote them in survives only in
--- their spans. Every body in this module has to be put back in order before
--- it can be printed.
 module Tilia.Render.Class
   ( classDecl,
     clsInstDecl,
@@ -21,6 +17,7 @@
   )
 where
 
+import Data.Choice (fromBool, pattern Do)
 import Data.Function (on)
 import Data.List (sortBy)
 import Data.Maybe (isNothing)
@@ -38,9 +35,6 @@
 import Tilia.Render.Type
 import Tilia.Span.Ghc
 
-----------------------------------------------------------------------------
--- Classes
-
 -- | A type class declaration.
 classDecl ::
   Ctx ->
@@ -56,7 +50,7 @@
   [LTyFamDefltDecl GhcPs] ->
   [LDocDecl GhcPs] ->
   Doc
-classDecl ctx anns ctxt tyCon HsQTvs {..} fixity fdeps sigs binds families defaults docs =
+classDecl ctx anns ctxt tyCon HsQTvs{..} fixity fdeps sigs binds families defaults docs =
   txt "class" <> layoutFrom ctx wholeHeadSpan head' <> body
   where
     headSpan = spanOf tyCon <> spansOf hsq_explicit
@@ -80,14 +74,14 @@
             parens
               ( insideBrackets
                   (spanOf tyCon)
-                  (commaSep (map (align . at_ ctx (tyVarBndr ctx)) hsq_explicit))
+                  (commaSep (fmap (align . at_ ctx (tyVarBndr ctx)) hsq_explicit))
               )
       | otherwise =
           defHead
-            (fixity == Infix)
-            True
+            (fromBool (fixity == Infix))
+            (Do #indentArgs)
             (name ctx tyCon)
-            (map (at_ ctx (tyVarBndr ctx)) hsq_explicit)
+            (fmap (at_ ctx (tyVarBndr ctx)) hsq_explicit)
 
     body =
       includeUnless
@@ -96,11 +90,11 @@
 
     members =
       inSourceOrder
-        [ map (fmap (SigD NoExtField)) sigs,
-          map (fmap (ValD NoExtField)) binds,
-          map (fmap (TyClD NoExtField . FamDecl NoExtField)) families,
-          map (fmap (InstD NoExtField . TyFamInstD NoExtField)) defaults,
-          map (fmap (DocD NoExtField)) docs
+        [ fmap (fmap (SigD NoExtField)) sigs,
+          fmap (fmap (ValD NoExtField)) binds,
+          fmap (fmap (TyClD NoExtField . FamDecl NoExtField)) families,
+          fmap (fmap (InstD NoExtField . TyFamInstD NoExtField)) defaults,
+          fmap (fmap (DocD NoExtField)) docs
         ]
 
 -- | Is this the constraint tuple of the given arity?
@@ -121,22 +115,19 @@
   breakOrSpace
     <> txt "|"
     <> space
-    <> indent (commaSep (map (align . at_ ctx (funDep ctx)) fdeps))
+    <> indent (commaSep (fmap (align . at_ ctx (funDep ctx)) fdeps))
 
 funDep :: Ctx -> FunDep GhcPs -> Doc
 funDep ctx (FunDep _ before after) =
-  hsep (map (name ctx) before)
+  hsep (fmap (name ctx) before)
     <> space
     <> txt "->"
     <> space
-    <> hsep (map (name ctx) after)
-
-----------------------------------------------------------------------------
--- Instances
+    <> hsep (fmap (name ctx) after)
 
 -- | A class instance.
 clsInstDecl :: Ctx -> ClsInstDecl GhcPs -> Doc
-clsInstDecl ctx ClsInstDecl {cid_ext = (warning, anns, _), ..} =
+clsInstDecl ctx ClsInstDecl{cid_ext = (warning, anns, _), ..} =
   txt "instance" <> layoutFrom ctx headSpan head' <> body
   where
     headSpan = foldMap spanOf warning <> spanOf cid_poly_ty
@@ -163,15 +154,15 @@
 
     members =
       inSourceOrder
-        [ map (fmap (SigD NoExtField)) cid_sigs,
-          map (fmap (ValD NoExtField)) cid_binds,
-          map (fmap (InstD NoExtField . TyFamInstD NoExtField)) cid_tyfam_insts,
-          map (fmap (InstD NoExtField . DataFamInstD NoExtField)) cid_datafam_insts
+        [ fmap (fmap (SigD NoExtField)) cid_sigs,
+          fmap (fmap (ValD NoExtField)) cid_binds,
+          fmap (fmap (InstD NoExtField . TyFamInstD NoExtField)) cid_tyfam_insts,
+          fmap (fmap (InstD NoExtField . DataFamInstD NoExtField)) cid_datafam_insts
         ]
 
 -- | A standalone @deriving@ declaration.
 standaloneDerivDecl :: Ctx -> DerivDecl GhcPs -> Doc
-standaloneDerivDecl ctx DerivDecl {deriv_ext = (warning, _), ..} =
+standaloneDerivDecl ctx DerivDecl{deriv_ext = (warning, _), ..} =
   txt "deriving" <> space <> strategy
   where
     instanceHead indented =
@@ -197,7 +188,7 @@
 
 -- | A type family instance.
 tyFamInstDecl :: Ctx -> FamilyStyle -> TyFamInstDecl GhcPs -> Doc
-tyFamInstDecl ctx style TyFamInstDecl {..} =
+tyFamInstDecl ctx style TyFamInstDecl{..} =
   txt keyword <> breakOrSpace <> indent (tyFamInstEqn ctx tfid_eqn)
   where
     keyword = case style of
@@ -206,7 +197,7 @@
 
 -- | A data family instance.
 dataFamInstDecl :: Ctx -> FamilyStyle -> DataFamInstDecl GhcPs -> Doc
-dataFamInstDecl ctx style (DataFamInstDecl FamEqn {..}) =
+dataFamInstDecl ctx style (DataFamInstDecl FamEqn{..}) =
   dataDecl
     ctx
     style
@@ -225,12 +216,9 @@
       HsOuterExplicit _ bndrs ->
         forallBndrs ctx Invisible (tyVarBndr ctx) bndrs <> breakOrSpace
 
-----------------------------------------------------------------------------
--- Families
-
 -- | A @data family@ or @type family@ declaration.
 famDecl :: Ctx -> FamilyStyle -> FamilyDecl GhcPs -> Doc
-famDecl ctx style FamilyDecl {fdTyVars = HsQTvs {..}, ..} =
+famDecl ctx style FamilyDecl{fdTyVars = HsQTvs{..}, ..} =
   txt keyword <> txt familyWord <> head' <> equations
   where
     (keyword, closedEqns) = case fdInfo of
@@ -251,10 +239,10 @@
             ctx
             headSpan
             ( defHead
-                (fdFixity == Infix)
-                True
+                (fromBool (fdFixity == Infix))
+                (Do #indentArgs)
                 (name ctx fdLName)
-                (map (at_ ctx (tyVarBndr ctx)) hsq_explicit)
+                (fmap (at_ ctx (tyVarBndr ctx)) hsq_explicit)
             )
           <> includeUnless
             (isNothing resultSig && isNothing fdInjectivityAnn)
@@ -273,16 +261,10 @@
       Just eqs ->
         indent (layoutFrom ctx headAndSigSpan (breakOrSpace <> txt "where"))
           <> case eqs of
-            -- @where ..@ is how a closed family says that its equations are
-            -- not being given here.
             Nothing -> space <> txt ".."
-            -- A closed family may be given no equations at all, and then
-            -- the @where@ is the whole of it. Breaking the line anyway
-            -- leaves the next thing along hanging under a @where@ that
-            -- opened a block nothing was put in.
             Just given ->
               includeUnless (null given) $
-                hardBreak <> indent (vsep (map (at_ ctx (tyFamInstEqn ctx)) given))
+                hardBreak <> indent (vsep (fmap (at_ ctx (tyFamInstEqn ctx)) given))
 
 familyResultSig :: Ctx -> LFamilyResultSig GhcPs -> Maybe Doc
 familyResultSig ctx (L _ sig) = case sig of
@@ -300,11 +282,11 @@
     <> space
     <> txt "->"
     <> space
-    <> hsep (map (name ctx) to)
+    <> hsep (fmap (name ctx) to)
 
 -- | One equation of a type family.
 tyFamInstEqn :: Ctx -> TyFamInstEqn GhcPs -> Doc
-tyFamInstEqn ctx FamEqn {..} =
+tyFamInstEqn ctx FamEqn{..} =
   binders <> nest (if hasBinders then 1 else 0) (lhs <> rhs)
   where
     (binders, hasBinders) = case feqn_bndrs of
@@ -317,17 +299,14 @@
     lhs =
       layoutFrom ctx (spanOf feqn_tycon <> foldMap typeArgSpan feqn_pats) $
         defHead
-          (feqn_fixity == Infix)
-          True
+          (fromBool (feqn_fixity == Infix))
+          (Do #indentArgs)
           (name ctx feqn_tycon)
-          (map (typeArgument ctx) feqn_pats)
+          (fmap (typeArgument ctx) feqn_pats)
 
     rhs =
       indent (joinedBy "=" <> hsType ctx feqn_rhs)
 
-----------------------------------------------------------------------------
--- Role annotations
-
 -- | A @type role@ declaration.
 roleAnnot :: Ctx -> RoleAnnotDecl GhcPs -> Doc
 roleAnnot ctx (RoleAnnotDecl _ tyCon roles) =
@@ -336,16 +315,13 @@
     <> indent
       ( name ctx tyCon
           <> breakOrSpace
-          <> indent (align (sepBy breakOrSpace (map (align . at_ ctx role) roles)))
+          <> indent (align (sepBy breakOrSpace (fmap (align . at_ ctx role) roles)))
       )
   where
     role = maybe (txt "_") $ \case
       Nominal -> txt "nominal"
       Representational -> txt "representational"
       Phantom -> txt "phantom"
-
-----------------------------------------------------------------------------
--- Helpers
 
 -- | Merge several lists of declarations back into the order they were
 -- written in.
diff --git a/src/Tilia/Render/Context.hs b/src/Tilia/Render/Context.hs
--- a/src/Tilia/Render/Context.hs
+++ b/src/Tilia/Render/Context.hs
@@ -1,27 +1,11 @@
 -- | What the syntax walk needs to know that the syntax tree does not say.
---
--- Printing a Haskell module is very nearly a fold over its syntax tree, but
--- not quite: a handful of decisions need facts from outside the node being
--- printed. Which extensions are on decides whether @(#foo)@ needs spaces
--- inside its parentheses; which operators are in scope decides how a chain
--- of them may be regrouped; where the comments are decides which constructs
--- may be put on one line.
---
--- The record also carries the knot ('Knot'). Rendering is mutually
--- recursive—a type may contain a splice, which contains an expression,
--- which contains declarations, which contain types—and rather than break
--- the cycle with @hs-boot@ files the few backward edges are held in this
--- record and tied once, in "Tilia.Render". That is what lets the modules
--- below be ordered by syntactic category instead of by what happens to
--- import what.
 module Tilia.Render.Context
   ( -- * The context
     Ctx (..),
-    SourceType (..),
     Knot (..),
     FamilyStyle (..),
 
-    -- * Where a node stands
+    -- * Sites
     Site (..),
     plainSite,
     withBracing,
@@ -78,62 +62,22 @@
     lookupFixity,
   )
 import Tilia.Render.Layout (Bracing (..))
-import Tilia.Source (Source, SourceType (..), blankAt, sourceLines)
+import Tilia.Source (Source, SourceType, blankAt, sourceLines)
 import Tilia.Span
 import Tilia.Span.Ghc
 
 ----------------------------------------------------------------------------
 -- The context
 
--- | Whether a family or data declaration stands on its own or inside a
--- class.
---
--- An associated declaration drops the @family@ and @instance@ keywords its
--- free-standing counterpart needs, which is the only thing the printer has
--- to know about the difference.
-data FamilyStyle
-  = Associated
-  | Free
-  deriving (Eq, Show)
-
--- | The backward edges of the rendering knot.
---
--- Each field is a printer defined in a module that the module needing it
--- comes before. Nothing else belongs here: a forward edge is an ordinary
--- import and should stay one.
-data Knot = Knot
-  { -- | Expressions, needed by types, patterns and bodies.
-    knotExpr :: Ctx -> Site -> LHsExpr GhcPs -> Doc,
-    -- | Commands, needed by bodies.
-    knotCmd :: Ctx -> Site -> LHsCmd GhcPs -> Doc,
-    -- | Splices, needed by types and patterns, defined with expressions.
-    knotSplice :: Ctx -> SpliceDecoration -> HsUntypedSplice GhcPs -> Doc,
-    -- | Signature declarations, needed by @let@ and @where@ bodies.
-    knotSig :: Ctx -> Sig GhcPs -> Doc,
-    -- | A run of declarations, needed by Template Haskell brackets.
-    knotDecls :: Ctx -> FamilyStyle -> [LHsDecl GhcPs] -> Doc,
-    -- | A run of declarations that keeps the author's blank lines, needed by
-    -- class and instance bodies.
-    knotDeclsGrouped :: Ctx -> FamilyStyle -> [LHsDecl GhcPs] -> Doc
-  }
-
 -- | Everything a printer may need beyond the node it is given.
 data Ctx = Ctx
   { -- | Extensions in force.
     ctxExtensions :: Set Extension,
-    -- | Module or signature.
+    -- | The type of the source file.
     ctxSourceType :: SourceType,
-    -- | What the module can see, if that could be worked out.
-    --
-    -- 'Nothing' is not the same as an empty scope: it means no answer was
-    -- established, and an operator chain whose fixities are unknown is left
-    -- exactly as the author arranged it. See "Tilia.Fixity".
+    -- | What imports the module can see, if that could be worked out.
     ctxScope :: Maybe Scope,
     -- | The comments that take whole lines, by starting position.
-    --
-    -- Only these are here, because only these bear on layout: a construct
-    -- with one written inside it cannot be put on one line, since the
-    -- comment would swallow whatever followed it.
     ctxLineComments :: Map (Int, Int) Comment,
     -- | The module as its author wrote it.
     ctxSource :: Source,
@@ -143,46 +87,34 @@
     ctxKnot :: Knot
   }
 
-----------------------------------------------------------------------------
--- Extensions
-
--- | Is the extension on?
-extensionOn :: Ctx -> Extension -> Bool
-extensionOn ctx e = Set.member e (ctxExtensions ctx)
-
-----------------------------------------------------------------------------
--- Fixities
+-- | The backward edges of the rendering knot.
+data Knot = Knot
+  { -- | Expressions, needed by types, patterns and bodies.
+    knotExpr :: Ctx -> Site -> LHsExpr GhcPs -> Doc,
+    -- | Commands, needed by bodies.
+    knotCmd :: Ctx -> Site -> LHsCmd GhcPs -> Doc,
+    -- | Splices, needed by types and patterns, defined with expressions.
+    knotSplice :: Ctx -> SpliceDecoration -> HsUntypedSplice GhcPs -> Doc,
+    -- | Signature declarations, needed by @let@ and @where@ bodies.
+    knotSig :: Ctx -> Sig GhcPs -> Doc,
+    -- | A run of declarations, needed by Template Haskell brackets.
+    knotDecls :: Ctx -> FamilyStyle -> [LHsDecl GhcPs] -> Doc,
+    -- | A run of declarations that keeps the author's blank lines, needed
+    -- by class and instance bodies.
+    knotDeclsGrouped :: Ctx -> FamilyStyle -> [LHsDecl GhcPs] -> Doc
+  }
 
--- | The fixity of an operator, if one was established.
---
--- 'Nothing' means the question was not answered, and the caller must not
--- rearrange anything on the strength of it.
---
--- The namespace is the caller's to say, and it matters: @:>@ written among
--- types is servant's, written among terms it is text's, and they do not
--- agree about how it binds.
-operatorFixity :: Ctx -> Namespace -> RdrName -> Maybe Fixity
-operatorFixity ctx namespace name = do
-  scope <- ctxScope ctx
-  case lookupFixity scope namespace qualifier op of
-    Resolved fixity _ -> Just fixity
-    Unresolved _ -> Nothing
-  where
-    op = OpName (T.pack (occNameString (rdrNameOcc name)))
-    qualifier = case name of
-      Qual m _ -> Just (T.pack (moduleNameString m))
-      _ -> Nothing
+-- | Whether a family or data declaration stands on its own or inside a
+-- class.
+data FamilyStyle
+  = Associated
+  | Free
+  deriving (Eq, Show)
 
 ----------------------------------------------------------------------------
--- Where a node stands
+-- Sites
 
 -- | What the surroundings of a node oblige it to do.
---
--- None of this can be read off the node itself, and all of it changes how
--- the node is laid out, which is why it travels alongside. It lives here
--- rather than with the expression printer because the knot has to mention
--- it: a body is a node together with the site it stands at, and the printers
--- that turn one into a document are reached through the knot.
 data Site = Site
   { -- | Is this the function of an application, as @f@ is in @f a@?
     siteApplicand :: Bool,
@@ -208,26 +140,51 @@
 
 -- | The same site, with a different answer about braces.
 withBracing :: Bracing -> Site -> Site
-withBracing bracing site = site {siteBracing = bracing}
+withBracing bracing site = site{siteBracing = bracing}
 
 -- | Indent a hanging body, one step further when it hangs off an applicand.
 underSite :: Site -> Doc -> Doc
-underSite site = nest (if siteApplicand site then 2 else 1)
+underSite site =
+  nest (if siteApplicand site then 2 else 1)
 
 -- | Where a bracket opened here has to close.
 closingFor :: Site -> ClosingIndent
 closingFor site = if siteInBlock site then Indented else Outdented
 
 ----------------------------------------------------------------------------
+-- Extensions
+
+-- | Is the extension on?
+extensionOn :: Ctx -> Extension -> Bool
+extensionOn ctx e = Set.member e (ctxExtensions ctx)
+
+----------------------------------------------------------------------------
+-- Fixities
+
+-- | The fixity of an operator, if one was established.
+operatorFixity :: Ctx -> Namespace -> RdrName -> Maybe Fixity
+operatorFixity ctx namespace name = do
+  scope <- ctxScope ctx
+  case lookupFixity scope namespace qualifier op of
+    Resolved fixity _ -> Just fixity
+    Unresolved _ -> Nothing
+  where
+    op = OpName (T.pack (occNameString (rdrNameOcc name)))
+    qualifier = case name of
+      Qual m _ -> Just (T.pack (moduleNameString m))
+      _ -> Nothing
+
+----------------------------------------------------------------------------
 -- What lies between two spans
 
 -- | Where the next thing to be printed begins. It is either the third
 -- argument or a comment, if there is any between the two spans.
 nextPrinted ::
+  -- | The context.
   Ctx ->
-  -- | What has just been printed
+  -- | What has just been printed.
   Maybe Span ->
-  -- | What follows it, if nothing comes between
+  -- | What follows it, if nothing comes between.
   Maybe Span ->
   Maybe Span
 nextPrinted ctx (Just a) mb@(Just b) =
@@ -266,9 +223,7 @@
 --
 -- This is the counterpart of every @L@ in the syntax tree: it records where
 -- the output came from, so that comments can be attached to it later, and
--- it settles the node's layout from the region it occupied. A printer that
--- pattern-matches through a located wrapper without going through here has
--- dropped a comment's only anchor.
+-- it settles the node's layout from the region it occupied.
 at :: (HasLoc l) => Ctx -> GenLocated l a -> (a -> Doc) -> Doc
 at ctx l f = atSpan ctx (spanOf l) (f (GHC.unLoc l))
 
@@ -282,20 +237,12 @@
 -- written anywhere inside the region attaches to this document. So it is
 -- for the handful of things a comment can be written against that the
 -- syntax tree gives no node for—the @where@ that opens a body, the @then@
--- of an @if@—and for nothing else. Claiming a region merely because its
--- layout is being decided would hand every comment inside it to whatever
--- happens to be printed first.
+-- of an @if@—and for nothing else.
 atSpan :: Ctx -> Maybe Span -> Doc -> Doc
 atSpan _ Nothing d = d
 atSpan ctx (Just s) d = located s (grouped ctx s d)
 
 -- | A keyword, claiming the span it was written on.
---
--- A keyword is one of the things an author writes a comment against that
--- the syntax tree gives no node for. Unless it claims its own span there is
--- no region on that line for such a comment to trail, and it falls through
--- to whatever construct begins next, to be printed above that on a line its
--- author did not choose.
 keywordAt :: Ctx -> Maybe Span -> Text -> Doc
 keywordAt ctx s = atSpan ctx s . txt
 
@@ -308,33 +255,20 @@
 -- | Lay a region out as it was written, and claim nothing.
 --
 -- The region decides one thing—whether what is printed here goes on one
--- line or several—and says nothing about where the output came from. That
--- is the whole difference from 'atSpan', and it is why this is the one to
--- reach for by default.
---
--- Given no span at all it lays the document out flat, which is what a
--- construct the printer synthesised rather than read deserves.
+-- line or several.
 layoutFrom :: Ctx -> Maybe Span -> Doc -> Doc
 layoutFrom _ Nothing d = flat d
 layoutFrom ctx (Just s) d = grouped ctx s d
 
 -- | Lay a construct out from the region its contents occupy rather than the
 -- region it occupies.
---
--- Delimiters are not contents. @[\n Int\n]@ is a list of one thing written
--- on one line, held apart by brackets that happen to sit on lines of their
--- own, and breaking it because the brackets are spread out would be
--- following the punctuation rather than the code. What the author spread
--- out is what decides, and that is the elements.
---
--- Comments are still looked for across the whole construct, brackets and
--- all: one written between a bracket and what it holds still owns the rest
--- of its line, so the construct still cannot be put on one.
 layoutWithin ::
+  -- | The context.
   Ctx ->
-  -- | The whole construct, delimiters included
+  -- | The whole construct, delimiters included. Where comments are looked
+  -- for.
   Maybe Span ->
-  -- | What it holds
+  -- | What it holds, delimiters left out.
   Maybe Span ->
   Doc ->
   Doc
@@ -347,26 +281,10 @@
 layoutAcross ctx xs = layoutFrom ctx (spansOf xs)
 
 -- | Give the inside of a bracketed construct an anchor at its far end.
---
--- The last element of a list is not the last thing inside its brackets: a
--- comment may be written after it and before the closing bracket, and it
--- belongs inside. Nothing in the syntax tree stands there, so a zero-width
--- anchor at the construct's own end is put there for such a comment to
--- attach to—and it is the only thing a comment written between the brackets
--- of an /empty/ construct has to attach to at all.
---
--- Without it those comments have nothing to hold them and are emitted after
--- the closing bracket, which moves them out of the construct they were
--- written in.
 insideBrackets :: Maybe Span -> Doc -> Doc
 insideBrackets here d = d <> foldMap (emptyAnchor . endOf) here
 
 -- | Lay a document out according to a span, and to the comments inside it.
---
--- Layout follows the input, except that a comment taking a whole line
--- overrules it. Such a comment owns the rest of its line, so a construct
--- holding one cannot be put on one line however the author wrote it; the
--- closing bracket would end up commented out.
 grouped :: Ctx -> Span -> Doc -> Doc
 grouped ctx s d
   | holdsLineComment ctx s = broken d
@@ -383,12 +301,6 @@
 -- Haddocks
 
 -- | The author's own text for the Haddock at this position, if we kept it.
---
--- Rebuilding a Haddock from the doc string the syntax tree carries cannot
--- reproduce a @{- | … -}@ or an empty @-- |@, so the text is taken from the
--- comment stream whenever the Haddock is going to come back out in the style
--- it went in as. Deciding that is the caller's business; all this does is
--- find the text.
 writtenHaddock :: Ctx -> Maybe Span -> Maybe (NonEmpty Text)
 writtenHaddock ctx ms = do
   s <- ms
diff --git a/src/Tilia/Render/Data.hs b/src/Tilia/Render/Data.hs
--- a/src/Tilia/Render/Data.hs
+++ b/src/Tilia/Render/Data.hs
@@ -1,22 +1,18 @@
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
 {-# LANGUAGE RecordWildCards #-}
 
 -- | Data types and type synonyms.
---
--- One declaration form covers a great deal of ground here—@data@,
--- @newtype@, @type data@, ordinary constructors, record constructors, GADT
--- constructors, and instances of all of them—which is why this reads as a
--- series of decisions rather than as a single shape. The decisions are:
--- whether the constructors are written in GADT style, whether there is
--- exactly one and it is a record, and whether anything is documented with a
--- Haddock that takes whole lines.
 module Tilia.Render.Data
   ( dataDecl,
     synDecl,
   )
 where
 
+import Data.Choice (Choice, fromBool, isTrue, pattern Do, pattern Isn't)
 import Data.List.NonEmpty (NonEmpty (..))
 import Data.List.NonEmpty qualified as NE
 import Data.Maybe (isJust, isNothing, mapMaybe, maybeToList)
@@ -36,19 +32,21 @@
 
 -- | A @data@, @newtype@ or @type data@ declaration, or an instance of one.
 --
--- The type variables are left abstract because a data instance is applied to
--- types rather than to variables, and the two are otherwise printed
+-- The type variables are left abstract because a data instance is applied
+-- to types rather than to variables, and the two are otherwise printed
 -- identically.
 dataDecl ::
+  -- | The context.
   Ctx ->
+  -- | The family style.
   FamilyStyle ->
-  -- | The type constructor
+  -- | The type constructor.
   LocatedN RdrName ->
-  -- | What it is applied to
+  -- | What it is applied to.
   [tyVar] ->
-  -- | Where each of those was
+  -- | Where each of those was.
   (tyVar -> Maybe Span) ->
-  -- | How to print one
+  -- | How to print one.
   (tyVar -> Doc) ->
   -- | Was the head written infix?
   LexicalFixity ->
@@ -57,13 +55,14 @@
   Doc ->
   HsDataDefn GhcPs ->
   Doc
-dataDecl ctx style tyCon tyVars tyVarSpan renderTyVar fixity outerBinders HsDataDefn {..} =
+dataDecl ctx style tyCon tyVars tyVarSpan renderTyVar fixity outerBinders HsDataDefn{..} =
   txt keyword <> txt instanceWord <> header <> constructors <> derivings
   where
     keyword = case dd_cons of
       NewTypeCon _ -> "newtype"
       DataTypeCons False _ -> "data"
       DataTypeCons True _ -> "type data"
+
     instanceWord = case style of
       Associated -> ""
       Free -> " instance"
@@ -84,13 +83,17 @@
           <> layoutFrom
             ctx
             headSpan
-            (defHead (fixity == Infix) True (name ctx tyCon) (map renderTyVar tyVars))
+            ( defHead
+                (fromBool (fixity == Infix))
+                (Do #indentArgs)
+                (name ctx tyCon)
+                (fmap renderTyVar tyVars)
+            )
           <> foldMap kindSignature dd_kindSig
 
     kindSignature k =
       joinedBy "::" <> indent (hsType ctx k)
 
-    -- The @{-# CTYPE … #-}@ pragma of a foreign data type.
     foreignType = case unLoc <$> dd_cType of
       Nothing -> mempty
       Just (CType prag header' (type_, _)) ->
@@ -105,8 +108,6 @@
       NewTypeCon c -> [c]
       DataTypeCons _ cs -> cs
 
-    -- A kind signature on the head, or any constructor written with a
-    -- signature of its own, means the whole declaration is in GADT style.
     isGadt = isJust dd_kindSig || any (isGadtCon . unLoc) cons
 
     constructors = case cons of
@@ -116,33 +117,22 @@
             indent $
               layoutFrom ctx wholeHeadSpan (breakOrSpace <> txt "where")
                 <> breakOrSpace
-                -- Braces once there is a semicolon to protect: written flat
-                -- the @where@ block has no column to end at, so anything
-                -- after the declaration would be read as another
-                -- constructor. One constructor needs no separator and so no
-                -- braces.
                 <> items
                   (if null (drop 1 cons) then NoBrace else MayBrace)
-                  (map (at_ ctx (conDecl ctx False)) cons)
+                  (fmap (at_ ctx (conDecl ctx (Isn't #singleRecCon))) cons)
         | otherwise ->
             layoutFrom ctx (spanOf tyCon <> spansOf cons) . indent $
               beforeEquals <> txt "=" <> space <> alternatives
         where
-          -- A single record constructor is laid out as one thing with the
-          -- @=@, since there is no choice of constructor to present.
           singleRecCon = case cons of
-            [L _ ConDeclH98 {con_args = RecCon {}}] -> True
+            [L _ ConDeclH98{con_args = RecCon{}}] -> True
             _ -> False
           compactAroundEquals =
             sameLine (spanOf tyCon) (conNamesSpan (unLoc firstCon))
           conNamesSpan = \case
-            ConDeclGADT {..} -> spansOf (NE.toList con_names)
-            ConDeclH98 {..} -> spanOf con_name
+            ConDeclGADT{..} -> spansOf (NE.toList con_names)
+            ConDeclH98{..} -> spanOf con_name
 
-          -- Documentation written as @--@ lines owns the rest of the line
-          -- it starts, so nothing can follow it and the constructors go one
-          -- to a line. Written as @{- | … -}@ it closes itself and asks
-          -- nothing of the layout.
           lineHaddocks = any (printsWholeLineDocs ctx . visibleDocs . unLoc) cons
 
           beforeEquals
@@ -159,45 +149,40 @@
             | otherwise = id
 
           alternatives =
-            sepBy separator (map (keepTogether . at_ ctx (conDecl ctx singleRecCon)) cons)
-
+            sepBy
+              separator
+              ( fmap
+                  (keepTogether . at_ ctx (conDecl ctx (fromBool singleRecCon)))
+                  cons
+              )
     derivings =
       includeUnless (null dd_derivs) beforeDerivings
-        <> indent (vsep (map (at_ ctx (derivingClause ctx)) dd_derivs))
+        <> indent (vsep (fmap (at_ ctx (derivingClause ctx)) dd_derivs))
     beforeDerivings
       | length dd_derivs > 1 = hardBreak
       | otherwise = breakOrSpace
 
 -- | The documentation a constructor's own layout has to make room for.
---
--- Which is its Haddock and the ones on its prefix arguments, and nothing
--- deeper. A field of a record gets a line of its own wherever the @=@ ends
--- up, so a Haddock on one of those settles nothing about the constructor
--- around it and is left out of the question.
 visibleDocs :: ConDecl GhcPs -> [LHsDoc GhcPs]
 visibleDocs = \case
-  ConDeclH98 {..} ->
+  ConDeclH98{..} ->
     maybeToList con_doc <> case con_args of
       PrefixCon xs -> mapMaybe cdf_doc xs
       _ -> []
-  ConDeclGADT {} -> []
+  ConDeclGADT{} -> []
 
+-- | Is this a GADT constructor?
 isGadtCon :: ConDecl GhcPs -> Bool
 isGadtCon = \case
-  ConDeclGADT {} -> True
-  ConDeclH98 {} -> False
-
-----------------------------------------------------------------------------
--- Constructors
+  ConDeclGADT{} -> True
+  ConDeclH98{} -> False
 
 -- | One constructor.
-conDecl :: Ctx -> Bool -> ConDecl GhcPs -> Doc
-conDecl ctx _ ConDeclGADT {..} =
+conDecl :: Ctx -> Choice "singleRecCon" -> ConDecl GhcPs -> Doc
+conDecl ctx _ ConDeclGADT{..} =
   foldMap (haddock ctx Pipe Closed) con_doc
     <> layoutFrom ctx declSpan (brokenIfDocumented ctx documented body)
   where
-    -- Every part of the signature shares one layout decision, so a Haddock
-    -- anywhere in it puts the whole of it on several lines.
     documented = (con_g_args, con_res_ty)
 
     c :| cs = con_names
@@ -205,15 +190,15 @@
       name ctx c
         <> includeUnless
           (null cs)
-          (indent (comma <> breakOrSpace <> commaSep (map (name ctx) cs)))
+          (indent (comma <> breakOrSpace <> commaSep (fmap (name ctx) cs)))
         <> joinedBy "::"
         <> indent (layoutFrom ctx sigSpan (brokenIfDocumented ctx documented signature))
 
     signature =
       outerBndrs ctx (unLoc con_outer_bndrs)
         <> ( case unLoc con_outer_bndrs of
-               HsOuterImplicit {} -> mempty
-               HsOuterExplicit {} -> breakOrSpace
+               HsOuterImplicit{} -> mempty
+               HsOuterExplicit{} -> breakOrSpace
            )
         <> foldMap (\tele -> forallTelescope ctx tele <> breakOrSpace) con_inner_bndrs
         <> foldMap
@@ -229,12 +214,12 @@
     -- second signature on the constructor rather than as a kind on its
     -- result, and does not parse at all.
     resultType = case unLoc con_res_ty of
-      HsKindSig {} -> parens (hsType ctx con_res_ty)
-      HsForAllTy {} | standsAlone -> parens (hsType ctx con_res_ty)
-      HsQualTy {} | standsAlone -> parens (hsType ctx con_res_ty)
+      HsKindSig{} -> parens (hsType ctx con_res_ty)
+      HsForAllTy{} | standsAlone -> parens (hsType ctx con_res_ty)
+      HsQualTy{} | standsAlone -> parens (hsType ctx con_res_ty)
       _ -> hsType ctx con_res_ty
     standsAlone = case (unLoc con_outer_bndrs, con_g_args) of
-      (HsOuterImplicit {}, PrefixConGADT _ []) ->
+      (HsOuterImplicit{}, PrefixConGADT _ []) ->
         null con_inner_bndrs && null con_mb_cxt
       _ -> False
     arguments = case con_g_args of
@@ -251,9 +236,9 @@
     sigSpan = spanOf con_outer_bndrs <> foldMap spanOf con_mb_cxt <> argResSpan
     argResSpan =
       spanOf con_res_ty <> case con_g_args of
-        PrefixConGADT NoExtField xs -> spansOf (map cdf_type xs)
+        PrefixConGADT NoExtField xs -> spansOf (fmap cdf_type xs)
         RecConGADT _ x -> spanOf x
-conDecl ctx singleRecCon ConDeclH98 {..} = case con_args of
+conDecl ctx singleRecCon ConDeclH98{..} = case con_args of
   PrefixCon xs ->
     ownDoc
       <> existentials
@@ -263,7 +248,7 @@
         ( brokenIfDocumented ctx xs $
             name ctx con_name
               <> includeUnless (null xs) breakOrSpace
-              <> indent (align (sepBy breakOrSpace (map (align . documentedConDeclField ctx) xs)))
+              <> indent (align (sepBy breakOrSpace (fmap (align . documentedConDeclField ctx) xs)))
         )
   RecCon l ->
     ownDoc
@@ -272,13 +257,10 @@
         ctx
         declSpan
         ( name ctx con_name
-            <> breakOrSpace
-            <> nest (if singleRecCon then 0 else 1) (recordFieldsAt ctx l)
+            <> breakOrNothing
+            <> nest (if isTrue singleRecCon then 0 else 1) (recordFieldsAt ctx l)
         )
   InfixCon l r ->
-    -- The constructor's own Haddock can only go above the whole constructor
-    -- when neither argument has one of its own; otherwise it goes between
-    -- them, next to the name.
     includeWhen docOnTop ownDoc
       <> existentials
       <> layoutFrom
@@ -294,9 +276,6 @@
         )
     where
       docOnTop = isNothing (cdf_doc l) && isNothing (cdf_doc r)
-      -- The left argument's Haddock may use pipe style only when the
-      -- constructor itself is documented, since otherwise there is nothing
-      -- above it for the pipe to point at.
       leftArgument x
         | isJust con_doc =
             foldMap (haddock ctx Pipe Closed) (cdf_doc x)
@@ -328,9 +307,9 @@
 
     declSpan = spanOf con_name <> argSpans
     argSpans = case con_args of
-      PrefixCon xs -> spansOf (map cdf_type xs)
+      PrefixCon xs -> spansOf (fmap cdf_type xs)
       RecCon l -> spanOf l
-      InfixCon x y -> spansOf (map cdf_type [x, y])
+      InfixCon x y -> spansOf (fmap cdf_type [x, y])
 
 -- | A context standing to the left of a @=>@, with the arrow and the break
 -- after it.
@@ -339,11 +318,9 @@
   L _ [] -> mempty
   ctxt -> context ctx ctxt <> joinedBy "=>"
 
-----------------------------------------------------------------------------
--- Deriving clauses
-
+-- | One @deriving@ clause, with the strategy it was written with.
 derivingClause :: Ctx -> HsDerivingClause GhcPs -> Doc
-derivingClause ctx HsDerivingClause {..} =
+derivingClause ctx HsDerivingClause{..} =
   brokenIfDocumented ctx deriv_clause_tys $
     txt "deriving" <> space <> strategy
   where
@@ -352,7 +329,7 @@
         brokenIfDocumented ctx tys $ case tys of
           DctSingle NoExtField sigTy -> parens (hsSigType ctx sigTy)
           DctMulti NoExtField sigTys ->
-            parens (commaSep (map (align . hsSigType ctx) sigTys))
+            parens (commaSep (fmap (align . hsSigType ctx) sigTys))
 
     strategy = case deriv_clause_strategy of
       Nothing -> breakOrSpace <> indent what
@@ -372,9 +349,6 @@
       where
         named kw = txt kw <> breakOrSpace <> indent what
 
-----------------------------------------------------------------------------
--- Type synonyms
-
 -- | @type T a = …@.
 synDecl ::
   Ctx ->
@@ -383,13 +357,18 @@
   LHsQTyVars GhcPs ->
   LHsType GhcPs ->
   Doc
-synDecl ctx tyCon fixity HsQTvs {..} rhs =
+synDecl ctx tyCon fixity HsQTvs{..} rhs =
   txt "type"
     <> space
     <> layoutFrom
       ctx
       (spanOf tyCon <> spansOf hsq_explicit)
-      (defHead (fixity == Infix) True (name ctx tyCon) (map (at_ ctx (tyVarBndr ctx)) hsq_explicit))
+      ( defHead
+          (fromBool (fixity == Infix))
+          (Do #indentArgs)
+          (name ctx tyCon)
+          (fmap (at_ ctx (tyVarBndr ctx)) hsq_explicit)
+      )
     <> indent (space <> txt "=" <> separator <> hsType ctx rhs)
   where
     separator
diff --git a/src/Tilia/Render/Declaration.hs b/src/Tilia/Render/Declaration.hs
--- a/src/Tilia/Render/Declaration.hs
+++ b/src/Tilia/Render/Declaration.hs
@@ -3,18 +3,6 @@
 {-# LANGUAGE RecordWildCards #-}
 
 -- | Declarations: dispatching to the right printer, and grouping.
---
--- Two jobs live here. The first is a case over every kind of declaration,
--- which is mostly a matter of handing the work on; the few forms with no
--- module of their own—foreign imports, annotations, @default@ declarations,
--- top-level splices—are printed here rather than in four files of a dozen
--- lines each.
---
--- The second is grouping, which is the interesting one. A blank line between
--- declarations is meaningful to a reader, so a signature and the function it
--- describes should stay together while unrelated declarations are kept
--- apart. Nothing in the syntax tree says which declarations belong together,
--- so it is worked out from what they are and what they name.
 module Tilia.Render.Declaration
   ( decls,
     declsKeepingGroups,
@@ -43,22 +31,15 @@
 import Tilia.Render.Pragma
 import Tilia.Render.Signature
 import Tilia.Render.Type
+import Tilia.Source (SourceType (..))
 import Tilia.Span
 import Tilia.Span.Ghc
 
-----------------------------------------------------------------------------
--- Runs of declarations
-
 -- | A run of declarations, with blank lines wherever we think they belong.
 decls :: Ctx -> FamilyStyle -> [LHsDecl GhcPs] -> Doc
 decls = declRun Disregard
 
 -- | A run of declarations that keeps the author's grouping.
---
--- Where the author ran declarations together we run them together too, and
--- where they left a blank line we leave one. The exception is documentation:
--- a documented declaration always gets air around it, since a Haddock that
--- butts up against the declaration above reads as belonging to that one.
 declsKeepingGroups :: Ctx -> FamilyStyle -> [LHsDecl GhcPs] -> Doc
 declsKeepingGroups = declRun Respect
 
@@ -68,6 +49,7 @@
   | Respect
   deriving (Eq, Show)
 
+-- | Render a declaration run while applying the requested 'Grouping'.
 declRun :: Grouping -> Ctx -> FamilyStyle -> [LHsDecl GhcPs] -> Doc
 declRun grouping ctx style ds =
   items NoBrace $ case groups of
@@ -104,10 +86,6 @@
 groupDecls :: Ctx -> Bool -> [LHsDecl GhcPs] -> [NonEmpty (LHsDecl GhcPs)]
 groupDecls _ _ [] = []
 groupDecls ctx isSignatureFile (d : ds)
-  -- A Haddock documenting what follows belongs to the group that follows,
-  -- not to a group of its own—unless what follows is another Haddock, which
-  -- documents nothing either. Those two have to be kept apart: run
-  -- together they are not two doc comments but one.
   | isDocNext (unLoc d) = case groupDecls ctx isSignatureFile ds of
       [] -> [d :| []]
       (g : gs)
@@ -115,7 +93,7 @@
         | otherwise -> (d <| g) : gs
   | otherwise =
       let (together, rest) = span belongs (zip (d : ds) ds)
-       in (d :| map snd together) : groupDecls ctx isSignatureFile (map snd rest)
+       in (d :| fmap snd together) : groupDecls ctx isSignatureFile (fmap snd rest)
   where
     isDocNext = \case
       DocD _ (DocCommentNext _) -> True
@@ -133,25 +111,18 @@
 -- list reads better without gaps in it.
 isSignatureSeries :: Ctx -> LHsDecl GhcPs -> LHsDecl GhcPs -> Bool
 isSignatureSeries ctx x@(L _ a) y@(L _ b) = case (a, b) of
-  (SigD _ TypeSig {}, SigD _ TypeSig {}) ->
+  (SigD _ TypeSig{}, SigD _ TypeSig{}) ->
     not (commentBetween ctx (spanOf x) (spanOf y))
   _ -> False
 
 -- | Two standalone @deriving@ declarations the author ran together.
 isDerivingSeries :: Ctx -> LHsDecl GhcPs -> LHsDecl GhcPs -> Bool
 isDerivingSeries ctx x@(L _ a) y@(L _ b) = case (a, b) of
-  (DerivD {}, DerivD {}) ->
+  (DerivD{}, DerivD{}) ->
     not (separatedByBlank ctx (spanOf x) (spanOf y))
   _ -> False
 
-----------------------------------------------------------------------------
--- What a declaration is about
-
 -- | The kinds of declaration that grouping distinguishes.
---
--- Anything not named here groups with nothing, which is the right default:
--- an unrecognised declaration standing on its own is merely a missed
--- opportunity, whereas one wrongly attached to its neighbour is a mistake.
 data Kind
   = TypeSignature
   | DefaultSignature
@@ -173,10 +144,10 @@
 -- | What a declaration is, and what it names.
 declKind :: HsDecl GhcPs -> (Kind, [RdrName])
 declKind = \case
-  SigD _ (TypeSig _ ns _) -> (TypeSignature, map unLoc ns)
-  SigD _ (ClassOpSig _ True ns _) -> (DefaultSignature, map unLoc ns)
-  SigD _ (ClassOpSig _ False ns _) -> (TypeSignature, map unLoc ns)
-  SigD _ (PatSynSig _ ns _) -> (PatternSignature, map unLoc ns)
+  SigD _ (TypeSig _ ns _) -> (TypeSignature, fmap unLoc ns)
+  SigD _ (ClassOpSig _ True ns _) -> (DefaultSignature, fmap unLoc ns)
+  SigD _ (ClassOpSig _ False ns _) -> (TypeSignature, fmap unLoc ns)
+  SigD _ (PatSynSig _ ns _) -> (PatternSignature, fmap unLoc ns)
   SigD _ (InlineSig _ (L _ n) _) -> (PragmaDeclaration, [n])
   SigD _ (SCCFunSig _ (L _ n) _) -> (PragmaDeclaration, [n])
   SigD _ sig
@@ -189,7 +160,7 @@
   WarningD _ (Warnings _ ws) ->
     (PragmaDeclaration, [unLoc n | L _ (Warning _ ns _) <- ws, n <- ns])
   TyClD _ (DataDecl _ (L _ n) _ _ _) -> (DataDeclaration, [n])
-  TyClD _ (ClassDecl {tcdLName = L _ n}) -> (ClassDeclaration, [n])
+  TyClD _ (ClassDecl{tcdLName = L _ n}) -> (ClassDeclaration, [n])
   TyClD _ (SynDecl _ (L _ n) _ _ _) -> (TypeSynonym, [n])
   TyClD _ (FamDecl _ (FamilyDecl _ _ _ (L _ n) _ _ _ _)) -> (FamilyDeclaration, [n])
   KindSigD _ (StandaloneKindSig _ (L _ n) _) -> (KindSignature, [n])
@@ -222,8 +193,6 @@
 relatedDecls a b = case (kindA, kindB) of
   (DocumentsNext, _) -> True
   (_, DocumentsPrevious) -> True
-  -- Splices name nothing, so the only evidence they belong together is that
-  -- the author wrote them together.
   (TopLevelSplice, TopLevelSplice) -> not (blankBetween (spanOf a) (spanOf b))
   pair | pair `elem` relatedKinds -> shareAName namesA namesB
   _ -> False
@@ -233,10 +202,6 @@
 
 -- | The pairs of declaration kinds that group when they name something in
 -- common.
---
--- Reading this as a list rather than as nested cases is the point: what
--- belongs with what is a policy, and a policy is easier to check when it is
--- written out.
 relatedKinds :: [(Kind, Kind)]
 relatedKinds =
   [ (TypeSignature, FunctionBody),
@@ -258,12 +223,8 @@
   ]
 
 -- | Do the two declarations name anything in common?
---
--- Names are compared as text rather than as parsed names, since a pragma
--- may name a constructor where the declaration names the type, and the two
--- are different parsed names for the same spelling.
 shareAName :: [RdrName] -> [RdrName] -> Bool
-shareAName xs ys = overlaps (sort (map spelling xs)) (sort (map spelling ys))
+shareAName xs ys = overlaps (sort (fmap spelling xs)) (sort (fmap spelling ys))
   where
     spelling :: RdrName -> String
     spelling = unpackFS . occNameFS . rdrNameOcc
@@ -273,9 +234,6 @@
       | otherwise = True
     overlaps _ _ = False
 
-----------------------------------------------------------------------------
--- One declaration
-
 -- | Print one declaration.
 hsDecl :: Ctx -> FamilyStyle -> HsDecl GhcPs -> Doc
 hsDecl ctx style = \case
@@ -299,11 +257,12 @@
     DocCommentNamed n str -> haddock ctx (Chunk n) Open str
     DocGroup n str -> haddock ctx (Section n) Open str
 
+-- | A type, class or family declaration.
 tyClDecl :: Ctx -> FamilyStyle -> TyClDecl GhcPs -> Doc
 tyClDecl ctx style = \case
   FamDecl _ x -> famDecl ctx style x
-  SynDecl {..} -> synDecl ctx tcdLName tcdFixity tcdTyVars tcdRhs
-  DataDecl {..} ->
+  SynDecl{..} -> synDecl ctx tcdLName tcdFixity tcdTyVars tcdRhs
+  DataDecl{..} ->
     dataDecl
       ctx
       Associated
@@ -314,7 +273,7 @@
       tcdFixity
       mempty
       tcdDataDefn
-  ClassDecl {tcdCExt = (anns, _, _), ..} ->
+  ClassDecl{tcdCExt = (anns, _, _), ..} ->
     classDecl
       ctx
       anns
@@ -329,22 +288,20 @@
       tcdATDefs
       tcdDocs
 
+-- | An instance of a class, or of a type or data family.
 instDecl :: Ctx -> FamilyStyle -> InstDecl GhcPs -> Doc
 instDecl ctx style = \case
   ClsInstD _ x -> clsInstDecl ctx x
   TyFamInstD _ x -> tyFamInstDecl ctx style x
   DataFamInstD _ x -> dataFamInstDecl ctx style x
 
-----------------------------------------------------------------------------
--- The declarations with nowhere else to live
-
 -- | A @default@ declaration.
 defaultDecl :: Ctx -> DefaultDecl GhcPs -> Doc
 defaultDecl ctx (DefaultDecl _ className types) =
   txt "default"
     <> foldMap (\c -> breakOrSpace <> name ctx c) className
     <> breakOrSpace
-    <> indent (parens (commaSep (map (align . hsType ctx) types)))
+    <> indent (parens (commaSep (fmap (align . hsType ctx) types)))
 
 -- | An @ANN@ pragma.
 annDecl :: Ctx -> AnnDecl GhcPs -> Doc
@@ -360,8 +317,8 @@
 -- | A foreign import or export.
 foreignDecl :: Ctx -> ForeignDecl GhcPs -> Doc
 foreignDecl ctx = \case
-  fd@ForeignImport {fd_fi} -> foreignImport ctx fd_fi <> foreignSig ctx fd
-  fd@ForeignExport {fd_fe} -> foreignExport ctx fd_fe <> foreignSig ctx fd
+  fd@ForeignImport{fd_fi} -> foreignImport ctx fd_fi <> foreignSig ctx fd
+  fd@ForeignExport{fd_fe} -> foreignExport ctx fd_fe <> foreignSig ctx fd
 
 -- | The name and type that end a foreign declaration.
 foreignSig :: Ctx -> ForeignDecl GhcPs -> Doc
@@ -385,6 +342,7 @@
           SourceText lit -> breakOrSpace <> stringLiteral lit
       )
 
+-- | The head of a foreign export.
 foreignExport :: Ctx -> ForeignExport GhcPs -> Doc
 foreignExport ctx (CExport src (L loc (CExportStatic _ _ callConv))) =
   txt "foreign export"
diff --git a/src/Tilia/Render/Expression.hs b/src/Tilia/Render/Expression.hs
--- a/src/Tilia/Render/Expression.hs
+++ b/src/Tilia/Render/Expression.hs
@@ -1,40 +1,24 @@
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeFamilies #-}
 
 -- | Expressions, and the equations and blocks built out of them.
---
--- These are together because they are genuinely one thing: an equation is a
--- pattern and an expression, a @do@ block is a run of expressions, and a
--- @where@ clause is a run of equations. Splitting them would only move the
--- recursion into a knot without making either half easier to read.
---
--- The recurring question here is /placement/: whether a body begins on the
--- line that introduces it or on the next one, indented. Some expressions
--- have a hanging form—a @do@ block, a @case@, a lambda—and can absorb the
--- line break themselves, which is why @f = do@ reads better than @f =@ with
--- @do@ alone on the line below. Everything else has to be pushed down.
--- 'Placement' is the answer, and most of what looks like special-casing
--- below is working out which one applies.
 module Tilia.Render.Expression
-  ( -- * Expressions
-    hsExpr,
+  ( hsExpr,
     hsExprIn,
     hsCmd,
-
-    -- * Bindings
     valDecl,
-    MatchStyle (..),
-    GuardStyle (..),
-
-    -- * Splices
     untypedSplice,
   )
 where
 
+import Data.Choice (Choice, fromBool, isTrue, pattern Is, pattern Isn't)
 import Data.Function (on)
 import Data.Generics.Schemes (listify)
 import Data.List (sortBy, unsnoc)
@@ -75,28 +59,6 @@
 import Tilia.Span
 import Tilia.Span.Ghc
 
-----------------------------------------------------------------------------
--- Bracing
-
--- | Let a block brace itself when the surrounding layout is flat.
---
--- Whether braces are wanted is a question about the layout, and the layout
--- is not known while the document is being built. Both answers are prepared
--- and the engine picks; the one it does not pick is never forced.
-whenFlat :: Bracing -> (Bracing -> Doc) -> Doc
-whenFlat whenBroken render = variant (render MayBrace) (render whenBroken)
-
--- | A @case@ or lambda standing as a block item has to delimit itself when
--- the block is flat, unless it is the function of an application, where the
--- argument that follows already does so.
-bracedForSite :: Site -> (Bracing -> Doc) -> Doc
-bracedForSite site render
-  | siteInBlock site && not (siteApplicand site) = whenFlat (siteBracing site) render
-  | otherwise = render (siteBracing site)
-
-----------------------------------------------------------------------------
--- Expressions
-
 -- | An expression.
 hsExpr :: Ctx -> LHsExpr GhcPs -> Doc
 hsExpr ctx = hsExprIn ctx plainSite
@@ -105,18 +67,7 @@
 hsExprIn :: Ctx -> Site -> LHsExpr GhcPs -> Doc
 hsExprIn ctx site l = at ctx l (exprBody ctx site (spanOf l))
 
--- | The body of an equation, as the enclosing construct will hand it on.
---
--- Neither the site nor the placement is known when the body is passed in:
--- the site depends on the layout the group of equations settles on, and the
--- placement is the body's own business. So what travels is a way of making
--- a body from a site, and 'Tilia.Doc.Body.Body' answers the rest.
-type BodyOf body b = Site -> LocatedA body -> b
-
--- | A body standing on its own, with the given bracing.
-bodyIn :: BodyOf body b -> Bracing -> LocatedA body -> b
-bodyIn mkBody bracing = mkBody (withBracing bracing plainSite)
-
+-- | Every shape an expression can take.
 exprBody :: Ctx -> Site -> Maybe Span -> HsExpr GhcPs -> Doc
 exprBody ctx site here = \case
   HsVar _ n -> name ctx n
@@ -153,7 +104,7 @@
   HsMultiIf _ guards ->
     txt "if"
       <> breakOrSpace
-      <> underSite site (sepBy breakOrSpace (map alternative (NE.toList guards)))
+      <> underSite site (sepBy breakOrSpace (fmap alternative (NE.toList guards)))
     where
       alternative g =
         atSpan
@@ -175,32 +126,30 @@
   ExplicitList _ xs ->
     bracketsWith
       (closingFor site)
-      (insideBrackets here (commaSep (map (align . hsExpr ctx) xs)))
-  RecordCon {..} ->
+      (insideBrackets here (commaSep (fmap (align . hsExpr ctx) xs)))
+  RecordCon{..} ->
     name ctx rcon_con
-      <> breakOrSpace
-      <> indent (braces (insideBrackets here (commaSep (map align (fields <> wildcard)))))
+      <> breakOrNothing
+      <> indent (braces (insideBrackets here (commaSep (fmap align (fields <> wildcard)))))
     where
-      HsRecFields {..} = rcon_flds
-      fields = map (at_ ctx (fieldBind ctx (at_ ctx (name ctx . foLabel)))) rec_flds
-      -- The @..@ has a location of its own, and needs it: a comment written
-      -- against it has nothing else to attach to.
+      HsRecFields{..} = rcon_flds
+      fields = fmap (at_ ctx (fieldBind ctx (at_ ctx (name ctx . foLabel)))) rec_flds
       wildcard = case rec_dotdot of
         Just l -> [at ctx l (const (txt ".."))]
         Nothing -> []
-  RecordUpd {..} ->
-    hsExpr ctx rupd_expr <> breakOrSpace <> indent (braces (insideBrackets here updates))
+  RecordUpd{..} ->
+    hsExpr ctx rupd_expr <> breakOrNothing <> indent (braces (insideBrackets here updates))
     where
       updates = case rupd_flds of
-        RegularRecUpdFields {..} ->
-          commaSep (map (align . at_ ctx (fieldBind ctx (at_ ctx (fieldOcc ctx)))) recUpdFields)
-        OverloadedRecUpdFields {..} ->
-          commaSep (map (align . at_ ctx (fieldBind ctx (at_ ctx labelChain))) olRecUpdFields)
+        RegularRecUpdFields{..} ->
+          commaSep (fmap (align . at_ ctx (fieldBind ctx (at_ ctx (fieldOcc ctx)))) recUpdFields)
+        OverloadedRecUpdFields{..} ->
+          commaSep (fmap (align . at_ ctx (fieldBind ctx (at_ ctx labelChain))) olRecUpdFields)
       labelChain (FieldLabelStrings flss) = dotFields ctx (unLoc <$> flss)
-  HsGetField {..} ->
+  HsGetField{..} ->
     hsExpr ctx gf_expr <> txt "." <> at ctx gf_field (dotField ctx)
-  HsProjection {..} -> parens (txt "." <> dotFields ctx proj_flds)
-  ExprWithTySig _ x HsWC {hswc_body} ->
+  HsProjection{..} -> parens (txt "." <> dotFields ctx proj_flds)
+  ExprWithTySig _ x HsWC{hswc_body} ->
     align $
       hsExpr ctx x
         <> joinedBy "::"
@@ -209,13 +158,11 @@
   HsTypedBracket (bracketAnn, _) e ->
     txt opener <> breakOrNothing <> hsExpr ctx e <> breakOrNothing <> txt "||]"
     where
-      -- @[e|| … ||]@ and @[|| … ||]@ are the same bracket written two ways,
-      -- and which one the author reached for is theirs to keep.
       opener = case bracketAnn of
-        BracketNoE {} -> "[||"
-        BracketHasE {} -> "[e||"
+        BracketNoE{} -> "[||"
+        BracketHasE{} -> "[e||"
   HsUntypedBracket _ q -> quotation ctx q
-  HsTypedSplice _ (HsTypedSpliceExpr _ e) -> spliceTH ctx True e DollarSplice
+  HsTypedSplice _ (HsTypedSpliceExpr _ e) -> spliceTH ctx (Is #typed) e DollarSplice
   HsUntypedSplice _ splice -> untypedSplice ctx DollarSplice splice
   HsProc _ p e ->
     txt "proc"
@@ -230,15 +177,13 @@
         <> txt " #-}"
         <> breakOrSpace
         <> nest (if siteInBlock site then 1 else 0) (hsExpr ctx x)
-  HsEmbTy _ HsWC {hswc_body} -> txt "type" <> space <> hsType ctx hswc_body
+  HsEmbTy _ HsWC{hswc_body} -> txt "type" <> space <> hsType ctx hswc_body
   HsHole holeKind -> case holeKind of
     HoleVar n -> name ctx n
     HoleError -> error "Tilia: a nameless hole cannot come from a successful parse"
-  -- The three that follow mirror their counterparts in types: a quoted
-  -- signature is an expression until it is elaborated.
   HsForAll _ tele e -> forallTelescope ctx tele <> breakOrSpace <> hsExpr ctx e
   HsQual _ qs e ->
-    at ctx qs (contextOf loneVariableExpr (hsExpr ctx) . map unbracketed)
+    at ctx qs (contextOf loneVariableExpr (hsExpr ctx) . fmap unbracketed)
       <> joinedBy "=>"
       <> hsExpr ctx e
   HsFunArr _ multAnn x y ->
@@ -247,31 +192,33 @@
       <> multiplicity (hsExpr ctx) multAnn
       <> joinedBy "->"
       <> case unLoc y of
-        HsFunArr {} -> exprBody ctx plainSite (spanOf y) (unLoc y)
+        HsFunArr{} -> exprBody ctx plainSite (spanOf y) (unLoc y)
         _ -> hsExpr ctx y
 
+-- | The body of an equation, as the enclosing construct will hand it on.
+type BodyOf body b = Site -> LocatedA body -> b
+
+-- | A body standing on its own, with the given bracing.
+bodyIn :: BodyOf body b -> Bracing -> LocatedA body -> b
+bodyIn mkBody bracing = mkBody (withBracing bracing plainSite)
+
 -- | @-@ in front of a literal needs a space when @NegativeLiterals@ is on,
 -- since @- 1@ and @-1@ then parse differently.
 negationGap :: Ctx -> LHsExpr GhcPs -> Doc
-negationGap ctx e = includeWhen (extensionOn ctx NegativeLiterals && isLiteral) space
+negationGap ctx e =
+  includeWhen (extensionOn ctx NegativeLiterals && isLiteral) space
   where
     isLiteral = case unLoc e of
-      HsLit {} -> True
-      HsOverLit {} -> True
+      HsLit{} -> True
+      HsOverLit{} -> True
       _ -> False
 
 -- | A function applied to arguments.
---
--- The last argument is held apart from the rest because it is the only one
--- that may hang: @f x $ do …@ puts the block after the arguments rather than
--- indenting everything under @f@. It may only hang when the function and the
--- earlier arguments fit on one line, since otherwise there is nothing left
--- of that line for it to hang from.
 application :: Ctx -> Site -> LHsExpr GhcPs -> LHsExpr GhcPs -> Doc
 application ctx site f x =
   case placement of
     Normal ->
-      whenFlat (siteBracing site) headAndInit
+      mayBraceWhenFlat (siteBracing site) headAndInit
         <> indent (includeUnless (null initArgs) breakOrSpace <> hsExpr ctx lastArg)
     Hanging ->
       layoutFrom ctx initSpan (headAndInit MayBrace)
@@ -285,12 +232,16 @@
       | maybe False isSingleLine initSpan = exprHangs (unLoc lastArg)
       | otherwise = Normal
     headAndInit bracing =
-      hsExprIn ctx site {siteApplicand = True, siteBracing = bracing} func
+      hsExprIn ctx site{siteApplicand = True, siteBracing = bracing} func
         <> breakOrSpace
         <> nest
           (if placement == Hanging then 0 else 1)
-          (sepBy breakOrSpace (map (hsExprIn ctx (withBracing bracing plainSite)) initArgs))
+          ( sepBy
+              breakOrSpace
+              (fmap (hsExprIn ctx (withBracing bracing plainSite)) initArgs)
+          )
 
+-- | The head of an application, and its arguments in the order written.
 gatherArgs ::
   LHsExpr GhcPs ->
   NonEmpty (LHsExpr GhcPs) ->
@@ -300,13 +251,10 @@
   _ -> (f, known)
 
 -- | A tuple, or a tuple section.
---
--- A section has holes in it, and a hole cannot carry a line break, so a
--- section is laid out flat however it was written.
 tuple :: Ctx -> Maybe Span -> ClosingIndent -> Boxity -> [HsTupArg GhcPs] -> Doc
 tuple ctx here closing boxity args
-  | any isMissing args = flat (brackets' (sepBy comma (map arg args)))
-  | otherwise = brackets' (insideBrackets here (commaSep (map arg args)))
+  | any isMissing args = flat (brackets' (sepBy comma (fmap arg args)))
+  | otherwise = brackets' (insideBrackets here (commaSep (fmap arg args)))
   where
     brackets' = case boxity of
       Boxed -> parensWith closing
@@ -324,12 +272,12 @@
 arithSeq ctx closing = \case
   From from -> wrap (hsExpr ctx from <> breakOrSpace <> txt "..")
   FromThen from next ->
-    wrap (commaSep (map (hsExpr ctx) [from, next]) <> breakOrSpace <> txt "..")
+    wrap (commaSep (fmap (hsExpr ctx) [from, next]) <> breakOrSpace <> txt "..")
   FromTo from to ->
     wrap (hsExpr ctx from <> breakOrSpace <> txt ".." <> space <> hsExpr ctx to)
   FromThenTo from next to ->
     wrap $
-      commaSep (map (hsExpr ctx) [from, next])
+      commaSep (fmap (hsExpr ctx) [from, next])
         <> breakOrSpace
         <> txt ".."
         <> space
@@ -344,7 +292,7 @@
   (GenLocated l a -> Doc) ->
   HsFieldBind (GenLocated l a) (LHsExpr GhcPs) ->
   Doc
-fieldBind ctx label HsFieldBind {..} =
+fieldBind ctx label HsFieldBind{..} =
   label hfbLHS
     <> includeUnless hfbPun (space <> txt "=" <> attach placement (hsExpr ctx hfbRHS))
   where
@@ -352,47 +300,40 @@
       | sameLine (spanOf hfbLHS) (spanOf hfbRHS) = exprHangs (unLoc hfbRHS)
       | otherwise = Normal
 
+-- | One field name written after a dot.
 dotField :: Ctx -> DotFieldOcc GhcPs -> Doc
 dotField ctx = name ctx . fmap (mkVarUnqual . field_label) . dfoLabel
 
+-- | A run of field names, joined by the dots between them.
 dotFields :: Ctx -> NonEmpty (DotFieldOcc GhcPs) -> Doc
-dotFields ctx = sepBy (txt ".") . map (dotField ctx) . NE.toList
-
-----------------------------------------------------------------------------
--- Operator chains
+dotFields ctx = sepBy (txt ".") . fmap (dotField ctx) . NE.toList
 
 -- | A chain of operators applied to expressions.
---
--- Two layouts are possible once such a chain has to break. The leading one
--- puts each operator at the start of a line with its operand:
---
--- > foo
--- >   <> bar
--- >   <> baz
---
--- The trailing one leaves the operator at the end of the line above:
---
--- > foo $ do
--- >   …
---
--- Trailing is only right when every operator is a separator
--- ('isSeparator') and the chain ends in something with a hanging form, or
--- when there is a single operator. Otherwise it builds a staircase of
--- ever-deeper indentation and gains nothing by it.
-exprChain :: Ctx -> Site -> LHsExpr GhcPs -> LHsExpr GhcPs -> LHsExpr GhcPs -> Doc
+exprChain ::
+  Ctx ->
+  Site ->
+  LHsExpr GhcPs ->
+  LHsExpr GhcPs ->
+  LHsExpr GhcPs ->
+  Doc
 exprChain ctx site x op y =
   renderExprChain ctx site (uncurry (associate (fixityOf ctx)) chain)
   where
     chain = flattenAround splitOpApp x op y
 
-splitOpApp :: LHsExpr GhcPs -> Maybe (LHsExpr GhcPs, LHsExpr GhcPs, LHsExpr GhcPs)
+-- | Take an operator application apart, if that is what this is.
+splitOpApp ::
+  LHsExpr GhcPs ->
+  Maybe (LHsExpr GhcPs, LHsExpr GhcPs, LHsExpr GhcPs)
 splitOpApp e = case unLoc e of
   OpApp _ l o r -> Just (l, o, r)
   _ -> Nothing
 
+-- | The fixity of an operator used in an expression.
 fixityOf :: Ctx -> LHsExpr GhcPs -> Maybe Fixity
 fixityOf ctx o = operatorName o >>= operatorFixity ctx InTerms
 
+-- | Print a chain of operators once precedence has regrouped it.
 renderExprChain :: Ctx -> Site -> OpChain (LHsExpr GhcPs) (LHsExpr GhcPs) -> Doc
 renderExprChain ctx site = \case
   Operand e -> hsExprIn ctx site e
@@ -400,14 +341,15 @@
     layoutFrom ctx (chainSpan spanOf chain) $
       if trailing
         then laidOut MayBrace
-        else whenFlat (if placement == Hanging then MayBrace else NoBrace) laidOut
+        else
+          mayBraceWhenFlat
+            (if placement == Hanging then MayBrace else NoBrace)
+            laidOut
     where
       placement = chainPlacement exprHangs firstOne (NE.last operands)
-
       laidOut bracing =
         renderExprChain ctx (withBracing bracing site) firstOne
           <> pieces bracing firstOne operators rest
-
       pieces bracing previous (o : os) (operand : more) =
         let isLast = null more
             operandSite =
@@ -415,44 +357,35 @@
             rendered = renderExprChain ctx operandSite operand
             rest' = pieces bracing operand os more
          in if trailing
-              then space <> hsExpr ctx o <> attach (tailPlacement isLast previous operand) (rendered <> rest')
+              then
+                space
+                  <> hsExpr ctx o
+                  <> attach
+                    (tailPlacement isLast previous operand)
+                    (rendered <> rest')
               else attach placement (hsExpr ctx o <> space <> rendered) <> rest'
       pieces _ _ _ _ = mempty
-
-      -- In a staircase of trailing operators the operand at the very end is
-      -- the one that may hang, since it is the block the whole chain exists
-      -- to introduce.
       tailPlacement isLast previous operand
         | isLast,
           not (maybe True isSingleLine (chainSpan spanOf operand)) =
             chainPlacement exprHangs previous operand
         | otherwise = Normal
-
-      -- A comment written on its own line in front of an operator would be
-      -- carried to the end of the line above along with it, and a @$@ at the
-      -- start of a line inside a @do@ block reads as a new statement rather
-      -- than as a continuation. The leading layout indents instead, so it
-      -- keeps the meaning.
       commentedOperators =
         or (zipWith commentedBefore (NE.toList operands) operators)
       commentedBefore operand o =
         commentBetween ctx (chainSpan spanOf operand) (spanOf o)
-
       trailing =
         (length operators == 1 || endsHanging)
           && not commentedOperators
           && and (zipWith couldTrail (NE.toList operands) operators)
-
       endsHanging = exprHangs (unLoc (lastOperand chain)) == Hanging
-
       couldTrail previous o =
         isSeparator (fixityOf ctx o)
           && maybe False isSingleLine (chainSpan spanOf previous)
           && placement == Normal
-          -- An operator cannot trail a @do@ block: the block would swallow
-          -- it and read it as part of its last statement.
           && not (isDoBlock (lastOperand previous))
 
+-- | Is this expression a @do@ or @mdo@ block?
 isDoBlock :: LHsExpr GhcPs -> Bool
 isDoBlock e = case unLoc e of
   HsDo _ (DoExpr _) _ -> True
@@ -460,10 +393,6 @@
   _ -> False
 
 -- | Whether the operands of a chain hang.
---
--- They may when the first and the last operand begin on the same line—so
--- that there is a line for the last one to hang from—and the last operand is
--- itself something with a hanging form.
 chainPlacement ::
   (HasLoc l) =>
   (a -> Placement) ->
@@ -485,112 +414,17 @@
   HsVar _ (L _ n) -> isVarOcc (rdrNameOcc n)
   _ -> False
 
+-- | What is inside, however many brackets were written around it.
 unbracketed :: LHsExpr GhcPs -> LHsExpr GhcPs
 unbracketed e = case unLoc e of
   HsPar _ inner -> unbracketed inner
   _ -> e
 
-----------------------------------------------------------------------------
--- Commands
-
--- | An arrow-notation command.
-hsCmd :: Ctx -> Site -> LHsCmd GhcPs -> Doc
-hsCmd ctx site l = at ctx l (cmdBody ctx site)
-
-cmdBody :: Ctx -> Site -> HsCmd GhcPs -> Doc
-cmdBody ctx site = \case
-  -- Which of the two operands is written first is what the arrow's
-  -- direction says: @a -< b@ feeds the input on the right to the command on
-  -- the left, and @b >- a@ says the same thing the other way round.
-  HsCmdArrApp _ body input arrow rightToLeft ->
-    let writtenFirst = if rightToLeft then body else input
-        writtenSecond = if rightToLeft then input else body
-     in hsExprIn ctx site {siteApplicand = False} writtenFirst
-          <> breakOrSpace
-          <> indent
-            ( txt (arrowText arrow rightToLeft)
-                <> attach (exprHangs (unLoc input)) (hsExpr ctx writtenSecond)
-            )
-  HsCmdArrForm _ form Prefix cmds ->
-    bananaWith (closingFor site) $
-      hsExpr ctx form
-        <> includeUnless
-          (null cmds)
-          (breakOrSpace <> indent (sepBy breakOrSpace (map (printBody . CmdTopBody ctx plainSite) cmds)))
-  HsCmdArrForm _ form Infix [l, r] -> cmdChain ctx site l form r
-  HsCmdArrForm _ _ Infix _ ->
-    error "Tilia: an infix command form always has exactly two operands"
-  HsCmdApp _ cmd e ->
-    hsCmd ctx site {siteApplicand = True} cmd
-      <> breakOrSpace
-      <> indent (hsExpr ctx e)
-  HsCmdLam _ variant' mg -> lambda ctx site variant' (CmdBody ctx) mg
-  HsCmdPar _ c -> parens (hsCmd ctx plainSite c)
-  HsCmdCase _ e mg -> caseOf ctx site (CmdBody ctx) e mg
-  HsCmdIf anns _ c t e ->
-    ifThenElse ctx (bodyIn (CmdBody ctx) (siteBracing site)) anns c t e
-  HsCmdLet _ binds c -> letIn ctx (bodyIn (CmdBody ctx) (siteBracing site)) binds c
-  HsCmdDo anns es ->
-    keywordAt ctx (doKeywordSpan anns) "do"
-      <> statements ctx site (CmdBody ctx) es
-
-arrowText :: HsArrAppType -> Bool -> Text
-arrowText arrow rightToLeft = case (arrow, rightToLeft) of
-  (HsFirstOrderApp, True) -> "-<"
-  (HsHigherOrderApp, True) -> "-<<"
-  (HsFirstOrderApp, False) -> ">-"
-  (HsHigherOrderApp, False) -> ">>-"
-
--- | A command at the top of an arrow form.
-cmdTop :: Ctx -> Site -> HsCmdTop GhcPs -> Doc
-cmdTop ctx site (HsCmdTop _ cmd) = hsCmd ctx site cmd
-
--- | A chain of operators applied to commands.
---
--- Commands have no trailing layout: an arrow form is already delimited, so
--- there is nothing for a trailing operator to introduce.
-cmdChain ::
-  Ctx ->
-  Site ->
-  LHsCmdTop GhcPs ->
-  LHsExpr GhcPs ->
-  LHsCmdTop GhcPs ->
-  Doc
-cmdChain ctx site l op r =
-  render (uncurry (associate (fixityOf ctx)) (flattenAround splitCmd l op r))
-  where
-    splitCmd c = case unLoc c of
-      HsCmdTop _ (L _ (HsCmdArrForm _ o Infix [a, b])) -> Just (a, o, b)
-      _ -> Nothing
-
-    render = \case
-      Operand c -> at ctx c (cmdTop ctx site)
-      chain@(Chain operands@(firstOne :| rest) operators) ->
-        layoutFrom ctx (chainSpan spanOf chain) $
-          whenFlat (if placement == Hanging then MayBrace else NoBrace) laidOut
-        where
-          placement = chainPlacement cmdTopHangs firstOne (NE.last operands)
-          laidOut bracing =
-            renderIn bracing firstOne <> pieces bracing operators rest
-          -- Every operand but the last has to delimit itself when the chain
-          -- is flat, or a block inside it would swallow the operator.
-          pieces bracing (o : os) (operand : more) =
-            attach
-              placement
-              (hsExpr ctx o <> space <> renderIn (if null more then siteBracing site else bracing) operand)
-              <> pieces bracing os more
-          pieces _ _ _ = mempty
-          renderIn bracing = \case
-            Operand c -> at ctx c (cmdTop ctx (withBracing bracing site))
-            inner -> render inner
-
-----------------------------------------------------------------------------
--- Statements
-
 -- | A statement of a comprehension or a guard.
 hsStmt :: Ctx -> ExprLStmt GhcPs -> Doc
 hsStmt ctx = at_ ctx (stmtBody ctx plainSite (ExprBody ctx))
 
+-- | One statement of a block, a comprehension or a guard.
 stmtBody ::
   ( Body b,
     Anno [LStmt GhcPs (XRec GhcPs body)] ~ SrcSpanAnnLW,
@@ -607,10 +441,6 @@
   BodyStmt _ body _ _ -> printBody (mkBody site body)
   BindStmt _ p f ->
     hsPat ctx p
-      -- Indented in case it does not stay on the line the pattern is on. A
-      -- comment that owns its line ends it, and an arrow starting a line at
-      -- the statement's own column would begin a new statement instead of
-      -- continuing this one.
       <> nest 1 (space <> txt "<-")
       <> layoutFrom ctx (spanOf p <> spanOf f) (attach placement (printBody bound))
     where
@@ -618,23 +448,14 @@
       placement
         | sameLine (spanOf p) (spanOf f) = bodyPlacement bound
         | otherwise = Normal
-  -- A @let@ opens a layout block of its own, so when something follows it
-  -- in a flat block the semicolon meant to end the statement is taken for
-  -- one separating two bindings, and the rest of the @do@ disappears into
-  -- the @let@. The site already knows whether anything follows: it carries
-  -- 'MayBrace' for every statement but the last.
   LetStmt _ binds -> txt "let" <> space <> align (bound binds)
     where
-      -- @let@ with nothing after it is not a statement whatever the layout,
-      -- so an empty group is written out rather than left to the bracing.
       bound = \case
         EmptyLocalBinds _ -> txt "{}"
         bs -> localBinds ctx (siteBracing site) bs
-  ParStmt {} ->
-    -- Parallel blocks are unpacked before any statement is printed; see
-    -- 'comprehensionSections'.
+  ParStmt{} ->
     error "Tilia: ParStmt should have been unpacked"
-  TransStmt {..} -> case (trS_form, trS_by) of
+  TransStmt{..} -> case (trS_form, trS_by) of
     (ThenForm, Nothing) ->
       txt "then" <> breakOrSpace <> indent (hsExpr ctx trS_using)
     (ThenForm, Just e) ->
@@ -655,7 +476,7 @@
         <> txt "using"
         <> breakOrSpace
         <> indent (hsExpr ctx trS_using)
-  RecStmt {..} ->
+  RecStmt{..} ->
     txt "rec"
       <> space
       <> align
@@ -685,29 +506,20 @@
   where
     block xs =
       items (siteBracing site) $
-        keepBlanks (separatedByBlank ctx) [(spanOf stmt, item place stmt) | (place, stmt) <- places xs]
-
-    -- Every statement but the last has to delimit itself when the block is
-    -- flat, or a block nested inside it would run on into the next one.
+        keepBlanks
+          (separatedByBlank ctx)
+          [(spanOf stmt, item place stmt) | (place, stmt) <- places xs]
     item place stmt = case place of
       Last -> rendered (siteBracing site)
       Only -> rendered (siteBracing site)
-      _ -> whenFlat (siteBracing site) rendered
+      _ -> mayBraceWhenFlat (siteBracing site) rendered
       where
         rendered bracing =
           at_ ctx (stmtBody ctx (blockSite bracing) mkBody) stmt
-
     blockSite bracing =
-      plainSite {siteInBlock = True, siteBracing = bracing}
-
-----------------------------------------------------------------------------
--- List comprehensions
+      plainSite{siteInBlock = True, siteBracing = bracing}
 
 -- | A list comprehension.
---
--- Standing as a statement of a @do@ block, the closing bracket has to line
--- up under the opening one: the block's own layout would otherwise end the
--- statement before the bracket was closed.
 comprehension :: Ctx -> Site -> XRec GhcPs [ExprLStmt GhcPs] -> Doc
 comprehension ctx site es = align (variant onOneLine acrossLines)
   where
@@ -720,40 +532,26 @@
       Just (stmts, yield) ->
         align (hsStmt ctx yield)
           <> breakOrSpace
-          <> sepBy breakOrSpace (map section (comprehensionSections stmts))
+          <> sepBy breakOrSpace (fmap section (comprehensionSections stmts))
     section stmts =
       located'
         (spansOf stmts)
-        (txt "|" <> space <> align (commaSep (map (align . hsStmt ctx) stmts)))
+        (txt "|" <> space <> align (commaSep (fmap (align . hsStmt ctx) stmts)))
     located' = maybe id located
 
 -- | Split the statements of a comprehension into its parallel sections.
---
--- With @ParallelListComp@ a comprehension may have several runs of
--- statements separated by bars, and the parser wraps those in a single
--- statement holding blocks. Everywhere else there is exactly one run. Both
--- come back from here as a list of runs, so nothing downstream has to know
--- which it was given.
 comprehensionSections :: [ExprLStmt GhcPs] -> [[ExprLStmt GhcPs]]
-comprehensionSections = map unnest . branches
+comprehensionSections = fmap unnest . branches
   where
-    -- One run of statements, unless the comprehension was written with @|@
-    -- between several, in which case each run is a section of its own.
     branches = \case
       [L _ (ParStmt _ blocks _ _)] ->
         [run | ParStmtBlock _ run _ _ <- NE.toList blocks]
       run -> [run]
-
-    -- A @then@ carries the statements it transforms. They are printed, and
-    -- then it is, in that order.
     unnest = concatMap $ \case
-      L _ ParStmt {} -> error "Tilia: parallel blocks do not nest"
-      stmt@(L _ TransStmt {trS_stmts}) -> unnest trS_stmts <> [stmt]
+      L _ ParStmt{} -> error "Tilia: parallel blocks do not nest"
+      stmt@(L _ TransStmt{trS_stmts}) -> unnest trS_stmts <> [stmt]
       stmt -> [stmt]
 
-----------------------------------------------------------------------------
--- Case, lambda, if and let
-
 -- | A @case@ expression or command.
 caseOf ::
   ( Body b,
@@ -807,7 +605,7 @@
   LocatedA body ->
   LocatedA body ->
   Doc
-ifThenElse ctx bodyOf AnnsIf {aiThen, aiElse} condition thenBody elseBody =
+ifThenElse ctx bodyOf AnnsIf{aiThen, aiElse} condition thenBody elseBody =
   txt "if"
     <> space
     <> hsExpr ctx condition
@@ -832,9 +630,6 @@
           | otherwise = bodyPlacement (bodyOf body)
 
 -- | A @let@ expression or command.
---
--- The @in@ is indented by one column rather than by one step, which keeps it
--- clear of the bindings above without making it look like one of them.
 letIn ::
   (Body b) =>
   Ctx ->
@@ -844,11 +639,6 @@
   Doc
 letIn ctx bodyOf binds body =
   align $
-    -- Neither keyword claims its span, unlike the @do@ of a block. Both have
-    -- something printed after them on their own line—the first binding, the
-    -- body—so a comment either of them claimed would be held back over that
-    -- and come out against it, which is further from where it was written
-    -- than where it lands by falling through.
     txt "let"
       <> space
       <> align (localBinds ctx NoBrace binds)
@@ -857,9 +647,158 @@
       <> space
       <> align (printBody (bodyOf body))
 
-----------------------------------------------------------------------------
--- Bindings
+-- | The bindings of a @let@ or a @where@.
+localBinds :: Ctx -> Bracing -> HsLocalBinds GhcPs -> Doc
+localBinds ctx bracing = \case
+  HsValBinds ann (ValBinds _ binds sigs) ->
+    anchored ann . align . items bracing $
+      keepBlanks
+        (separatedByBlank ctx)
+        [(spanOf item, rendered place item) | (place, item) <- places sorted]
+    where
+      sorted =
+        sortBy
+          (leftmost_smallest `on` getLocA)
+          (fmap (fmap Left) binds <> fmap (fmap Right) sigs)
+      rendered place item = case place of
+        Last -> render NoBrace
+        Only -> render NoBrace
+        _ -> mayBraceWhenFlat NoBrace render
+        where
+          render b =
+            at_ ctx (either (valDecl ctx b) (knotSig (ctxKnot ctx) ctx)) item
+  HsValBinds _ _ -> error "Tilia: renamer-only local bindings"
+  HsIPBinds ann (IPBinds _ xs) ->
+    anchored ann (items bracing (fmap (at_ ctx implicitBind) xs))
+  EmptyLocalBinds _ -> mempty
+  where
+    implicitBind (IPBind _ (L _ n) e) =
+      outputable n
+        <> joinedBy "="
+        <> indent (hsExprIn ctx (withBracing MayBrace plainSite) e)
+    anchored ann d = case ann of
+      EpAnn{anns = AnnList{al_anchor}}
+        | not (isZeroWidthSpan (locA al_anchor)) ->
+            atSpan ctx (spanOfSrcSpan (locA al_anchor)) d
+      _ -> d
 
+-- | Where a @do@ or @mdo@ was written.
+doKeywordSpan :: AnnList EpaLocation -> Maybe Span
+doKeywordSpan = spanOfSrcSpan . locA . al_rest
+
+-- | Where the @where@ keyword of a group of local bindings was.
+whereKeywordSpan :: HsLocalBinds GhcPs -> Maybe Span
+whereKeywordSpan =
+  spanOfSrcSpan . \case
+    HsValBinds EpAnn{anns = AnnList{al_rest}} _ -> locA al_rest
+    HsIPBinds EpAnn{anns = AnnList{al_rest}} _ -> locA al_rest
+    EmptyLocalBinds _ -> noSrcSpan
+
+-- | Does this @let@ or @where@ bind nothing at all?
+isEmptyLocalBinds :: HsLocalBinds GhcPs -> Bool
+isEmptyLocalBinds = \case
+  EmptyLocalBinds _ -> True
+  HsValBinds _ (ValBinds _ binds sigs) -> null binds && null sigs
+  _ -> False
+
+-- | An arrow-notation command.
+hsCmd :: Ctx -> Site -> LHsCmd GhcPs -> Doc
+hsCmd ctx site l = at ctx l (cmdBody ctx site)
+
+-- | Every shape an arrow-notation command can take.
+cmdBody :: Ctx -> Site -> HsCmd GhcPs -> Doc
+cmdBody ctx site = \case
+  HsCmdArrApp _ body input arrow rightToLeft ->
+    let writtenFirst = if rightToLeft then body else input
+        writtenSecond = if rightToLeft then input else body
+     in hsExprIn ctx site{siteApplicand = False} writtenFirst
+          <> breakOrSpace
+          <> indent
+            ( txt (arrowText arrow rightToLeft)
+                <> attach (exprHangs (unLoc input)) (hsExpr ctx writtenSecond)
+            )
+  HsCmdArrForm _ form Prefix cmds ->
+    bananaWith (closingFor site) $
+      hsExpr ctx form
+        <> includeUnless
+          (null cmds)
+          ( breakOrSpace
+              <> indent
+                ( sepBy
+                    breakOrSpace
+                    (fmap (printBody . CmdTopBody ctx plainSite) cmds)
+                )
+          )
+  HsCmdArrForm _ form Infix [l, r] -> cmdChain ctx site l form r
+  HsCmdArrForm _ _ Infix _ ->
+    error "Tilia: an infix command form always has exactly two operands"
+  HsCmdApp _ cmd e ->
+    hsCmd ctx site{siteApplicand = True} cmd
+      <> breakOrSpace
+      <> indent (hsExpr ctx e)
+  HsCmdLam _ variant' mg -> lambda ctx site variant' (CmdBody ctx) mg
+  HsCmdPar _ c -> parens (hsCmd ctx plainSite c)
+  HsCmdCase _ e mg -> caseOf ctx site (CmdBody ctx) e mg
+  HsCmdIf anns _ c t e ->
+    ifThenElse ctx (bodyIn (CmdBody ctx) (siteBracing site)) anns c t e
+  HsCmdLet _ binds c -> letIn ctx (bodyIn (CmdBody ctx) (siteBracing site)) binds c
+  HsCmdDo anns es ->
+    keywordAt ctx (doKeywordSpan anns) "do"
+      <> statements ctx site (CmdBody ctx) es
+
+-- | How the arrow of a command application is spelled.
+arrowText :: HsArrAppType -> Bool -> Text
+arrowText arrow rightToLeft = case (arrow, rightToLeft) of
+  (HsFirstOrderApp, True) -> "-<"
+  (HsHigherOrderApp, True) -> "-<<"
+  (HsFirstOrderApp, False) -> ">-"
+  (HsHigherOrderApp, False) -> ">>-"
+
+-- | A command at the top of an arrow form.
+cmdTop :: Ctx -> Site -> HsCmdTop GhcPs -> Doc
+cmdTop ctx site (HsCmdTop _ cmd) = hsCmd ctx site cmd
+
+-- | A chain of operators applied to commands.
+cmdChain ::
+  Ctx ->
+  Site ->
+  LHsCmdTop GhcPs ->
+  LHsExpr GhcPs ->
+  LHsCmdTop GhcPs ->
+  Doc
+cmdChain ctx site l op r =
+  render (uncurry (associate (fixityOf ctx)) (flattenAround splitCmd l op r))
+  where
+    splitCmd c = case unLoc c of
+      HsCmdTop _ (L _ (HsCmdArrForm _ o Infix [a, b])) -> Just (a, o, b)
+      _ -> Nothing
+    render = \case
+      Operand c -> at ctx c (cmdTop ctx site)
+      chain@(Chain operands@(firstOne :| rest) operators) ->
+        layoutFrom ctx (chainSpan spanOf chain) $
+          mayBraceWhenFlat (if placement == Hanging then MayBrace else NoBrace) laidOut
+        where
+          placement = chainPlacement cmdTopHangs firstOne (NE.last operands)
+          laidOut bracing =
+            renderIn bracing firstOne <> pieces bracing operators rest
+          pieces bracing (o : os) (operand : more) =
+            attach
+              placement
+              ( hsExpr ctx o
+                  <> space
+                  <> renderIn
+                    ( if null more
+                        then siteBracing site
+                        else bracing
+                    )
+                    operand
+              )
+              <> pieces bracing os more
+          pieces _ _ _ = mempty
+          renderIn bracing = \case
+            Operand c -> at ctx c (cmdTop ctx (withBracing bracing site))
+            inner -> render inner
+
 -- | A value binding.
 valDecl :: Ctx -> Bracing -> HsBind GhcPs -> Doc
 valDecl ctx bracing = \case
@@ -868,7 +807,7 @@
   PatBind _ p multAnn grhss ->
     match ctx bracing (ExprBody ctx) PatternBindStyle False multAnn NoSrcStrict [p] grhss
   PatSynBind _ psb -> patSynBind ctx psb
-  VarBind {} -> error "Tilia: VarBind is introduced by the type checker"
+  VarBind{} -> error "Tilia: VarBind is introduced by the type checker"
 
 -- | Which shape a group of equations takes.
 data MatchStyle
@@ -885,8 +824,10 @@
 
 -- | What separates a guard from what it guards.
 data GuardStyle
-  = EqualsSign
-  | RightArrow
+  = -- | @| p = …@
+    EqualsSign
+  | -- | @| p -> …@
+    RightArrow
   deriving (Eq, Show)
 
 -- | A group of equations.
@@ -901,8 +842,9 @@
   MatchStyle ->
   MatchGroup GhcPs (LocatedA body) ->
   Doc
-matchGroup ctx bracing mkBody style MG {..} =
-  items blockBracing (map rendered (places (unLoc mg_alts)))
+matchGroup ctx bracing mkBody style MG{..}
+  | isCaseStyle style, null (unLoc mg_alts) = txt "{}"
+  | otherwise = items blockBracing (fmap rendered (places (unLoc mg_alts)))
   where
     blockBracing = case style of
       CaseStyle -> ifEmpty
@@ -912,11 +854,10 @@
     rendered (place, m) = case place of
       Last -> written bracing
       Only -> written bracing
-      _ -> whenFlat bracing written
+      _ -> mayBraceWhenFlat bracing written
       where
         written b = at_ ctx (renderMatch b) m
-
-    renderMatch b m@Match {..} =
+    renderMatch b m@Match{..} =
       match
         ctx
         b
@@ -928,20 +869,17 @@
         (unLoc m_pats)
         m_grhss
 
--- | The name to print an equation with.
---
--- The name on the binding as a whole is not usable: the equations may spell
--- it differently, one writing @x \`f\` y@ and the next @f x y@, and each
--- carries its own decorations. So the name comes from the equation.
+-- | Put this equation's own name into the style it is printed with. A
+-- style that carries no name is left as it is.
 adjustStyle :: Match GhcPs body -> MatchStyle -> MatchStyle
 adjustStyle m = \case
-  FunctionStyle _ | FunRhs {mc_fun = f} <- m_ctxt m -> FunctionStyle f
+  FunctionStyle _ | FunRhs{mc_fun = f} <- m_ctxt m -> FunctionStyle f
   style -> style
 
 -- | Was a @!@ written in front of the name this equation defines?
 bangBeforeName :: Match id body -> SrcStrictness
 bangBeforeName = \case
-  Match {m_ctxt = FunRhs {mc_strictness}} -> mc_strictness
+  Match{m_ctxt = FunRhs{mc_strictness}} -> mc_strictness
   _ -> NoSrcStrict
 
 -- | One equation: a head, a body, and possibly a @where@.
@@ -958,7 +896,7 @@
   [LPat GhcPs] ->
   GRHSs GhcPs (LocatedA body) ->
   Doc
-match ctx bracing mkBody style isInfix multAnn strict pats GRHSs {..} =
+match ctx bracing mkBody style isInfix multAnn strict pats GRHSs{..} =
   multiplicity (hsType ctx) multAnn
     <> multAnnGap
     <> strictness strict
@@ -971,13 +909,9 @@
       )
   where
     multAnnGap = case multAnn of
-      HsUnannotated {} -> mempty
+      HsUnannotated{} -> mempty
       _ -> space
 
-    -- Patterns may be spread over several lines, in which case they have to
-    -- be indented past the name, and then the body has to be indented too or
-    -- it would line up with them. When they fit on one line neither
-    -- indentation is wanted: the body would sit two steps in for no reason.
     indentBody = case pats of
       [] -> False
       _ ->
@@ -994,7 +928,7 @@
         FunctionStyle n -> name ctx n
         _ -> mempty
       (headPat : tailPats) -> layoutFrom ctx headSpan $ case style of
-        FunctionStyle n -> defHead isInfix indentBody (name ctx n) rendered
+        FunctionStyle n -> defHead (fromBool isInfix) (fromBool indentBody) (name ctx n) rendered
         PatternBindStyle -> sepBy breakOrSpace rendered
         CaseStyle -> sepBy breakOrSpace rendered
         LambdaStyle -> txt "\\" <> lambdaGap headPat <> align (sepBy breakOrSpace rendered)
@@ -1002,18 +936,16 @@
           hsPat ctx headPat
             <> includeUnless
               (null tailPats)
-              (breakOrSpace <> indent (sepBy breakOrSpace (map (hsPat ctx) tailPats)))
+              (breakOrSpace <> indent (sepBy breakOrSpace (fmap (hsPat ctx) tailPats)))
       where
-        rendered = map (hsPat ctx) pats
+        rendered = fmap (hsPat ctx) pats
 
-    -- A @~@, @!@ or splice immediately after the backslash would be taken
-    -- for an operator section.
     lambdaGap p = includeWhen (needsGap (unLoc p)) space
     needsGap = \case
-      LazyPat {} -> True
-      BangPat {} -> True
-      SplicePat {} -> True
-      InvisPat {} -> True
+      LazyPat{} -> True
+      BangPat{} -> True
+      SplicePat{} -> True
+      InvisPat{} -> True
       _ -> False
 
     endOfPats = case pats of
@@ -1032,16 +964,11 @@
         | any (longGuard . unLoc) grhssGRHSs || not (sameLine (Just spn) rhsSpan) ->
             Normal
       _ -> blockPlacement (bodyIn mkBody bracing) grhssGRHSs
-    -- A guard that does not fit on one line, or a run of them, has to be
-    -- followed by a break: the body would otherwise trail off the end of a
-    -- guard rather than following the whole condition.
     longGuard grhs = case guardsOf grhs of
       [] -> False
       [g] -> not (maybe True isSingleLine (spanOf g))
       _ -> True
 
-    -- With more than one guarded alternative there is nothing to put the @=@
-    -- after: each alternative carries its own.
     separator
       | length grhssGRHSs > 1 = mempty
       | otherwise = case style of
@@ -1052,25 +979,19 @@
           s | isCaseStyle s && hasGuards -> mempty
           _ -> space <> txt "->"
 
-    body = sepBy breakOrSpace (map alternative (NE.toList grhssGRHSs))
-    -- The region an alternative owns runs from its guards to its body. The
-    -- annotation would have it start at the @->@, which puts a comment
-    -- written after the pattern inside the alternative rather than at the
-    -- end of the pattern's line, where the author wrote it.
+    body = sepBy breakOrSpace (fmap alternative (NE.toList grhssGRHSs))
+
     alternative g =
       fenceWithin ctx (spanOf g) $
         atSpan
           ctx
           (grhsSpan (unLoc g))
           (guardedRhs ctx placement bracing mkBody groupStyle (unLoc g))
+
     groupStyle
       | isCaseStyle style && hasGuards = RightArrow
       | otherwise = EqualsSign
 
-    -- A @where@ the author wrote and put nothing under is kept. Only the
-    -- absence of the keyword altogether prints nothing: the two are
-    -- different trees, and an empty @where@ is usually somewhere its author
-    -- was about to write something.
     whereClause = case grhssLocalBinds of
       EmptyLocalBinds _ -> mempty
       binds ->
@@ -1080,19 +1001,22 @@
             (isEmptyLocalBinds binds)
             (breakOrSpace <> indent (localBinds ctx bracing binds))
 
+-- | Is this an alternative of a @case@ or a @\\case@?
 isCaseStyle :: MatchStyle -> Bool
 isCaseStyle = \case
   CaseStyle -> True
   LambdaCaseStyle -> True
   _ -> False
 
+-- | Does this pattern hold an or-pattern anywhere inside it?
 containsOrPat :: LPat GhcPs -> Bool
 containsOrPat = any isOrPat . listify (const True :: Pat GhcPs -> Bool)
   where
     isOrPat = \case
-      OrPat {} -> True
+      OrPat{} -> True
       _ -> False
 
+-- | Where an alternative was written, guards and all.
 grhsSpan :: GRHS GhcPs (LocatedA body) -> Maybe Span
 grhsSpan (GRHS _ guards body) = spanOf body <> spansOf guards
 
@@ -1101,9 +1025,6 @@
 guardsOf (GRHS _ guards _) = guards
 
 -- | The placement of a body that is the whole of an equation.
---
--- Only an unguarded equation with a single alternative can hang: with
--- guards, what follows the @=@ is a guard rather than the body.
 blockPlacement ::
   (Body b) =>
   (LocatedA body -> b) ->
@@ -1117,9 +1038,9 @@
 guardedRhs ::
   (Body b) =>
   Ctx ->
-  -- | How the equation as a whole is placed
+  -- | How the equation as a whole is placed.
   Placement ->
-  -- | Bracing the body inherits
+  -- | Bracing the body inherits.
   Bracing ->
   BodyOf body b ->
   GuardStyle ->
@@ -1130,12 +1051,9 @@
   _ ->
     txt "|"
       <> space
-      <> align (commaSep (map (align . hsStmt ctx) guards))
+      <> align (commaSep (fmap (align . hsStmt ctx) guards))
       <> space
       <> indent (txt separator)
-      -- A guard laid out normally has its body indented one step further, so
-      -- that the body is clear of the guard. With everything on one line
-      -- that step would be indentation for its own sake.
       <> nest
         (if parentPlacement == Normal then 1 else 0)
         (attach placement (printBody bound))
@@ -1154,13 +1072,13 @@
 
 -- | A pattern synonym binding.
 patSynBind :: Ctx -> PatSynBind GhcPs GhcPs -> Doc
-patSynBind ctx PSB {..} =
+patSynBind ctx PSB{..} =
   txt "pattern" <> case psb_args of
     PrefixCon args ->
       space
         <> name ctx psb_id
         <> indent
-          ( layoutAcross ctx args (argsAfterName (map (name ctx) args) (null args))
+          ( layoutAcross ctx args (argsAfterName (fmap (name ctx) args) (null args))
               <> definition (spansOf args)
           )
     RecCon args ->
@@ -1170,13 +1088,13 @@
           ( layoutAcross
               ctx
               (vars args)
-              ( includeUnless (null args) breakOrSpace
-                  <> braces (commaSep (map (name ctx) (vars args)))
+              ( includeUnless (null args) breakOrNothing
+                  <> braces (commaSep (fmap (name ctx) (vars args)))
               )
               <> definition (spansOf (vars args))
           )
       where
-        vars = map recordPatSynPatVar
+        vars = fmap recordPatSynPatVar
     InfixCon l r ->
       layoutFrom
         ctx
@@ -1202,86 +1120,21 @@
           layoutFrom ctx (spanOf psb_id <> spanOf psb_def <> argSpans) $
             txt arrow <> breakOrSpace <> hsPat ctx psb_def
 
-----------------------------------------------------------------------------
--- Local bindings
-
--- | The bindings of a @let@ or a @where@.
---
--- The bindings and the signatures arrive in separate lists, because that is
--- how the syntax tree keeps them, and they have to be put back into the
--- order the author wrote them in before anything is printed.
-localBinds :: Ctx -> Bracing -> HsLocalBinds GhcPs -> Doc
-localBinds ctx bracing = \case
-  HsValBinds ann (ValBinds _ binds sigs) ->
-    anchored ann . align . items bracing $
-      keepBlanks (separatedByBlank ctx) [(spanOf item, rendered place item) | (place, item) <- places sorted]
-    where
-      sorted =
-        sortBy
-          (leftmost_smallest `on` getLocA)
-          (map (fmap Left) binds <> map (fmap Right) sigs)
-      rendered place item = case place of
-        Last -> render NoBrace
-        Only -> render NoBrace
-        _ -> whenFlat NoBrace render
-        where
-          render b =
-            at_ ctx (either (valDecl ctx b) (knotSig (ctxKnot ctx) ctx)) item
-  HsValBinds _ _ -> error "Tilia: renamer-only local bindings"
-  HsIPBinds ann (IPBinds _ xs) ->
-    anchored ann (items bracing (map (at_ ctx implicitBind) xs))
-  EmptyLocalBinds _ -> mempty
-  where
-    implicitBind (IPBind _ (L _ n) e) =
-      outputable n
-        <> joinedBy "="
-        <> indent (hsExprIn ctx (withBracing MayBrace plainSite) e)
-
-    -- The bindings have no wrapper of their own, so the annotation's anchor
-    -- is the only record of where they were, and the layout depends on it.
-    anchored ann d = case ann of
-      EpAnn {anns = AnnList {al_anchor}}
-        | not (isZeroWidthSpan (locA al_anchor)) ->
-            atSpan ctx (spanOfSrcSpan (locA al_anchor)) d
-      _ -> d
-
--- | Where a @do@ or @mdo@ was written.
-doKeywordSpan :: AnnList EpaLocation -> Maybe Span
-doKeywordSpan = spanOfSrcSpan . locA . al_rest
-
--- | Where the @where@ keyword of a group of local bindings was.
-whereKeywordSpan :: HsLocalBinds GhcPs -> Maybe Span
-whereKeywordSpan =
-  spanOfSrcSpan . \case
-    HsValBinds EpAnn {anns = AnnList {al_rest}} _ -> locA al_rest
-    HsIPBinds EpAnn {anns = AnnList {al_rest}} _ -> locA al_rest
-    EmptyLocalBinds _ -> noSrcSpan
-
-isEmptyLocalBinds :: HsLocalBinds GhcPs -> Bool
-isEmptyLocalBinds = \case
-  EmptyLocalBinds _ -> True
-  HsValBinds _ (ValBinds _ binds sigs) -> null binds && null sigs
-  _ -> False
-
-----------------------------------------------------------------------------
--- Splices
-
 -- | An untyped splice, either @$x@ or a quasi-quotation.
 untypedSplice :: Ctx -> SpliceDecoration -> HsUntypedSplice GhcPs -> Doc
 untypedSplice ctx deco = \case
-  HsUntypedSpliceExpr _ e -> spliceTH ctx False e deco
+  HsUntypedSpliceExpr _ e -> spliceTH ctx (Isn't #typed) e deco
   HsQuasiQuote _ quoter str ->
     txt "["
       <> name ctx quoter
       <> txt "|"
-      -- A quoter is handed the text exactly as written; laying it out would
-      -- change what the quoter receives.
       <> at ctx str (verbatim . T.pack . unpackFS)
       <> txt "|]"
 
-spliceTH :: Ctx -> Bool -> LHsExpr GhcPs -> SpliceDecoration -> Doc
-spliceTH ctx isTyped e = \case
-  DollarSplice -> txt (if isTyped then "$$" else "$") <> spliced
+-- | A Template Haskell splice, typed or not.
+spliceTH :: Ctx -> Choice "typed" -> LHsExpr GhcPs -> SpliceDecoration -> Doc
+spliceTH ctx typed e = \case
+  DollarSplice -> txt (if isTrue typed then "$$" else "$") <> spliced
   BareSplice -> spliced
   where
     spliced = at ctx e (align . exprBody ctx plainSite (spanOf e))
@@ -1292,8 +1145,8 @@
   ExpBr (bracketAnn, _) e -> quoted (flavour bracketAnn) (hsExpr ctx e)
     where
       flavour = \case
-        BracketNoE {} -> ""
-        BracketHasE {} -> "e"
+        BracketNoE{} -> ""
+        BracketHasE{} -> "e"
   PatBr _ p -> quoted "p" (hsPat ctx p)
   DecBrL _ decls ->
     quoted "d" (starGuard decls (knotDecls (ctxKnot ctx) ctx Free decls))
@@ -1307,12 +1160,6 @@
         <> txt "|"
         <> breakOrNothing
         <> indent (body <> breakOrNothing <> txt "|]")
-
-    -- A quotation whose last token is punctuation runs into the @|@ that
-    -- closes it and the two lex as one operator: with @StarIsType@ it may
-    -- end in a @*@, giving @*|@, and an abstract closed type family ends in
-    -- @..@, giving @..|@. The test is deliberately coarse: either one
-    -- anywhere inside costs a space at each end and nothing else.
     starGuard x body
       | risky = space <> body <> space
       | otherwise = body
@@ -1321,8 +1168,22 @@
           any isStar (listify (const True :: HsType GhcPs -> Bool) x)
             || any isAbstract (listify (const True :: FamilyInfo GhcPs -> Bool) x)
     isStar = \case
-      HsStarTy {} -> True
+      HsStarTy{} -> True
       _ -> False
     isAbstract = \case
       ClosedTypeFamily Nothing -> True
       _ -> False
+
+-- | Let a block brace itself when the surrounding layout is flat.
+mayBraceWhenFlat :: Bracing -> (Bracing -> Doc) -> Doc
+mayBraceWhenFlat whenBroken render =
+  variant (render MayBrace) (render whenBroken)
+
+-- | A @case@ or lambda standing as a block item has to delimit itself when
+-- the block is flat, unless it is the function of an application, where the
+-- argument that follows already does so.
+bracedForSite :: Site -> (Bracing -> Doc) -> Doc
+bracedForSite site render
+  | siteInBlock site && not (siteApplicand site) =
+      mayBraceWhenFlat (siteBracing site) render
+  | otherwise = render (siteBracing site)
diff --git a/src/Tilia/Render/Haddock.hs b/src/Tilia/Render/Haddock.hs
--- a/src/Tilia/Render/Haddock.hs
+++ b/src/Tilia/Render/Haddock.hs
@@ -1,20 +1,7 @@
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
 
--- | Documentation comments.
---
--- A Haddock is a comment that the syntax tree also knows about, which makes
--- it the one comment the printer places itself rather than leaving to
--- attachment. It has to: @-- ^ x@ documents what precedes it and @-- | x@
--- what follows, so moving the construct moves the Haddock, and where it ends
--- up cannot be worked out from where it started.
---
--- What the author wrote is reused whenever it can be, because rebuilding a
--- Haddock from the doc string the tree carries loses things the tree never
--- had: a @{- | … -}@ comes back as @-- |@ lines, and an empty @-- |@ comes
--- back as nothing at all. It cannot always be reused, since a trailing
--- @-- ^ x@ that is being moved in front of what it documents has to become
--- @-- | x@ or it will point at the wrong thing.
+-- | Haddocks.
 module Tilia.Render.Haddock
   ( DocStyle (..),
     Ending (..),
@@ -87,8 +74,11 @@
 docBody ctx style doc@(L l str) =
   case reusableText ctx style doc of
     Just written ->
-      ( maybe id located (spanOfSrcSpan l) $
-          align (sepBy (verbatimBreak AtIndent) (map txt (NE.toList written))),
+      ( maybe id located (spanOfSrcSpan l)
+          $ align
+          $ sepBy
+            (verbatimBreak AtIndent TrimWhitespace)
+            (fmap txt (NE.toList written)),
         selfClosing written
       )
     Nothing
@@ -97,13 +87,6 @@
       | otherwise -> (rebuilt, False)
   where
     emptyBlock = txt (blockOpener style) <> space <> txt "-}"
-
-    -- No provenance on a rebuilt Haddock, unlike one whose text is reused.
-    -- Rebuilding is what happens when the author wrote it in another style,
-    -- and the commonest of those is a @-- ^@ being printed as @-- |@, which
-    -- moves it from after what it documents to before. Offering where it
-    -- used to be as somewhere a comment may attach would put that comment
-    -- ahead of comments that were written above it.
     rebuilt =
       sepBy hardBreak (zipWith line' (True : repeat False) written')
         <> mconcat (replicate trailingBlanks (hardBreak <> txt "--"))
@@ -111,27 +94,17 @@
       Nothing -> 0
       Just ls -> length (takeWhile isBlankLine (reverse (NE.toList ls)))
     isBlankLine t = T.null (T.strip (fromMaybe t (T.stripPrefix "--" (T.strip t))))
-
     line' isFirst t =
       (if isFirst then txt (opener style) else txt "--")
         <> space
         <> txt t
-
-    -- One the author wrote as a block comment over several lines is
-    -- rebuilt as one. Cut into @--@ lines it would stop being a single
-    -- comment: the lexer reads the first line as documentation and every
-    -- line after it as an ordinary comment, so a Haddock of two lines would
-    -- come back as a Haddock of one and a comment saying half a sentence.
-    -- A block of one line has no such lines to lose and is rebuilt as
-    -- @-- |@ like any other.
     rebuiltBlock =
       align $
         txt (blockOpener style)
           <> space
-          <> sepBy (verbatimBreak AtIndent) (map txt written')
+          <> sepBy (verbatimBreak AtIndent TrimWhitespace) (fmap txt written')
           <> space
           <> txt "-}"
-
     asBlock = writtenAsBlock ctx doc
     written' = docLines asBlock str
     blockForm = asBlock && length written' > 1
@@ -179,14 +152,7 @@
 openedInStyle style firstLine = case afterOpener firstLine of
   Nothing -> False
   Just inside -> case style of
-    -- A chunk's name is the compiler's to delimit, and it may have stopped
-    -- somewhere the line carries on: @-- $Id: …@ names the chunk @Id@ and
-    -- then goes on with a colon that is no part of it. So the name is
-    -- matched as a prefix and where it ends is left to the compiler.
     Chunk _ -> triggerFor style `T.isPrefixOf` inside
-    -- The rest are a run of characters that ends where the run ends, so the
-    -- run is read off the line and compared whole. Matching a prefix would
-    -- take @** x@ for a @* x@ that happens to be followed by a star.
     _ -> triggerOn inside == Just (triggerFor style)
 
 -- | The trigger a style is written with.
@@ -223,9 +189,6 @@
 selfClosing :: NonEmpty Text -> Bool
 selfClosing written = isBlockForm written && null (NE.tail written)
 
-----------------------------------------------------------------------------
--- Documentation and layout
-
 -- | Lay the document out on several lines if printing this fragment will
 -- emit a Haddock that takes whole lines.
 brokenIfDocumented :: (Data a) => Ctx -> a -> Doc -> Doc
@@ -247,36 +210,26 @@
       Nothing -> not (null (docLines (writtenAsBlock ctx doc) (unLoc doc)))
 
 -- | The spans of every Haddock in a fragment.
---
--- Attachment must not place these: the printer has already put them where
--- they belong, and a comment placed twice is worse than one placed badly.
 haddockSpans :: (Data a) => a -> [Span]
 haddockSpans x = mapMaybe (spanOfSrcSpan . getLoc) (docsIn x) <> namedSections x
 
+-- | Every Haddock in a fragment.
 docsIn :: (Data a) => a -> [LHsDoc GhcPs]
 docsIn = listify (const True :: LHsDoc GhcPs -> Bool)
 
 -- | The spans of the @-- $name@ anchors in an export list.
---
--- These are the one kind of Haddock the syntax tree records without a doc
--- string: an anchor carries only its name, so there is no 'LHsDoc' to find
--- it by, and the item that holds it is the only record of where it was.
--- Without this the anchor is printed once from the tree and once more by
--- attachment, and each pass adds another copy.
 namedSections :: (Data a) => a -> [Span]
 namedSections =
   mapMaybe anchorSpan . listify (const True :: LIE GhcPs -> Bool)
   where
     anchorSpan l = case unLoc l of
-      IEDocNamed {} -> spanOfSrcSpan (getHasLoc (getLoc l))
+      IEDocNamed{} -> spanOfSrcSpan (getHasLoc (getLoc l))
       _ -> Nothing
 
+-- | Every doc string in a fragment, even one no 'LHsDoc' holds.
 docStringsIn :: (Data a) => a -> [HsDocString]
 docStringsIn = listify (const True :: HsDocString -> Bool)
 
-----------------------------------------------------------------------------
--- Doc strings
-
 -- | The lines of a doc string, normalised the way Haddock reads them.
 docLines ::
   -- | Was it written as a block comment?
@@ -285,41 +238,29 @@
   [Text]
 docLines blockForm str
   | null body = []
-  | otherwise = map guardDollar (dedent (map unpad body))
+  | otherwise = fmap guardDollar (dedent (fmap unpad body))
   where
     body =
       dropWhileEnd T.null
-        . map (T.stripEnd . T.pack)
+        . fmap (T.stripEnd . T.pack)
         . lines
         . renderHsDocString
         $ hsDocString str
-
     unpad t
       | padded, Just (' ', rest) <- T.uncons t = rest
       | otherwise = t
     padded = case dropWhile T.null body of
       (t : _) -> " " `T.isPrefixOf` t
       [] -> False
-
-    -- Written as @{- | … -}@, the lines after the first are indented to sit
-    -- under the opening bracket, and that indentation is measured from a
-    -- column the text is about to leave: printed back as @--@ lines it
-    -- would show up as a run of spaces the author never typed. Only the
-    -- part they all share goes, so anything indented further—an example, a
-    -- code block—keeps the shape it was given.
     dedent ls
       | not blockForm = ls
       | otherwise = case ls of
           [] -> []
-          (first' : rest) -> first' : map (T.drop (shared rest)) rest
-
-    shared ls = case map indentation (filter (not . T.null) ls) of
+          (first' : rest) -> first' : fmap (T.drop (shared rest)) rest
+    shared ls = case fmap indentation (filter (not . T.null) ls) of
       [] -> 0
       ns -> minimum ns
     indentation = T.length . T.takeWhile (== ' ')
-
-    -- A line may not begin with a dollar: that is the spelling of a named
-    -- chunk, and one appearing by accident is a parse error.
     guardDollar t
       | "$" `T.isPrefixOf` t = T.cons '\\' t
       | otherwise = t
diff --git a/src/Tilia/Render/Header.hs b/src/Tilia/Render/Header.hs
--- a/src/Tilia/Render/Header.hs
+++ b/src/Tilia/Render/Header.hs
@@ -3,20 +3,10 @@
 {-# LANGUAGE RecordWildCards #-}
 
 -- | The module header, and the module as a whole.
---
--- The header is the one part of a module that is reordered rather than
--- merely re-laid-out: language pragmas are sorted, and a @{-# LANGUAGE A, B
--- #-}@ is split into one pragma per extension. That is safe because the
--- compiler reads the header as a set, with one exception—some extensions
--- turn others on, so the order within a few groups is load-bearing, and
--- 'pragmaOrder' is where that is written down.
 module Tilia.Render.Header
-  ( -- * Pragmas
-    HeaderPragma (..),
+  ( HeaderPragma (..),
     takeHeaderPragmas,
     takeStackHeader,
-
-    -- * The module
     hsModule,
   )
 where
@@ -40,13 +30,10 @@
 import Tilia.Render.Layout
 import Tilia.Render.Name
 import Tilia.Render.Pragma (warningTxt)
-import Tilia.Source (Source, directiveAt, sourceLines)
+import Tilia.Source (Source, directivePresentOnLine, sourceLines)
 import Tilia.Span
 import Tilia.Span.Ghc
 
-----------------------------------------------------------------------------
--- Pragmas
-
 -- | A pragma of the file header.
 data HeaderPragma = HeaderPragma
   { -- | The region it was written in.
@@ -81,28 +68,23 @@
 -- that matter: a pack before what it enables, an enabling before a
 -- disabling, and the stragglers that have to come last at the end.
 data ExtensionClass
-  = -- | @GHC2021@, @Haskell2010@ and the like
+  = -- | @GHC2021@, @Haskell2010@ and the like.
     Pack
-  | -- | Anything else
+  | -- | Anything else.
     Enabling
-  | -- | An extension written with a @No@ prefix
+  | -- | An extension written with a @No@ prefix.
     Disabling
-  | -- | Extensions that only work when nothing follows them
+  | -- | Extensions that only work when nothing follows them.
     Last'
   deriving (Eq, Ord, Show)
 
 -- | Pick the header pragmas out of a comment stream.
---
--- What comes back is the pragmas, in the order they were written, and the
--- comments that were not pragmas. A @{-# … #-}@ below the header is not a
--- pragma at all—the compiler never reads it—so hoisting it would give it a
--- meaning it did not have, and it is left in the stream as the comment it
--- is.
 takeHeaderPragmas ::
-  -- | The module as written
+  -- | The module as written.
   Source ->
-  -- | Where the header ends
+  -- | Where the header ends.
   Maybe Span ->
+  -- | The comment stream.
   [Comment] ->
   ([HeaderPragma], [Comment])
 takeHeaderPragmas src headerEnd comments = (pragmas, plain)
@@ -115,12 +97,12 @@
       ]
     rightAbovePragma c =
       Set.member (below (spanEndLine (commentSpan c) + 1)) pragmaStarts
-    below n = if directiveAt n (sourceLines src) then below (n + 1) else n
+    below n = if directivePresentOnLine n (sourceLines src) then below (n + 1) else n
     pragmaStarts =
       Set.fromList [spanStartLine (commentSpan c) | (c, Just _) <- recognised]
-    airless c = c {commentGapAbove = False, commentGapBelow = False}
+    airless c = c{commentGapAbove = False, commentGapBelow = False}
     directivesAbove n =
-      length [k | k <- [1 .. n - 1], directiveAt k (sourceLines src)]
+      length [k | k <- [1 .. n - 1], directivePresentOnLine k (sourceLines src)]
     entry c p =
       HeaderPragma
         { hpSpan = commentSpan c,
@@ -150,33 +132,31 @@
 
 -- | Take the Stack script header off the front of a comment stream.
 takeStackHeader ::
-  -- | Where the header ends
+  -- | Where the header ends.
   Maybe Span ->
+  -- | The comment stream.
   [Comment] ->
   (Doc, [Comment])
 takeStackHeader headerEnd = \case
   (c : cs) | isStackHeader c -> (reproduce c <> blankLine, cs)
   cs -> (mempty, cs)
   where
-    -- Being the first comment is not enough: @stack@ reads the header off
-    -- the top of the file, so a @-- stack …@ written further down is an
-    -- ordinary comment that happens to start with a word.
     isStackHeader c =
       inHeader headerEnd (commentSpan c)
         && T.isPrefixOf "stack" (T.stripStart (T.drop 2 (NE.head (commentBody c))))
     reproduce c =
-      sepBy (verbatimBreak AtMargin) (map txt (NE.toList (commentBody c)))
+      sepBy (verbatimBreak AtMargin TrimWhitespace) (fmap txt (NE.toList (commentBody c)))
 
 -- | The pragmas of a header, one per line, sorted.
 pragmaBlock :: [HeaderPragma] -> Doc
 pragmaBlock = foldMap render . dedupe . sortOn key . concatMap split
   where
     key p = (hpRun p, hpOrder p, hpBody p)
-    dedupe = map NE.head . NE.groupBy ((==) `on` key)
+    dedupe = fmap NE.head . NE.groupBy ((==) `on` key)
     split p
       | hpName p == "LANGUAGE" =
-          [ p {hpBody = body, hpOrder = LanguageOrder (classifyExtension body)}
-          | body <- map T.strip (T.splitOn "," (hpBody p))
+          [ p{hpBody = body, hpOrder = LanguageOrder (classifyExtension body)}
+          | body <- fmap T.strip (T.splitOn "," (hpBody p))
           ]
       | otherwise = [p]
 
@@ -205,12 +185,9 @@
   where
     spelledTheSame edition = t == T.pack (show (edition :: Language))
 
-----------------------------------------------------------------------------
--- The module
-
 -- | A whole module.
 hsModule :: Ctx -> [HeaderPragma] -> HsModule GhcPs -> Doc
-hsModule ctx pragmas HsModule {hsmodExt = XModulePs {..}, ..} =
+hsModule ctx pragmas HsModule{hsmodExt = XModulePs{..}, ..} =
   headerLayout $
     pragmaBlock pragmas
       <> hardBreak
@@ -222,11 +199,9 @@
   where
     exports = maybe [] unLoc hsmodExports
     headerSpan = foldMap spanOf hsmodDeprecMessage <> foldMap spanOf hsmodExports
-
     headerLayout
       | any (isDocEntry . unLoc) exports = broken
       | otherwise = layoutFrom ctx headerSpan
-
     moduleLine = case hsmodName of
       Nothing -> mempty
       Just modName ->
@@ -237,15 +212,10 @@
           <> foldMap exports' hsmodExports
           <> txt "where"
           <> hardBreak
-
     documentation = foldMap (haddock ctx Pipe Closed) hsmodHaddockModHeader
-
     exports' l =
       at ctx l (\xs -> indent (exportList ctx (spanOf l) xs)) <> breakOrSpace
 
-----------------------------------------------------------------------------
--- Export lists
-
 -- | The parenthesised list after a module name.
 exportList :: Ctx -> Maybe Span -> [LIE GhcPs] -> Doc
 exportList ctx enclosing xs =
@@ -257,15 +227,11 @@
       | otherwise = layoutFrom ctx enclosing
 
 -- | The items of an import or export list.
---
--- The comma travels with the item rather than sitting between two of them,
--- because a list that has been broken ends with one: adding an entry then
--- touches one line rather than two.
 importExportItems :: Ctx -> [LIE GhcPs] -> Doc
 importExportItems ctx xs = variant (laidOut False) (laidOut True)
   where
     laidOut broken' =
-      sepBy breakOrSpace (zipWith (item broken') (Nothing : map Just xs) (places xs))
+      sepBy breakOrSpace (zipWith (item broken') (Nothing : fmap Just xs) (places xs))
     item broken' previous (place, x) =
       gapAbove place (unLoc <$> previous) (unLoc x)
         <> align (at ctx (widenToDoc x) (ieItem ctx (spanOf x) (comma' broken' place)))
@@ -275,15 +241,14 @@
       | isPipe here, maybe False runsOn previous = hardBreak
       | otherwise = mempty
     isSection = \case
-      IEGroup {} -> True
+      IEGroup{} -> True
       _ -> False
     isPipe = \case
-      IEDoc {} -> True
+      IEDoc{} -> True
       _ -> False
-    -- Documentation that takes in whatever is written directly under it.
     runsOn = \case
-      IEDoc {} -> True
-      IEDocNamed {} -> True
+      IEDoc{} -> True
+      IEDocNamed{} -> True
       _ -> False
     comma' broken' place
       | broken' = True
@@ -326,7 +291,7 @@
       )
       <> itemDocumentation doc
     where
-      rendered = map (at_ ctx (wrappedName ctx)) members
+      rendered = fmap (at_ ctx (wrappedName ctx)) members
       withWildcard = case wildcard of
         NoIEWildcard -> rendered
         IEWildcard n' ->
@@ -337,7 +302,7 @@
   IEGroup NoExtField n str -> haddock ctx (Section n) Open str
   IEDoc NoExtField str -> haddock ctx Pipe Open str
   IEDocNamed NoExtField n -> case writtenHaddock ctx here of
-    Just written -> sepBy (verbatimBreak AtIndent) (map txt (NE.toList written))
+    Just written -> sepBy (verbatimBreak AtIndent TrimWhitespace) (fmap txt (NE.toList written))
     Nothing -> txt (docSectionName n)
   where
     comma' = includeWhen withComma comma
@@ -346,6 +311,7 @@
     itemDocumentation =
       foldMap (\d -> breakOrSpace <> haddock ctx Caret Open d)
 
+-- | The documentation written with an export list item, if any.
 itemDoc :: IE GhcPs -> Maybe (ExportDoc GhcPs)
 itemDoc = \case
   IEVar _ _ doc -> doc
@@ -355,22 +321,16 @@
   _ -> Nothing
 
 -- | Does this export list entry carry documentation?
---
--- A list holding one cannot go on one line: the entry would swallow the rest
--- of it, closing bracket and all.
 isDocEntry :: IE GhcPs -> Bool
 isDocEntry = \case
-  IEDoc {} -> True
-  IEGroup {} -> True
-  IEDocNamed {} -> True
+  IEDoc{} -> True
+  IEGroup{} -> True
+  IEDocNamed{} -> True
   _ -> False
 
-----------------------------------------------------------------------------
--- Imports
-
 -- | One import declaration.
 importDecl :: Ctx -> ImportDecl GhcPs -> Doc
-importDecl ctx ImportDecl {..} =
+importDecl ctx ImportDecl{..} =
   txt "import"
     <> space
     <> includeWhen (ideclSource == IsBoot) (txt "{-# SOURCE #-}")
@@ -395,18 +355,15 @@
   where
     qualifiedLast = extensionOn ctx ImportQualifiedPost
     isQualified = isImportDeclQualified ideclQualified
-
     packageQualifier = case ideclPkgQual of
       NoRawPkgQual -> mempty
       RawPkgQual literal -> outputable literal
-
     levelBefore = case ideclLevelSpec of
       LevelStylePre l -> declLevel l
       _ -> mempty
     levelAfter = case ideclLevelSpec of
       LevelStylePost l -> declLevel l
       _ -> mempty
-
     importList = case ideclImportList of
       Nothing -> mempty
       Just (interpretation, L listLoc xs) ->
@@ -422,6 +379,7 @@
             Exactly -> mempty
             EverythingBut -> txt "hiding"
 
+-- | The keyword an import's level is written with.
 declLevel :: ImportDeclLevel -> Doc
 declLevel = \case
   ImportDeclSplice -> txt "splice"
diff --git a/src/Tilia/Render/Layout.hs b/src/Tilia/Render/Layout.hs
--- a/src/Tilia/Render/Layout.hs
+++ b/src/Tilia/Render/Layout.hs
@@ -1,32 +1,24 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
 
 -- | Runs of things: statements, bindings, equations, list elements.
 module Tilia.Render.Layout
-  ( -- * Blocks
-    Bracing (..),
+  ( Bracing (..),
     items,
     itemsSepBy,
-
-    -- * Blank lines
     keepBlanks,
-
-    -- * Positions in a run
     Place (..),
     places,
   )
 where
 
+import Data.Choice (Choice, isTrue, pattern Without)
 import Tilia.Doc.Combinators
 import Tilia.Span
 
-----------------------------------------------------------------------------
--- Blocks
-
 -- | May a block put braces around itself when it is laid out on one line?
---
--- It may not when something outside it is already doing so: nested braces
--- would be correct but unreadable, and more to the point the outer block
--- has already made the items unambiguous.
 data Bracing
   = MayBrace
   | NoBrace
@@ -34,18 +26,13 @@
 
 -- | A block: one item per line when broken, semicolons when flat.
 items :: Bracing -> [Doc] -> Doc
-items = itemsSepBy False
+items = itemsSepBy (Without #semisWhenBroken)
 
 -- | 'items', with control over whether the broken form carries semicolons
 -- too.
---
--- It has to when the block is standing in for something that would
--- otherwise be read as continuing: an or-pattern inside an as-pattern, for
--- instance, where a bare line break would let the next alternative be taken
--- for a new argument.
 itemsSepBy ::
   -- | Semicolons in the broken layout as well?
-  Bool ->
+  Choice "semisWhenBroken" ->
   Bracing ->
   [Doc] ->
   Doc
@@ -58,24 +45,18 @@
       (NoBrace, _) -> joined
     joined = sepBy (semi <> space) xs
     brokenForm =
-      sepBy (includeWhen semisWhenBroken semi <> hardBreak) xs
-
-----------------------------------------------------------------------------
--- Blank lines
+      sepBy (includeWhen (isTrue semisWhenBroken) semi <> hardBreak) xs
 
 -- | Put back the empty lines the author left between items.
 keepBlanks ::
   -- | Was there an empty line between two items?
   (Maybe Span -> Maybe Span -> Bool) ->
-  -- | Where each item was, and what it prints as
+  -- | Where each item was, and what it prints as.
   [(Maybe Span, Doc)] ->
   [Doc]
-keepBlanks blank xs = zipWith gap (Nothing : map fst xs) xs
+keepBlanks blank xs = zipWith gap (Nothing : fmap fst xs) xs
   where
     gap previous (here, d) = includeWhen (blank previous here) hardBreak <> d
-
-----------------------------------------------------------------------------
--- Positions in a run
 
 -- | Where an item sits among its siblings.
 data Place
diff --git a/src/Tilia/Render/Literal.hs b/src/Tilia/Render/Literal.hs
--- a/src/Tilia/Render/Literal.hs
+++ b/src/Tilia/Render/Literal.hs
@@ -26,29 +26,33 @@
   Nothing -> error ("Tilia: unparsable string literal: " <> show src)
   Just literal -> align (renderLiteral literal)
 
+-- | Print a literal back out, on one line or across several.
 renderLiteral :: Literal -> Doc
 renderLiteral literal =
   txt (litOpen literal) <> body <> txt (litClose literal)
   where
     body = case litKind literal of
       Regular -> variant onOneLine acrossLines
-      Multiline -> sepBy (verbatimBreak AtIndent) (map txt (litParts literal))
+      Multiline ->
+        sepBy
+          (verbatimBreak AtIndent KeepWhitespace)
+          (fmap txt (litParts literal))
     onOneLine = txt (joinParts (litParts literal))
     acrossLines =
-      sepBy breakOrSpace (map continued (places (litParts literal)))
+      sepBy breakOrSpace (fmap continued (places (litParts literal)))
     continued (place, s) = case place of
       Only -> txt s
       First -> txt s <> txt "\\"
       Middle -> txt "\\" <> txt s <> txt "\\"
       Last -> txt "\\" <> txt s
 
-----------------------------------------------------------------------------
--- Taking a literal apart
-
 -- | A literal split into the bits that may be laid out separately.
 data Literal = Literal
-  { litOpen :: Text,
+  { -- | The opening quote.
+    litOpen :: Text,
+    -- | The closing quote, with any @#@ that followed it.
     litClose :: Text,
+    -- | Which syntax it was written in.
     litKind :: LiteralKind,
     -- | For a regular literal, the runs between string gaps; for a
     -- multi-line one, the lines.
@@ -56,11 +60,13 @@
   }
   deriving (Eq, Show)
 
+-- | Which of the two string syntaxes a literal was written in.
 data LiteralKind
   = Regular
   | Multiline
   deriving (Eq, Show)
 
+-- | Take a literal apart into its quotes and the parts between them.
 takeApart :: Text -> Maybe Literal
 takeApart s = do
   literal <-
@@ -69,7 +75,7 @@
   let split = case litKind literal of
         Regular -> runsBetweenGaps
         Multiline -> splitMultiline
-  pure literal {litParts = concatMap split (litParts literal)}
+  pure literal{litParts = concatMap split (litParts literal)}
 
 -- | Peel the quotes off, allowing for the @#@ that marks an unlifted
 -- literal.
@@ -78,7 +84,7 @@
   inner <- T.stripPrefix marker s
   litClose <- find (`T.isSuffixOf` inner) [marker <> "#", marker]
   body <- T.stripSuffix litClose inner
-  pure Literal {litOpen = marker, litParts = [body], ..}
+  pure Literal{litOpen = marker, litParts = [body], ..}
 
 -- | The runs of a literal either side of its string gaps.
 runsBetweenGaps :: Text -> [Text]
@@ -86,24 +92,16 @@
   Nothing -> [s]
   Just (before, after) -> T.take before s : runsBetweenGaps after
   where
-    -- How much comes before the first gap, and what comes after it.
     gapAt n t = case T.uncons t of
       Nothing -> Nothing
       Just ('\\', rest) -> case afterGap rest of
         Just resumes -> Just (n, resumes)
         Nothing -> let taken = 1 + escapedWidth rest in gapAt (n + taken) (T.drop taken t)
       Just (_, rest) -> gapAt (n + 1) rest
-
-    -- Where the literal picks up again, if this backslash opened a gap.
     afterGap t = case T.span is_space t of
       (blank, rest)
         | not (T.null blank), Just ('\\', resumes) <- T.uncons rest -> Just resumes
       _ -> Nothing
-
-    -- How much follows the backslash of an escape that is not a gap. Only
-    -- @\\^X@ reaches past the character after the backslash; the numeric
-    -- escapes run on further, but their digits are not backslashes and do
-    -- not need skipping.
     escapedWidth t = case T.uncons t of
       Just ('^', _) -> 2
       Just _ -> 1
@@ -114,7 +112,7 @@
 splitMultiline :: Text -> [Text]
 splitMultiline =
   dropCommonIndent
-    . map expandTabs
+    . fmap expandTabs
     . splitLines
     . joinParts
     . runsBetweenGaps
@@ -143,7 +141,7 @@
   [] -> []
   firstLine : rest -> firstLine : trimmed
     where
-      (indents, trimmed) = unzip (map measure rest)
+      (indents, trimmed) = unzip (fmap measure rest)
       common = maybe 0 getMin (mconcat indents)
       measure l
         | T.all is_space l = (Nothing, "")
diff --git a/src/Tilia/Render/Name.hs b/src/Tilia/Render/Name.hs
--- a/src/Tilia/Render/Name.hs
+++ b/src/Tilia/Render/Name.hs
@@ -1,26 +1,23 @@
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE ViewPatterns #-}
 
 -- | Names, and the decorations the author put around them.
 module Tilia.Render.Name
-  ( -- * Rendering anything GHC can show
-    outputable,
+  ( outputable,
     showGhc,
     sourceText,
-
-    -- * Names
     name,
     moduleHeadName,
     wrappedName,
     namespaceSpec,
     multiplicity,
-
-    -- * Definition heads
     defHead,
   )
 where
 
+import Data.Choice (Choice, isTrue)
 import Data.Text (Text)
 import Data.Text qualified as T
 import GHC.Hs
@@ -32,6 +29,7 @@
 import GHC.Utils.Outputable (Outputable, ppr, showSDocUnsafe)
 import Tilia.Doc.Combinators
 import Tilia.Render.Context
+import Tilia.Source (SourceType (..))
 import Tilia.Span
 import Tilia.Span.Ghc
 
@@ -53,9 +51,6 @@
   NoSourceText -> mempty
   SourceText s -> outputable s
 
-----------------------------------------------------------------------------
--- Names
-
 -- | A name, with whatever the author wrapped it in.
 name :: Ctx -> LocatedN RdrName -> Doc
 name ctx l = at ctx l $ \x -> adorn ctx (spanOf l) x (getLoc l) (bareName x)
@@ -72,36 +67,21 @@
 adorn :: Ctx -> Maybe Span -> RdrName -> EpAnn NameAnn -> Doc -> Doc
 adorn ctx here x = go
   where
-    go EpAnn {anns} = case anns of
-      -- A promotion tick, with whatever the name carries under it.
-      NameAnnQuote {nann_quoted} -> (txt "'" <>) . go nann_quoted
-      -- The empty unboxed sum and the empty list are written out whole:
-      -- there is no name under the brackets to print.
-      NameAnnOnly {nann_adornment = NameParensHash {}} -> const (txt "(# #)")
-      NameAnnOnly {nann_adornment = NameSquare {}} ->
+    go EpAnn{anns} = case anns of
+      NameAnnQuote{nann_quoted} -> (txt "'" <>) . go nann_quoted
+      NameAnnOnly{nann_adornment = NameParensHash{}} -> const (txt "(# #)")
+      NameAnnOnly{nann_adornment = NameSquare{}} ->
         const (txt "[" <> insideBrackets here mempty <> txt "]")
-      -- @->@ is the one name that is a keyword as well, and the parentheses
-      -- are recorded on their own rather than as an adornment.
-      NameAnnRArrow {nann_mopen = Just _} -> inParens
-      -- The name inside the brackets is claimed separately from the
-      -- brackets themselves, so that a comment written against it—@( {-
-      -- here -} :+: )@—is put where it was written rather than after the
-      -- closing bracket.
-      NameAnn {nann_adornment, nann_name} -> case nann_adornment of
-        NameParens {} -> inParens . spaceOutHash . itsOwn nann_name
-        NameBackquotes {} -> backticks . itsOwn nann_name
+      NameAnnRArrow{nann_mopen = Just _} -> inParens
+      NameAnn{nann_adornment, nann_name} -> case nann_adornment of
+        NameParens{} -> inParens . spaceOutHash . itsOwn nann_name
+        NameBackquotes{} -> backticks . itsOwn nann_name
         _ -> itsOwn nann_name
       _ -> id
-
     itsOwn = atSpan ctx . annSpan
-
     inParens d = txt "(" <> d <> txt ")"
-
-    -- With UnboxedSums on, @(#@ lexes as one token, so an operator starting
-    -- with @#@ cannot sit against its opening bracket.
     spaceOutHash d
       | extensionOn ctx UnboxedSums,
-        -- A qualified name never begins with a @#@.
         Unqual (occNameString -> '#' : _) <- x =
           space <> d <> space
       | otherwise = d
@@ -144,9 +124,6 @@
   HsLinearAnn _ -> txt "%1"
   HsExplicitMult _ mult -> txt "%" <> render mult
 
-----------------------------------------------------------------------------
--- Definition heads
-
 -- | The left-hand side of a definition: a name and the things it is applied
 -- to.
 --
@@ -157,26 +134,31 @@
 -- indented anyway, so that the arguments do not end up two steps in.
 defHead ::
   -- | Written infix?
-  Bool ->
+  Choice "writtenInfix" ->
   -- | Indent the arguments?
-  Bool ->
-  -- | The name
+  Choice "indentArgs" ->
+  -- | The name.
   Doc ->
-  -- | The arguments
+  -- | The arguments.
   [Doc] ->
   Doc
-defHead True indentArgs nameDoc (a0 : a1 : rest) =
-  wrap (a0 <> breakOrSpace <> indent (align (nameDoc <> space <> a1)))
-    <> includeUnless (null rest) (nest (steps indentArgs) (breakOrSpace <> spread rest))
+defHead writtenInfix indentArgs nameDoc (a0 : a1 : rest)
+  | isTrue writtenInfix =
+      wrap (a0 <> breakOrSpace <> indent (align (nameDoc <> space <> a1)))
+        <> includeUnless
+          (null rest)
+          (nest (steps indentArgs) (breakOrSpace <> spread rest))
   where
     wrap = if null rest then id else parens
 defHead _ indentArgs nameDoc args =
   nameDoc
-    <> includeUnless (null args) (nest (steps indentArgs) (breakOrSpace <> spread args))
+    <> includeUnless
+      (null args)
+      (nest (steps indentArgs) (breakOrSpace <> spread args))
 
 -- | Arguments, each aligned under itself, one per line when broken.
 spread :: [Doc] -> Doc
-spread = align . sepBy breakOrSpace . map align
+spread = align . sepBy breakOrSpace . fmap align
 
-steps :: Bool -> Int
-steps b = if b then 1 else 0
+steps :: Choice "indentArgs" -> Int
+steps indentArgs = if isTrue indentArgs then 1 else 0
diff --git a/src/Tilia/Render/Operator.hs b/src/Tilia/Render/Operator.hs
--- a/src/Tilia/Render/Operator.hs
+++ b/src/Tilia/Render/Operator.hs
@@ -2,13 +2,10 @@
 
 -- | Regrouping a chain of infix operators by precedence.
 module Tilia.Render.Operator
-  ( -- * Chains
-    OpChain (..),
+  ( OpChain (..),
     flatten,
     flattenAround,
     associate,
-
-    -- * Asking about a chain
     chainSpan,
     lastOperand,
     isSeparator,
@@ -38,8 +35,9 @@
 -- node that is an application of an infix operator, and nothing for a node
 -- that is a leaf.
 flatten ::
-  -- | Take one node apart, if it comes apart
+  -- | Take one node apart, if it comes apart.
   (a -> Maybe (a, op, a)) ->
+  -- | The root of the tree.
   a ->
   (NonEmpty a, [op])
 flatten split = go
@@ -57,9 +55,13 @@
 -- parts, so by the time a chain is being built the outermost node has
 -- already been destructured and there is nothing left to hand to 'flatten'.
 flattenAround ::
+  -- | Take one node apart, if it comes apart.
   (a -> Maybe (a, op, a)) ->
+  -- | The left operand of the node already taken apart.
   a ->
+  -- | Its operator.
   op ->
+  -- | Its right operand.
   a ->
   (NonEmpty a, [op])
 flattenAround split l op r =
@@ -71,13 +73,15 @@
 --
 -- The loosest-binding operators of the run become the operators of the top
 -- branch, and everything between two of them becomes a subtree, regrouped
--- the same way. When any operator in the run has no known precedence the run
--- is left as one flat branch: nothing is asserted about how it associates,
--- so nothing is rearranged.
+-- the same way. When any operator in the run has no known precedence the
+-- run is left as one flat branch: nothing is asserted about how it
+-- associates, so nothing is rearranged.
 associate ::
-  -- | The fixity of an operator, if it was established
+  -- | The fixity of an operator, if it was established.
   (op -> Maybe Fixity) ->
+  -- | The operands of the run, in the order written.
   NonEmpty a ->
+  -- | The operators standing between them.
   [op] ->
   OpChain a op
 associate fixityOf = build
@@ -90,14 +94,16 @@
             (groups, splitters) -> Chain (fmap (uncurry build) groups) splitters
       where
         loosest = minimum (mapMaybe precedenceOf ops)
-
     flatBranch operands ops = Chain (Operand <$> operands) ops
     precedenceOf = fmap fixityPrecedence . fixityOf
 
 -- | Cut a run wherever the operator satisfies the predicate.
 splitOn ::
+  -- | Which operators cut the run.
   (op -> Bool) ->
+  -- | The operands of the run, in the order written.
   NonEmpty a ->
+  -- | The operators standing between them.
   [op] ->
   (NonEmpty (NonEmpty a, [op]), [op])
 splitOn cuts (x0 :| xs) ops = go (x0 :| []) [] (zip ops xs)
@@ -108,9 +114,6 @@
           let (groups, splitters) = go (y :| []) [] rest
            in (NE.cons (NE.reverse current, reverse currentOps) groups, op : splitters)
       | otherwise = go (NE.cons y current) (op : currentOps) rest
-
-----------------------------------------------------------------------------
--- Asking about a chain
 
 -- | The region of the input a chain came from.
 chainSpan :: (a -> Maybe Span) -> OpChain a op -> Maybe Span
diff --git a/src/Tilia/Render/Pattern.hs b/src/Tilia/Render/Pattern.hs
--- a/src/Tilia/Render/Pattern.hs
+++ b/src/Tilia/Render/Pattern.hs
@@ -1,5 +1,8 @@
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE ViewPatterns #-}
 
@@ -11,6 +14,7 @@
   )
 where
 
+import Data.Choice (Choice, fromBool, isTrue, pattern Is, pattern Isn't)
 import Data.List.NonEmpty qualified as NE
 import Data.Maybe (isJust)
 import GHC.Hs
@@ -28,35 +32,46 @@
 
 -- | A pattern.
 hsPat :: Ctx -> LPat GhcPs -> Doc
-hsPat ctx = hsPatIn ctx NoBrace False
+hsPat ctx = hsPatIn ctx NoBrace (Isn't #inAsPat)
 
 -- | A pattern that knows where it stands.
---
--- Two things about the surroundings reach into a pattern. The first is
--- whether an alternative of an or-pattern may be brace-delimited, which is
--- the same question every block faces. The second is whether we are inside
--- an @as@-pattern, where an or-pattern's alternatives must keep their
--- semicolons even when they go on separate lines, since a bare line break
--- would let the next alternative be read as a new argument.
-hsPatIn :: Ctx -> Bracing -> Bool -> LPat GhcPs -> Doc
+hsPatIn ::
+  -- | The context.
+  Ctx ->
+  -- | Bracing an or-pattern inherits.
+  Bracing ->
+  -- | Is this inside an as-pattern?
+  Choice "inAsPat" ->
+  -- | The pattern.
+  LPat GhcPs ->
+  Doc
 hsPatIn ctx bracing inAsPat l = at ctx l (patBody ctx bracing inAsPat (spanOf l))
 
-patBody :: Ctx -> Bracing -> Bool -> Maybe Span -> Pat GhcPs -> Doc
+-- | Every shape a pattern can take.
+patBody ::
+  -- | The context.
+  Ctx ->
+  -- | Bracing an or-pattern inherits.
+  Bracing ->
+  -- | Is this inside an as-pattern?
+  Choice "inAsPat" ->
+  -- | Where the pattern was written.
+  Maybe Span ->
+  -- | The pattern.
+  Pat GhcPs ->
+  Doc
 patBody ctx bracing inAsPat here = \case
   WildPat _ -> txt "_"
   VarPat _ n -> name ctx n
   LazyPat _ p -> txt "~" <> recur p
-  AsPat _ n p -> name ctx n <> txt "@" <> hsPatIn ctx bracing True p
-  -- A pattern is nearly always an item of a layout block—an alternative of a
-  -- @case@, the left of a @<-@ in a @do@ block—so its brackets close one
-  -- step in. Where it is not, the extra step costs nothing.
+  AsPat _ n p -> name ctx n <> txt "@" <> hsPatIn ctx bracing (Is #inAsPat) p
   ParPat _ p -> parensWith Indented (insideBrackets here (recur p))
   BangPat _ p -> txt "!" <> recur p
-  ListPat _ ps -> bracketsWith Indented (insideBrackets here (commaSep (map recur ps)))
+  ListPat _ ps -> bracketsWith Indented (insideBrackets here (commaSep (fmap recur ps)))
   TuplePat _ ps boxity ->
-    tupleBrackets boxity (insideBrackets here (commaSep (map (align . recur) ps)))
+    tupleBrackets boxity (insideBrackets here (commaSep (fmap (align . recur) ps)))
   OrPat _ ps ->
-    itemsSepBy inAsPat bracing (map recur (NE.toList ps))
+    itemsSepBy (fromBool (isTrue inAsPat)) bracing (fmap recur (NE.toList ps))
   SumPat _ p tag arity -> unboxedSum Indented tag arity (recur p)
   ConPat _ con details -> conPattern ctx bracing inAsPat here con details
   ViewPat _ e p ->
@@ -74,7 +89,7 @@
       name ctx n
         <> breakOrSpace
         <> indent (txt "+" <> space <> at ctx k (outputable . ol_val))
-  SigPat _ p HsPS {..} ->
+  SigPat _ p HsPS{..} ->
     recur p <> typeAscription ctx (asSigType hsps_body)
   EmbTyPat _ (HsTP _ ty) -> txt "type" <> space <> hsType ctx ty
   InvisPat _ (HsTP _ ty) -> txt "@" <> hsType ctx ty
@@ -83,11 +98,17 @@
 
 -- | A constructor pattern, in whichever of its three forms.
 conPattern ::
+  -- | The context.
   Ctx ->
+  -- | Bracing an or-pattern inherits.
   Bracing ->
-  Bool ->
+  -- | Is this inside an as-pattern?
+  Choice "inAsPat" ->
+  -- | Where the pattern was written.
   Maybe Span ->
+  -- | The constructor.
   LocatedN RdrName ->
+  -- | What it was applied to.
   HsConPatDetails GhcPs ->
   Doc
 conPattern ctx bracing inAsPat here con = \case
@@ -95,11 +116,11 @@
     align $
       name ctx con
         <> includeUnless (null args) breakOrSpace
-        <> indent (align (sepBy breakOrSpace (map (align . recur) args)))
+        <> indent (align (sepBy breakOrSpace (fmap (align . recur) args)))
   RecCon (HsRecFields _ fields dotdot) ->
     name ctx con
-      <> breakOrSpace
-      <> indent (braces (insideBrackets here (commaSep (map field (visibleFields dotdot fields)))))
+      <> breakOrNothing
+      <> indent (braces (insideBrackets here (commaSep (fmap field (visibleFields dotdot fields)))))
   InfixCon l r ->
     layoutFrom ctx (spanOf l <> spanOf r) $
       recur l
@@ -108,18 +129,15 @@
   where
     recur = hsPatIn ctx bracing inAsPat
     field = either wildcard (at_ ctx (patFieldBind ctx))
-    -- The @..@ has a location of its own, and needs it: a comment written
-    -- against it has nothing else to attach to.
     wildcard l = at ctx l (const (txt ".."))
-    -- A @..@ stands for the fields that were not written out, so it goes
-    -- after the ones that were.
     visibleFields dotdot fields = case dotdot of
       Nothing -> Right <$> fields
       Just l@(L _ (RecFieldsDotDot n)) ->
         (Right <$> take n fields) <> [Left l]
 
+-- | One field of a record pattern.
 patFieldBind :: Ctx -> HsRecField GhcPs (LPat GhcPs) -> Doc
-patFieldBind ctx HsFieldBind {..} =
+patFieldBind ctx HsFieldBind{..} =
   at ctx hfbLHS (fieldOcc ctx)
     <> includeUnless
       hfbPun
@@ -127,10 +145,7 @@
 
 -- | The name of a record field.
 fieldOcc :: Ctx -> FieldOcc GhcPs -> Doc
-fieldOcc ctx FieldOcc {..} = name ctx foLabel
-
-----------------------------------------------------------------------------
--- Shapes shared with expressions
+fieldOcc ctx FieldOcc{..} = name ctx foLabel
 
 -- | An unboxed sum: the one alternative that is present, with a bar for each
 -- one that is not.
@@ -141,6 +156,7 @@
     before = replicate (tag - 1) space
     after = replicate (arity - tag) space
 
+-- | The brackets a tuple pattern is written with.
 tupleBrackets :: Boxity -> Doc -> Doc
 tupleBrackets = \case
   Boxed -> parensWith Indented
diff --git a/src/Tilia/Render/Pragma.hs b/src/Tilia/Render/Pragma.hs
--- a/src/Tilia/Render/Pragma.hs
+++ b/src/Tilia/Render/Pragma.hs
@@ -4,28 +4,12 @@
 {-# LANGUAGE ViewPatterns #-}
 
 -- | The @{-# … #-}@ annotations that appear among declarations.
---
--- These look like comments and are not: the compiler reads them, so their
--- content is not ours to reflow and their placement is not ours to change.
--- What is ours is where the braces break, which is all this module decides.
---
--- The @LANGUAGE@ and @OPTIONS_GHC@ pragmas of the file header are not here.
--- They are part of the header rather than of any declaration, they are
--- sorted rather than left where they were, and they are handled in
--- "Tilia.Render.Header".
 module Tilia.Render.Pragma
-  ( -- * Braces
-    pragmaBrackets,
+  ( pragmaBrackets,
     pragma,
-
-    -- * Inlining and rules
     activation,
     inlineSpec,
-
-    -- * Instances
     overlapMode,
-
-    -- * Warnings
     warnDecls,
     warningTxt,
   )
@@ -41,13 +25,7 @@
 import Tilia.Render.Context
 import Tilia.Render.Name
 
-----------------------------------------------------------------------------
--- Braces
-
 -- | Wrap a body in pragma braces.
---
--- The closing brace is indented when the pragma breaks, which keeps it from
--- being mistaken for the start of a new declaration.
 pragmaBrackets :: Doc -> Doc
 pragmaBrackets body =
   align (txt "{-#" <> space <> body <> breakOrSpace <> indent (txt "#-}"))
@@ -57,9 +35,6 @@
 pragma pragmaName body =
   pragmaBrackets (txt pragmaName <> breakOrSpace <> body)
 
-----------------------------------------------------------------------------
--- Inlining and rules
-
 -- | The phase control of an @INLINE@ or @RULES@ pragma.
 activation :: Activation -> Doc
 activation = \case
@@ -78,29 +53,18 @@
   Opaque _ -> txt "OPAQUE"
   NoUserInlinePrag -> mempty
 
-----------------------------------------------------------------------------
--- Instances
-
 -- | The overlap pragma of an instance, and the separator after it.
 overlapMode :: Maybe (LocatedP OverlapMode) -> Maybe Doc
 overlapMode mode = txt . braced <$> (spelled . unLoc =<< mode)
   where
-    -- Written out whole rather than built with 'pragmaBrackets': an overlap
-    -- mode is one word and must never be broken across lines.
     braced keyword = "{-# " <> keyword <> " #-}"
-
     spelled = \case
-      Overlappable {} -> Just "OVERLAPPABLE"
-      Overlapping {} -> Just "OVERLAPPING"
-      Overlaps {} -> Just "OVERLAPS"
-      Incoherent {} -> Just "INCOHERENT"
-      -- The rest are what an instance means when it says nothing about
-      -- overlapping, so nothing is what they are written as.
+      Overlappable{} -> Just "OVERLAPPABLE"
+      Overlapping{} -> Just "OVERLAPPING"
+      Overlaps{} -> Just "OVERLAPS"
+      Incoherent{} -> Just "INCOHERENT"
       _ -> Nothing
 
-----------------------------------------------------------------------------
--- Warnings
-
 -- | A @WARNING@ or @DEPRECATED@ declaration.
 warnDecls :: Ctx -> WarnDecls GhcPs -> Doc
 warnDecls ctx (Warnings _ warnings) = case warnings of
@@ -109,7 +73,7 @@
     layoutAcross ctx warnings
       . pragma (keywordOf wtxt)
       . indent
-      $ sepBy (txt ";" <> breakOrSpace) (map (at_ ctx (warned ctx)) warnings)
+      $ sepBy (txt ";" <> breakOrSpace) (fmap (at_ ctx (warned ctx)) warnings)
   where
     keywordOf wtxt = let (keyword, _, _) = warningParts wtxt in keyword
 
@@ -118,7 +82,7 @@
 warned ctx (Warning (namespace, _) names wtxt) =
   category
     <> namespaceSpec namespace
-    <> commaSep (map (name ctx) names)
+    <> commaSep (fmap (name ctx) names)
     <> breakOrSpace
     <> literalList literals
   where
@@ -143,12 +107,12 @@
   WarningTxt category _ literals ->
     ("WARNING", foldMap named category, said literals)
   where
-    said = map (fmap hsDocString)
-    named (unLoc -> InWarningCategory {..}) =
+    said = fmap (fmap hsDocString)
+    named (unLoc -> InWarningCategory{..}) =
       txt ("in \"" <> showGhc (unLoc iwc_wc) <> "\"") <> space
 
 -- | One message is written bare; several go in a list.
 literalList :: [LocatedE StringLiteral] -> Doc
 literalList = \case
   [l] -> outputable l
-  ls -> brackets (commaSep (map outputable ls))
+  ls -> brackets (commaSep (fmap outputable ls))
diff --git a/src/Tilia/Render/Signature.hs b/src/Tilia/Render/Signature.hs
--- a/src/Tilia/Render/Signature.hs
+++ b/src/Tilia/Render/Signature.hs
@@ -1,5 +1,8 @@
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
 {-# LANGUAGE RecordWildCards #-}
 
 -- | Signatures, and the pragmas that are written like them.
@@ -11,8 +14,9 @@
   )
 where
 
+import Data.Choice (Choice, isTrue, pattern Do, pattern Don't)
 import Data.Maybe (maybeToList)
-import GHC.Data.BooleanFormula
+import GHC.Data.BooleanFormula hiding (isTrue)
 import GHC.Hs
 import GHC.Types.Basic
   ( Activation (..),
@@ -37,10 +41,10 @@
 -- | A signature declaration.
 sigDecl :: Ctx -> Sig GhcPs -> Doc
 sigDecl ctx = \case
-  TypeSig _ names hswc -> typeSig ctx True names (hswc_body hswc)
+  TypeSig _ names hswc -> typeSig ctx (Do #indentTail) names (hswc_body hswc)
   PatSynSig _ names sigType -> patSynSig ctx names sigType
   ClassOpSig _ isDefault names sigType ->
-    includeWhen isDefault (txt "default" <> space) <> typeSig ctx True names sigType
+    includeWhen isDefault (txt "default" <> space) <> typeSig ctx (Do #indentTail) names sigType
   FixSig _ sig -> fixitySig ctx sig
   InlineSig _ n prag -> inlineSig ctx n prag
   SpecSig _ n types prag ->
@@ -54,16 +58,14 @@
   SCCFunSig _ n literal -> sccSig ctx n literal
 
 -- | @f, g :: t@.
---
--- Only the first name sits on the line the signature starts on; the rest
--- are indented under it, unless the caller says not to, which is what a
--- pattern synonym signature wants so that its names line up after
--- @pattern@.
 typeSig ::
+  -- | The context.
   Ctx ->
   -- | Indent the names after the first?
-  Bool ->
+  Choice "indentTail" ->
+  -- | The names the signature is about.
   [LocatedN RdrName] ->
+  -- | The type they are given.
   LHsSigType GhcPs ->
   Doc
 typeSig _ _ [] _ = mempty
@@ -72,20 +74,22 @@
   | otherwise =
       name ctx n
         <> nest
-          (if indentTail then 1 else 0)
+          (if isTrue indentTail then 1 else 0)
           ( comma
               <> breakOrSpace
-              <> commaSep (map (name ctx) ns)
+              <> commaSep (fmap (name ctx) ns)
               <> typeAscription ctx sigType
           )
 
+-- | @pattern P :: t@.
 patSynSig :: Ctx -> [LocatedN RdrName] -> LHsSigType GhcPs -> Doc
 patSynSig ctx names sigType
   | length names > 1 = txt "pattern" <> breakOrSpace <> indent body
   | otherwise = txt "pattern" <> space <> body
   where
-    body = typeSig ctx False names sigType
+    body = typeSig ctx (Don't #indentTail) names sigType
 
+-- | @infixl 5 <+>@.
 fixitySig :: Ctx -> FixitySig GhcPs -> Doc
 fixitySig ctx (FixitySig namespace names (Fixity precedence direction)) =
   txt keyword
@@ -93,15 +97,16 @@
     <> outputable precedence
     <> space
     <> namespaceSpec namespace
-    <> align (commaSep (map (name ctx) names))
+    <> align (commaSep (fmap (name ctx) names))
   where
     keyword = case direction of
       InfixL -> "infixl"
       InfixR -> "infixr"
       InfixN -> "infix"
 
+-- | An @INLINE@ or @NOINLINE@ pragma.
 inlineSig :: Ctx -> LocatedN RdrName -> InlinePragma -> Doc
-inlineSig ctx n InlinePragma {..} =
+inlineSig ctx n InlinePragma{..} =
   pragmaBrackets $
     inlineSpec inl_inline
       <> space
@@ -123,7 +128,7 @@
   [LHsSigType GhcPs] ->
   InlinePragma ->
   Doc
-specialiseSig ctx binders target types InlinePragma {..} =
+specialiseSig ctx binders target types InlinePragma{..} =
   pragmaBrackets $
     txt "SPECIALIZE"
       <> space
@@ -136,7 +141,7 @@
             <> hsExpr ctx target
             <> includeUnless
               (null types)
-              (joinedBy "::" <> commaSep (map (hsSigType ctx) types))
+              (joinedBy "::" <> commaSep (fmap (hsSigType ctx) types))
         )
   where
     -- A pragma that says neither when to inline nor whether to is saying
@@ -145,6 +150,7 @@
       (NoInline _, NeverActive) -> mempty
       _ -> activation inl_act
 
+-- | A @SPECIALIZE@ pragma written as an expression.
 specialiseSigE ::
   Ctx ->
   RuleBndrs GhcPs ->
@@ -154,64 +160,52 @@
 specialiseSigE ctx binders e =
   specialiseSig ctx (Just binders) target (maybeToList sigTy)
   where
-    (_, target, sigTy) = takeApartSpecExpr e
-
--- | Pull a @SPECIALIZE@ expression apart into the name, the application and
--- the signature.
---
--- The expression in this position can only be a variable applied to
--- arguments, optionally with a type ascription, so the name is always
--- reachable by walking down the left spine.
-takeApartSpecExpr ::
-  LHsExpr GhcPs ->
-  (LocatedN RdrName, LHsExpr GhcPs, Maybe (LHsSigType GhcPs))
-takeApartSpecExpr expr = (specHead applied, applied, signature)
-  where
-    (applied, signature) = specBody expr
+    (target, sigTy) = specBody e
 
 -- | A @SPECIALIZE@ expression without the type ascription it may carry.
---
--- Everything else here works on the expression under the ascription: that
--- is what the pragma is about, and the ascription is printed separately.
 specBody :: LHsExpr GhcPs -> (LHsExpr GhcPs, Maybe (LHsSigType GhcPs))
 specBody = \case
-  L _ (ExprWithTySig _ e HsWC {hswc_body}) -> (e, Just hswc_body)
+  L _ (ExprWithTySig _ e HsWC{hswc_body}) -> (e, Just hswc_body)
   e -> (e, Nothing)
 
--- | The function a @SPECIALIZE@ expression applies.
+-- | The function a @SPECIALIZE@ expression applies, if it applies one.
 --
--- Whatever else the expression does, it is an application, and the pragma
--- names whatever sits at the head of it.
-specHead :: LHsExpr GhcPs -> LocatedN RdrName
+-- The parser takes any expression at all here and leaves it to the renamer
+-- to insist on a head variable, so a module on its way to being rejected
+-- reaches us with expressions like @let x = 2 in f x@ in this position.
+specHead :: LHsExpr GhcPs -> Maybe (LocatedN RdrName)
 specHead (L _ e) = case e of
-  HsVar _ n -> n
+  HsVar _ n -> Just n
   HsApp _ f _ -> specHead f
   HsAppType _ f _ -> specHead f
-  _ -> error "Tilia: a SPECIALIZE expression always has a head variable"
+  _ -> Nothing
 
 -- | The name a @SPECIALIZE@ pragma is about, for grouping declarations.
 specialisedName :: Sig GhcPs -> Maybe RdrName
 specialisedName = \case
   SpecSig _ (L _ n) _ _ -> Just n
-  SpecSigE _ _ e _ -> Just (unLoc (specHead (fst (specBody e))))
+  SpecSigE _ _ e _ -> unLoc <$> specHead (fst (specBody e))
   _ -> Nothing
 
+-- | The formula a @MINIMAL@ pragma is written with.
 booleanFormula :: Ctx -> BooleanFormula GhcPs -> Doc
 booleanFormula ctx = \case
   Var n -> name ctx n
-  And xs -> align (commaSep (map (at_ ctx (booleanFormula ctx)) xs))
+  And xs -> align (commaSep (fmap (at_ ctx (booleanFormula ctx)) xs))
   Or xs ->
-    align (sepBy (breakOrSpace <> txt "|" <> space) (map (at_ ctx (booleanFormula ctx)) xs))
+    align (sepBy (breakOrSpace <> txt "|" <> space) (fmap (at_ ctx (booleanFormula ctx)) xs))
   Parens l -> at ctx l (parens . booleanFormula ctx)
 
+-- | A @COMPLETE@ pragma.
 completeSig :: Ctx -> [LIdP GhcPs] -> Maybe (LocatedN RdrName) -> Doc
 completeSig ctx names ty =
   layoutAcross ctx names . pragma "COMPLETE" . indent $
-    commaSep (map (name ctx) names)
+    commaSep (fmap (name ctx) names)
       <> foldMap
         (\t -> joinedBy "::" <> indent (name ctx t))
         ty
 
+-- | An @SCC@ pragma.
 sccSig :: Ctx -> LocatedN RdrName -> Maybe (XRec GhcPs StringLiteral) -> Doc
 sccSig ctx n literal =
   pragma "SCC" . indent $
@@ -228,9 +222,6 @@
           <> hsSigType ctx sigTy
       )
 
-----------------------------------------------------------------------------
--- Rewrite rules
-
 -- | A @RULES@ block.
 --
 -- The closing @#-\}@ is given an anchor of its own, so that a comment
@@ -240,9 +231,10 @@
 ruleDecls :: Ctx -> RuleDecls GhcPs -> Doc
 ruleDecls ctx (HsRules ((_, close), _) rules) =
   pragma "RULES" $
-    sepBy breakOrSpace (map (align . at_ ctx (ruleDecl ctx)) rules)
+    sepBy breakOrSpace (fmap (align . at_ ctx (ruleDecl ctx)) rules)
       <> foldMap (emptyAnchor . startOf) (tokenSpan close)
 
+-- | One rule of a @RULES@ block.
 ruleDecl :: Ctx -> RuleDecl GhcPs -> Doc
 ruleDecl ctx (HsRule _ ruleName phase binders lhs rhs) =
   at ctx ruleName ruleNameLiteral
@@ -265,7 +257,7 @@
 
 -- | The @forall@s a rule or a @SPECIALIZE@ pragma binds.
 ruleBinders :: Ctx -> RuleBndrs GhcPs -> Doc
-ruleBinders ctx (RuleBndrs HsRuleBndrsAnn {..} tyvars binders) =
+ruleBinders ctx (RuleBndrs HsRuleBndrsAnn{..} tyvars binders) =
   foldMap
     (\xs -> forallBndrs ctx Invisible (tyVarBndr ctx) xs <> space)
     tyvars
@@ -273,8 +265,9 @@
       Nothing -> mempty
       Just _ -> forallBndrs ctx Invisible (ruleBinder ctx) binders
 
+-- | One variable a rule's @forall@ binds.
 ruleBinder :: Ctx -> RuleBndr GhcPs -> Doc
 ruleBinder ctx = \case
   RuleBndr _ n -> name ctx n
-  RuleBndrSig _ n HsPS {..} ->
+  RuleBndrSig _ n HsPS{..} ->
     parens (name ctx n <> typeAscription ctx (asSigType hsps_body))
diff --git a/src/Tilia/Render/Type.hs b/src/Tilia/Render/Type.hs
--- a/src/Tilia/Render/Type.hs
+++ b/src/Tilia/Render/Type.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -6,43 +7,30 @@
 
 -- | Types.
 module Tilia.Render.Type
-  ( -- * Types
-    hsType,
+  ( hsType,
     hsTypeBody,
     hsSigType,
     hsSigTypeBody,
     typeAscription,
-
-    -- * Contexts
     context,
     contextOf,
-
-    -- * Binders
-    TyVarBndrFlag (..),
     tyVarBndr,
     Visibility (..),
     forallBndrs,
     forallTelescope,
     outerBndrs,
-
-    -- * Record fields
     recordFieldsAt,
     conDeclField,
     documentedConDeclField,
     strictness,
-
-    -- * Arguments
     typeArgument,
     typeArgSpan,
-
-    -- * Asking about a type
     typeIsDocumented,
-
-    -- * Conversions
     asSigType,
   )
 where
 
+import Data.Choice (Choice, fromBool, isTrue)
 import Data.List.NonEmpty (NonEmpty (..))
 import Data.Text qualified as T
 import GHC.Hs
@@ -61,25 +49,25 @@
 import Tilia.Span
 import Tilia.Span.Ghc
 
-----------------------------------------------------------------------------
--- Types
-
 -- | A type.
 hsType :: Ctx -> LHsType GhcPs -> Doc
 hsType ctx l = at ctx l (hsTypeBody ctx (spanOf l))
 
 -- | A type whose location the caller has already entered.
 hsTypeBody :: Ctx -> Maybe Span -> HsType GhcPs -> Doc
-hsTypeBody ctx here t = typeBody ctx (typeIsDocumented t) here t
+hsTypeBody ctx here t = typeBody ctx (fromBool (typeIsDocumented t)) here t
 
 -- | The body of a type, with the decision about its arguments handed down.
---
--- A type one of whose arguments carries documentation cannot keep its arrows
--- on one line: the Haddock takes the rest of the line with it. So the
--- question is settled once, at the outermost type, and passed inwards—a
--- nested arrow has to know what the whole signature decided rather than what
--- its own subtree would have decided on its own.
-typeBody :: Ctx -> Bool -> Maybe Span -> HsType GhcPs -> Doc
+typeBody ::
+  -- | The context.
+  Ctx ->
+  -- | Does the whole type carry documentation?
+  Choice "documented" ->
+  -- | Where the type was written.
+  Maybe Span ->
+  -- | The type.
+  HsType GhcPs ->
+  Doc
 typeBody ctx documented here = \case
   HsForAllTy _ tele t ->
     forallTelescope ctx tele <> betweenArgs <> hsType ctx t
@@ -89,11 +77,8 @@
       <> txt "=>"
       <> betweenArgs
       <> case unLoc t of
-        -- A nested context or arrow inherits the outer type's decision
-        -- rather than making a fresh one, so a signature breaks all of its
-        -- arrows or none of them.
-        HsQualTy {} -> recur (unLoc t)
-        HsFunTy {} -> hsType ctx t
+        HsQualTy{} -> recur (unLoc t)
+        HsFunTy{} -> hsType ctx t
         _ -> at ctx t recur
   HsTyVar _ promoted n -> promotion promoted n <> name ctx n
   HsAppTy _ f x ->
@@ -101,7 +86,7 @@
      in layoutFrom ctx (spanOf f <> spansOf args) . align $
           hsType ctx func
             <> breakOrSpace
-            <> indent (sepBy breakOrSpace (map (hsType ctx) args))
+            <> indent (sepBy breakOrSpace (fmap (hsType ctx) args))
   HsAppKindTy _ ty kd ->
     align (hsType ctx ty <> breakOrSpace <> indent (txt "@" <> hsType ctx kd))
   HsFunTy _ multAnn x y ->
@@ -112,16 +97,16 @@
       <> txt "->"
       <> betweenArgs
       <> case unLoc y of
-        HsFunTy {} -> recur (unLoc y)
+        HsFunTy{} -> recur (unLoc y)
         _ -> at ctx y recur
   HsListTy _ t ->
     layoutWithin ctx here (spanOf t) $
       brackets (insideBrackets here (hsType ctx t))
   HsTupleTy _ sort xs ->
     layoutWithin ctx here (spansOf xs) $
-      tupleBrackets sort (insideBrackets here (commaSep (map (align . hsType ctx) xs)))
+      tupleBrackets sort (insideBrackets here (commaSep (fmap (align . hsType ctx) xs)))
   HsSumTy _ xs ->
-    unboxed (sepBy (joinedBy "|") (map (align . hsType ctx) xs))
+    unboxed (sepBy (joinedBy "|") (fmap (align . hsType ctx) xs))
   HsOpTy _ _ x op y -> typeChain ctx x op y
   HsParTy _ t ->
     layoutWithin ctx here (spanOf t) (parens (insideBrackets here (hsType ctx t)))
@@ -134,10 +119,18 @@
   HsDocTy _ t str -> haddockInline ctx Pipe str <> hsType ctx t
   HsExplicitListTy _ promoted xs ->
     tick promoted
-      <> brackets (insideBrackets here (quoteGap promoted xs <> commaSep (map (align . hsType ctx) xs)))
+      <> brackets
+        ( insideBrackets
+            here
+            (quoteGap promoted xs <> commaSep (fmap (align . hsType ctx) xs))
+        )
   HsExplicitTupleTy _ promoted xs ->
     tick promoted
-      <> parens (insideBrackets here (quoteGap promoted xs <> commaSep (map (hsType ctx) xs)))
+      <> parens
+        ( insideBrackets
+            here
+            (quoteGap promoted xs <> commaSep (fmap (hsType ctx) xs))
+        )
   HsTyLit _ t -> case t of
     HsStrTy (SourceText s) _ -> stringLiteral s
     other -> outputable other
@@ -146,15 +139,10 @@
     HsCoreTy t -> outputable t
     HsBangTy _ (HsSrcBang _ unpacked strict) t ->
       unpackPragma unpacked <> strictness strict <> hsType ctx t
-    -- A bare record type has no wrapper of its own, so there is no span to
-    -- anchor a comment written inside empty braces to.
     HsRecTy _ fields -> recordFields ctx Nothing fields
   where
     recur = typeBody ctx documented Nothing
-    betweenArgs = if documented then hardBreak else breakOrSpace
-
-----------------------------------------------------------------------------
--- Operator chains
+    betweenArgs = if isTrue documented then hardBreak else breakOrSpace
 
 -- | A chain of type operators, regrouped by precedence.
 typeChain :: Ctx -> LHsType GhcPs -> LocatedN RdrName -> LHsType GhcPs -> Doc
@@ -166,6 +154,7 @@
       _ -> Nothing
     fixity o = operatorFixity ctx InTypes (unLoc o)
 
+-- | Print a chain of type operators once precedence has regrouped it.
 renderChain :: Ctx -> OpChain (LHsType GhcPs) (LocatedN RdrName) -> Doc
 renderChain ctx = \case
   Operand t -> hsType ctx t
@@ -173,29 +162,25 @@
     layoutFrom ctx (chainSpan spanOf chain) $
       renderChain ctx firstOne <> mconcat (zipWith piece operators rest)
   where
-    -- Type operators have no hanging form: no type absorbs a line break the
-    -- way a @do@ block does, so a broken chain always indents.
     piece op operand =
       attach Normal (name ctx op <> space <> renderChain ctx operand)
 
-----------------------------------------------------------------------------
--- Pieces of a type
-
 -- | Gather a nest of applications into a head and its arguments.
---
--- The tree is built one argument at a time, which would lay @F a b c@ out as
--- though each application were a separate decision. Collecting them first
--- lets the whole application break as one.
-gatherAppArgs :: LHsType GhcPs -> [LHsType GhcPs] -> (LHsType GhcPs, [LHsType GhcPs])
+gatherAppArgs ::
+  LHsType GhcPs ->
+  [LHsType GhcPs] ->
+  (LHsType GhcPs, [LHsType GhcPs])
 gatherAppArgs f known = case unLoc f of
   HsAppTy _ l r -> gatherAppArgs l (r : known)
   _ -> (f, known)
 
+-- | The brackets a tuple type is written with.
 tupleBrackets :: HsTupleSort -> Doc -> Doc
 tupleBrackets = \case
   HsUnboxedTuple -> unboxed
   HsBoxedOrConstraintTuple -> parens
 
+-- | The tick in front of a promoted list or tuple.
 tick :: PromotionFlag -> Doc
 tick = \case
   IsPromoted -> txt "'"
@@ -205,7 +190,8 @@
 -- with one, since @''@ is the spelling of a type-level quote.
 promotion :: PromotionFlag -> LocatedN RdrName -> Doc
 promotion NotPromoted _ = mempty
-promotion IsPromoted n = txt "'" <> includeWhen (beginsWithTick (showGhc (unLoc n))) space
+promotion IsPromoted n =
+  txt "'" <> includeWhen (beginsWithTick (showGhc (unLoc n))) space
   where
     beginsWithTick shown = case T.uncons (T.drop 1 shown) of
       Just ('\'', _) -> True
@@ -217,13 +203,14 @@
 quoteGap IsPromoted (t : _) | startsWithTick (unLoc t) = space
 quoteGap _ _ = mempty
 
+-- | Does this type begin with a tick of its own?
 startsWithTick :: HsType GhcPs -> Bool
 startsWithTick = \case
   HsAppTy _ (L _ f) _ -> startsWithTick f
   HsTyVar _ IsPromoted _ -> True
-  HsExplicitTupleTy {} -> True
-  HsExplicitListTy {} -> True
-  HsTyLit _ HsCharTy {} -> True
+  HsExplicitTupleTy{} -> True
+  HsExplicitListTy{} -> True
+  HsTyLit _ HsCharTy{} -> True
   _ -> False
 
 -- | The pragma asking for a field to be unpacked, or not to be.
@@ -245,7 +232,7 @@
 typeIsDocumented = any documented . spine
   where
     documented = \case
-      HsDocTy {} -> True
+      HsDocTy{} -> True
       _ -> False
 
 -- | The pieces of a type that a signature would put on lines of their own:
@@ -263,42 +250,30 @@
     HsQualTy _ _ b -> spine (unLoc b)
     _ -> []
 
-----------------------------------------------------------------------------
--- Contexts
-
 -- | A class context, as it appears before a @=>@.
 context :: Ctx -> LHsContext GhcPs -> Doc
-context ctx = at_ ctx (contextOf loneVariable (hsType ctx) . map unbracket)
-
--- | Is this constraint nothing but a type variable?
-loneVariable :: LHsType GhcPs -> Bool
-loneVariable t = case unLoc t of
-  HsTyVar _ _ (L _ n) -> isTvOcc (rdrNameOcc n)
-  _ -> False
-
--- | A constraint without the brackets a context puts around it anyway.
---
--- Stripped before the context writes its own, or formatting would add a
--- layer every time it ran.
-unbracket :: LHsType GhcPs -> LHsType GhcPs
-unbracket t = case unLoc t of
-  HsParTy _ inner -> unbracket inner
-  _ -> t
+context ctx = at_ ctx (contextOf loneVariable (hsType ctx) . fmap unbracket)
+  where
+    loneVariable t = case unLoc t of
+      HsTyVar _ _ (L _ n) -> isTvOcc (rdrNameOcc n)
+      _ -> False
+    unbracket t = case unLoc t of
+      HsParTy _ inner -> unbracket inner
+      _ -> t
 
 -- | A context over anything that can stand as a constraint.
 contextOf ::
   -- | Is this constraint nothing but a variable?
   (a -> Bool) ->
+  -- | How to print one.
   (a -> Doc) ->
+  -- | The constraints.
   [a] ->
   Doc
 contextOf lone render = \case
   [] -> txt "()"
   [x] | lone x -> render x
-  xs -> parens (commaSep (map (align . render) xs))
-
-----------------------------------------------------------------------------
--- Binders
+  xs -> parens (commaSep (fmap (align . render) xs))
 
 -- | The flags a type variable binder may carry.
 --
@@ -326,19 +301,15 @@
 
 -- | One type variable binder.
 tyVarBndr :: (TyVarBndrFlag flag) => Ctx -> HsTyVarBndr flag GhcPs -> Doc
-tyVarBndr ctx HsTvb {..} = flagPrefix tvb_flag <> enclosed (binder <> kind)
+tyVarBndr ctx HsTvb{..} = flagPrefix tvb_flag <> enclosed (binder <> kind)
   where
     binder = case tvb_var of
       HsBndrVar _ x -> name ctx x
       HsBndrWildCard _ -> txt "_"
-
-    -- Whether a kind is written and whether brackets are needed are the same
-    -- question, so they are answered together.
     (kind, kinded) = case tvb_kind of
       HsBndrNoKind _ -> (mempty, False)
       HsBndrKind _ k ->
         (joinedBy "::" <> indent (hsType ctx k), True)
-
     enclosed
       | flagIsInferred tvb_flag = braces
       | kinded = parens
@@ -355,9 +326,13 @@
 -- | The variables of a @forall@, with the punctuation that closes it.
 forallBndrs ::
   (HasLoc l) =>
+  -- | The context.
   Ctx ->
+  -- | Does it bind visibly?
   Visibility ->
+  -- | How to print one.
   (a -> Doc) ->
+  -- | The variables it binds.
   [GenLocated l a] ->
   Doc
 forallBndrs _ Invisible _ [] = txt "forall."
@@ -366,7 +341,7 @@
   layoutAcross ctx bndrs $
     txt "forall"
       <> breakOrSpace
-      <> indent (align (sepBy breakOrSpace (map (align . at_ ctx render) bndrs)) <> close)
+      <> indent (align (sepBy breakOrSpace (fmap (align . at_ ctx render) bndrs)) <> close)
   where
     close = case visibility of
       Invisible -> txt "."
@@ -384,20 +359,17 @@
   HsOuterImplicit _ -> mempty
   HsOuterExplicit _ bndrs -> forallTelescope ctx (mkHsForAllInvisTele noAnn bndrs)
 
-----------------------------------------------------------------------------
--- Signatures
-
 -- | A type together with whatever it quantifies over.
 hsSigType :: Ctx -> LHsSigType GhcPs -> Doc
 hsSigType ctx = at_ ctx (hsSigTypeBody ctx)
 
 -- | A signature type whose location the caller has already entered.
 hsSigTypeBody :: Ctx -> HsSigType GhcPs -> Doc
-hsSigTypeBody ctx HsSig {..} =
+hsSigTypeBody ctx HsSig{..} =
   outerBndrs ctx sig_bndrs
     <> ( case sig_bndrs of
-           HsOuterImplicit {} -> mempty
-           HsOuterExplicit {} -> afterBinders
+           HsOuterImplicit{} -> mempty
+           HsOuterExplicit{} -> afterBinders
        )
     <> hsType ctx sig_body
   where
@@ -406,9 +378,6 @@
       | otherwise = breakOrSpace
 
 -- | The @:: t@ that follows a name.
---
--- A signature with documentation in it breaks unconditionally, since a
--- Haddock on the first argument would otherwise take the @::@ with it.
 typeAscription :: Ctx -> LHsSigType GhcPs -> Doc
 typeAscription ctx sigType =
   indent (space <> txt "::" <> separator <> hsSigType ctx sigType)
@@ -421,56 +390,44 @@
 asSigType :: LHsType GhcPs -> LHsSigType GhcPs
 asSigType ty = L (getLoc ty) (HsSig NoExtField (HsOuterImplicit NoExtField) ty)
 
-----------------------------------------------------------------------------
--- Record fields
-
 -- | The braces of a record, and the fields inside them.
 recordFieldsAt :: Ctx -> XRec GhcPs [LHsConDeclRecField GhcPs] -> Doc
 recordFieldsAt ctx l = at ctx l (recordFields ctx (spanOf l))
 
 -- | The fields of a record.
---
--- A record with no fields still needs something between its braces for a
--- comment written there to attach to, or the comment would be pushed outside
--- them and end up documenting the constructor.
 recordFields :: Ctx -> Maybe Span -> [LHsConDeclRecField GhcPs] -> Doc
 recordFields ctx enclosing xs =
   brokenIfDocumented ctx xs . braces . insideBrackets enclosing $
-    commaSep (map (align . at_ ctx (recordField ctx)) xs)
+    commaSep (fmap (align . at_ ctx (recordField ctx)) xs)
 
+-- | One field of a record, documentation and multiplicity included.
 recordField :: Ctx -> HsConDeclRecField GhcPs -> Doc
-recordField ctx HsConDeclRecField {..} =
+recordField ctx HsConDeclRecField{..} =
   foldMap (haddockInline ctx Pipe) (cdf_doc cdrf_spec)
-    <> align (commaSep (map (at_ ctx (name ctx . foLabel)) cdrf_names))
+    <> align (commaSep (fmap (at_ ctx (name ctx . foLabel)) cdrf_names))
     <> space
     <> multiplicity (hsType ctx) (cdf_multiplicity cdrf_spec)
     <> joinedBy "::"
     <> align (indent (conDeclField ctx cdrf_spec))
 
 -- | A constructor field, without its documentation or its multiplicity.
---
--- Those two are left to the caller because there is no one place they
--- belong: a record field puts the multiplicity before the @::@ and a GADT
--- argument puts it before the arrow.
 conDeclField :: Ctx -> HsConDeclField GhcPs -> Doc
-conDeclField ctx CDF {..} =
+conDeclField ctx CDF{..} =
   unpackPragma cdf_unpack
-    <> at ctx cdf_type (\ty -> strictness cdf_bang <> hsTypeBody ctx (spanOf cdf_type) ty)
+    <> at
+      ctx
+      cdf_type
+      (\ty -> strictness cdf_bang <> hsTypeBody ctx (spanOf cdf_type) ty)
 
 -- | A constructor field with its documentation in front of it.
 documentedConDeclField :: Ctx -> HsConDeclField GhcPs -> Doc
 documentedConDeclField ctx cdf =
   foldMap (haddockInline ctx Pipe) (cdf_doc cdf) <> conDeclField ctx cdf
 
-----------------------------------------------------------------------------
--- Arguments
-
 -- | One argument on the left of a family or data instance.
 typeArgument :: Ctx -> LHsTypeArg GhcPs -> Doc
 typeArgument ctx = \case
   HsValArg NoExtField ty -> hsType ctx ty
-  -- The annotation holds the span of the @\@@, which is always immediately
-  -- in front of the type, so nothing is lost by not entering it.
   HsTypeArg _ ty -> txt "@" <> hsType ctx ty
   HsArgPar _ -> error "Tilia: HsArgPar is not expected in parsed source"
 
diff --git a/src/Tilia/Run.hs b/src/Tilia/Run.hs
--- a/src/Tilia/Run.hs
+++ b/src/Tilia/Run.hs
@@ -8,6 +8,7 @@
     declined,
     failed,
     differs,
+    failIfDeclined,
     exitCodeOf,
 
     -- * Execution
@@ -25,11 +26,7 @@
   )
 where
 
-import Control.Concurrent (forkIO, getNumCapabilities, newEmptyMVar, putMVar, takeMVar)
-import Control.Monad (replicateM)
 import Data.ByteString qualified as BS
-import Data.Foldable (for_, traverse_)
-import Data.IORef
 import Data.List (sortOn)
 import Data.Map.Strict qualified as Map
 import Data.Text (Text)
@@ -47,45 +44,48 @@
   )
 import Tilia.Newline (NewlineStyle (Lf), getNewlineStyle, setNewlineStyle)
 import Tilia.Palette (Color (Bad, Good, Middling, Place), Palette, marker, paint)
-import Tilia.Utils (attempted, indent, lineWidth, wrapTo)
+import Tilia.Utils (attempted, inParallel, indent, lineWidth, wrapTo)
 
 ----------------------------------------------------------------------------
 -- Outcomes
 
 -- | What became of one file.
 data Outcome
-  = -- | Formatted, and it was already in that shape.
+  = -- | The file did not need to change.
     Unchanged
-  | -- | Formatted, and this is what it should say instead.
+  | -- | The file got formatted, the arguments are texts before and after.
     Changed Text Text
   | -- | Declined.
     Declined FormatError
   | -- | Failed to format.
     Failed FormatError
 
--- | Was the file left alone because we would not touch it?
+-- | Was the file declined?
 declined :: Outcome -> Bool
 declined = \case
-  Declined {} -> True
+  Declined{} -> True
   _ -> False
 
--- | Was the file left alone because something is wrong with it?
+-- | Did the file fail to format?
 failed :: Outcome -> Bool
 failed = \case
-  Failed {} -> True
+  Failed{} -> True
   _ -> False
 
 -- | Would formatting change the file?
 differs :: Outcome -> Bool
 differs = \case
-  Changed {} -> True
+  Changed{} -> True
   _ -> False
 
--- | What a run that met a failure should exit with.
---
--- 'Nothing' where nothing failed. Where several did, the lowest of their
--- codes: they are all true, and one of them has to be picked, so it may as
--- well be picked the same way every time.
+-- | Count a declined file as failed.
+failIfDeclined :: Outcome -> Outcome
+failIfDeclined = \case
+  Declined e -> Failed e
+  outcome -> outcome
+
+-- | Determine the exit code based on the set of outcomes. 'Nothing' means
+-- success.
 exitCodeOf :: [(FilePath, Outcome)] -> Maybe Int
 exitCodeOf outcomes =
   case [formatErrorExitCode e | (_, Failed e) <- outcomes] of
@@ -120,9 +120,9 @@
 
 -- | Formatting outcome for a file.
 formattingOutcome ::
-  -- | The file, as it is
+  -- | The file, as it is.
   Text ->
-  -- | Its formatted text, in newlines
+  -- | Its formatted text, in newlines.
   Text ->
   Outcome
 formattingOutcome before formatted
@@ -137,24 +137,6 @@
   Changed _ after -> BS.writeFile path (T.encodeUtf8 after)
   _ -> pure ()
 
--- | Run an action over every element at once, as far as the machine allows.
-inParallel :: (a -> IO b) -> [a] -> IO [b]
-inParallel act xs = do
-  capabilities <- getNumCapabilities
-  queue <- newIORef (zip [0 :: Int ..] xs)
-  answers <- newIORef Map.empty
-  let worker =
-        atomicModifyIORef' queue (\case [] -> ([], Nothing); (y : ys) -> (ys, Just y)) >>= \case
-          Nothing -> pure ()
-          Just (i, x) -> do
-            y <- act x
-            atomicModifyIORef' answers (\m -> (Map.insert i y m, ()))
-            worker
-  done <- replicateM (max 1 (min capabilities (length xs))) newEmptyMVar
-  for_ done $ \signal -> forkIO (worker >> putMVar signal ())
-  traverse_ takeMVar done
-  Map.elems <$> readIORef answers
-
 ----------------------------------------------------------------------------
 -- Report
 
@@ -213,24 +195,36 @@
 -- | One line per extension, for the files a test picks out.
 tally ::
   Palette ->
-  -- | The mark to set the line under, and the color to set it in
+  -- | The mark to set the line under, and the color to set it in.
   (Text, Color) ->
-  -- | What became of the files being counted
+  -- | What became of the files being counted.
   Text ->
+  -- | Which outcomes to count.
   (Outcome -> Bool) ->
+  -- | Every file of the run, and what became of it.
   [(FilePath, Outcome)] ->
   [Text]
 tally palette (mark, color) what wanted outcomes =
-  [ indent 1 <> marker palette color mark <> " " <> what <> " " <> count palette n extension
+  [ indent 1
+      <> marker palette color mark
+      <> " "
+      <> what
+      <> " "
+      <> count palette n extension
   | (extension, n) <- countedBy (wanted . snd) outcomes
   ]
 
 -- | How many files of each extension, among the ones a test picks out.
-countedBy :: ((FilePath, Outcome) -> Bool) -> [(FilePath, Outcome)] -> [(Text, Int)]
+countedBy ::
+  -- | Which files to count.
+  ((FilePath, Outcome) -> Bool) ->
+  -- | Every file of the run, and what became of it.
+  [(FilePath, Outcome)] ->
+  [(Text, Int)]
 countedBy wanted =
   Map.toList
     . Map.fromListWith (+)
-    . map (\(path, _) -> (T.pack (takeExtension path), 1 :: Int))
+    . fmap (\(path, _) -> (T.pack (takeExtension path), 1 :: Int))
     . filter wanted
 
 -- | Render the number of files.
@@ -246,12 +240,12 @@
 bulleted palette e = case wrapTo (lineWidth - 6) (describeFormatError palette e) of
   [] -> []
   (opening : rest) ->
-    (indent 2 <> "· " <> opening) : map (indent 3 <>) rest
+    (indent 2 <> "· " <> opening) : fmap (indent 3 <>) rest
 
 -- | Something to say under a mark of its own, wrapped to fit beneath it.
 noted ::
   Palette ->
-  -- | The mark to set it under, and the color to set that in
+  -- | The mark to set it under, and the color to set that in.
   (Text, Color) ->
   Text ->
   [Text]
@@ -259,4 +253,4 @@
   [] -> []
   (opening : rest) ->
     (indent 1 <> marker palette color mark <> " " <> opening)
-      : map (indent 3 <>) rest
+      : fmap (indent 3 <>) rest
diff --git a/src/Tilia/Source.hs b/src/Tilia/Source.hs
--- a/src/Tilia/Source.hs
+++ b/src/Tilia/Source.hs
@@ -1,11 +1,4 @@
 -- | The module as its author wrote it.
---
--- Almost everything the formatter decides about layout is a question about
--- the source: what is on the line above a comment, whether two constructs
--- had an empty line between them, whether a directive stands between a
--- comment and the pragma under it. All these questions are asked in a
--- single place here, or in "Tilia.Source.Lines" for the ones that can be
--- asked before the module has been parsed.
 module Tilia.Source
   ( -- * The source
     SourceType (..),
@@ -23,7 +16,8 @@
     blankAt,
     blankBelow,
     closesABranch,
-    directiveAt,
+    directivePresentOnLine,
+    directiveOnLine,
 
     -- * Its comments
     comments,
@@ -56,11 +50,11 @@
 
 -- | Read a module's source.
 sourceOf ::
-  -- | The lines of the module, as this configuration has them
+  -- | The lines of the module, as this configuration has them.
   Lines ->
   -- | Comments the syntax tree does not carry. See 'commentsOf'.
   [LEpaComment] ->
-  -- | The result of parsing
+  -- | The result of parsing.
   HsModule GhcPs ->
   Source
 sourceOf ls loose hsModule =
diff --git a/src/Tilia/Source/Lines.hs b/src/Tilia/Source/Lines.hs
--- a/src/Tilia/Source/Lines.hs
+++ b/src/Tilia/Source/Lines.hs
@@ -2,12 +2,6 @@
 
 -- | The lines of a module, and the questions that can be asked of them
 -- without a parse.
---
--- Apart from "Tilia.Source" because a 'Tilia.Source.Source' cannot be had
--- until the module has been parsed, and two things need these answers
--- earlier than that: the preprocessor support, which asks what the author
--- wrote on a line while it is still deciding what to hand the parser, and
--- the comment machinery, which "Tilia.Source" itself is built on top of.
 module Tilia.Source.Lines
   ( -- * The lines
     Written (..),
@@ -17,7 +11,8 @@
     lineTexts,
     lineAt,
     blankAt,
-    directiveAt,
+    directivePresentOnLine,
+    directiveOnLine,
     blankBelow,
     closesABranch,
   )
@@ -28,6 +23,7 @@
 import Data.IntMap.Strict qualified as IntMap
 import Data.IntSet (IntSet)
 import Data.IntSet qualified as IntSet
+import Data.Maybe (isJust)
 import Data.Text (Text)
 import Data.Text qualified as T
 
@@ -81,14 +77,19 @@
 blankAt n = maybe False (T.all isSpace) . lineAt n
 
 -- | Does this line hold a preprocessor directive?
-directiveAt :: Int -> Lines -> Bool
-directiveAt n = maybe False opensWithHash . lineAt n
-  where
-    opensWithHash l = case T.uncons (T.stripStart l) of
-      Just ('#', rest) ->
-        maybe False (isAsciiLower . fst) (T.uncons (T.stripStart rest))
-      _ -> False
+directivePresentOnLine :: Int -> Lines -> Bool
+directivePresentOnLine n ls = isJust (directiveOnLine =<< lineAt n ls)
 
+-- | The keyword a directive line opens with, and everything after its @#@.
+directiveOnLine :: Text -> Maybe (Text, Text)
+directiveOnLine l = case T.uncons (T.stripStart l) of
+  Just ('#', rest)
+    | not (T.null keyword) -> Just (keyword, body)
+    where
+      body = T.stripStart rest
+      keyword = T.takeWhile isAsciiLower body
+  _ -> Nothing
+
 -- | Did the author leave an empty line below this line?
 blankBelow :: Int -> Lines -> Bool
 blankBelow start ls = go (start + 1)
@@ -98,10 +99,9 @@
       | Nothing <- lineAt n ls = go (n + 1)
       | leadsOut n = go (n + 1)
       | otherwise = blankAt n ls
-    leadsOut n = case lineAt n ls of
-      Just l | directiveAt n ls -> keywordOf l `elem` leavingKeywords
-      _ -> False
-    keywordOf l = T.takeWhile isAsciiLower (T.stripStart (T.drop 1 (T.stripStart l)))
+    leadsOut n = case directiveOnLine =<< lineAt n ls of
+      Just (keyword, _) -> keyword `elem` leavingKeywords
+      Nothing -> False
 
 -- | Does the empty line under this one stand at the end of a branch?
 closesABranch :: Int -> Lines -> Bool
@@ -113,9 +113,9 @@
           Nothing -> go crossed (k + 1)
           Just l
             | T.null (T.strip l) -> go True (k + 1)
-            | directiveAt k ls -> crossed && keywordOf l `elem` leavingKeywords
+            | Just (keyword, _) <- directiveOnLine l ->
+                crossed && keyword `elem` leavingKeywords
             | otherwise -> False
-    keywordOf l = T.takeWhile isAsciiLower (T.stripStart (T.drop 1 (T.stripStart l)))
 
 -- | The directives that lead out of the region the line below them is in,
 -- rather than into one it is not.
diff --git a/src/Tilia/Span.hs b/src/Tilia/Span.hs
--- a/src/Tilia/Span.hs
+++ b/src/Tilia/Span.hs
@@ -1,30 +1,14 @@
 -- | Regions of the input, and the questions asked about them.
---
--- Deliberately not GHC's @RealSrcSpan@. Almost everything here wants to ask
--- one of a handful of questions—did this occupy a single line, did that
--- begin on the line this ended on, was there an empty line between them—and
--- a type of our own keeps the modules that ask them free of the compiler's
--- libraries. Conversion happens at the edge, in "Tilia.Span.Ghc", which is
--- the only place that has to know what GHC's positions look like.
 module Tilia.Span
-  ( -- * Spans
-    Span (..),
+  ( Span (..),
     mkSpan,
-
-    -- * Asking about one
     isSingleLine,
-
-    -- * Asking about two
     sameLine,
     blankBetween,
     meets,
     covers,
-
-    -- * Narrowing
     startOf,
     endOf,
-
-    -- * Positions
     startPoint,
     endPoint,
   )
@@ -44,10 +28,6 @@
 mkSpan (sl, sc) (el, ec) = Span sl sc el ec
 
 -- | The smallest span covering both arguments.
---
--- Printing code needs this often enough—a construct the syntax tree has no
--- single node for still has to be laid out as a unit—that it is worth having
--- as an instance rather than as a function each caller reimplements.
 instance Semigroup Span where
   a <> b =
     Span
@@ -64,16 +44,10 @@
       }
 
 -- | Did this occupy a single line of the input?
---
--- The question the whole formatter turns on: what was written on one line
--- stays on one line, and what was spread out stays spread out.
 isSingleLine :: Span -> Bool
 isSingleLine s = spanStartLine s == spanEndLine s
 
 -- | Did the second thing begin on the line the first thing ended on?
---
--- This is the question behind almost every hanging decision: a body may only
--- hang off what precedes it when the author had them starting together.
 sameLine :: Maybe Span -> Maybe Span -> Bool
 sameLine (Just a) (Just b) = spanEndLine a == spanStartLine b
 sameLine _ _ = False
@@ -85,16 +59,13 @@
 
 -- | Do the two cover any of the same input?
 --
--- Touching counts: a span ending where the next begins shares that position,
--- and the callers that ask this are asking whether the two are looking at
--- one thing, not whether either strictly contains the other.
+-- Touching counts: a span ending where the next begins shares that
+-- position, and the callers that ask this are asking whether the two are
+-- looking at one thing, not whether either strictly contains the other.
 meets :: Span -> Span -> Bool
 meets a b = startPoint a <= endPoint b && startPoint b <= endPoint a
 
 -- | Does the first cover all of the second?
---
--- Reflexive, so a span covers itself. Callers wanting one thing to be
--- strictly inside another want this and inequality.
 covers :: Span -> Span -> Bool
 covers a b = startPoint a <= startPoint b && endPoint b <= endPoint a
 
@@ -106,6 +77,7 @@
 endOf :: Span -> Span
 endOf s = at (spanEndLine s, spanEndColumn s)
 
+-- | A zero-width span at the given position.
 at :: (Int, Int) -> Span
 at position = mkSpan position position
 
diff --git a/src/Tilia/Target.hs b/src/Tilia/Target.hs
deleted file mode 100644
--- a/src/Tilia/Target.hs
+++ /dev/null
@@ -1,352 +0,0 @@
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Working out which files a run was asked to format.
-module Tilia.Target
-  ( Target (..),
-    Kind (..),
-    parseTarget,
-    Component (..),
-    TargetProblem (..),
-    describeTargetProblem,
-    componentsOfTarget,
-    componentInPlan,
-    filesOfComponents,
-  )
-where
-
-import Control.Monad (filterM)
-import Data.ByteString qualified as BS
-import Data.ByteString.Char8 qualified as BS8
-import Data.Char (toLower)
-import Data.List (isPrefixOf, isSuffixOf, sort)
-import Data.List.NonEmpty qualified as NE
-import Data.Set qualified as Set
-import Data.Text (Text)
-import Data.Text qualified as T
-import Data.Text.Encoding qualified as T
-import Distribution.Fields.Field (Field (..), FieldLine (..), Name (..))
-import Distribution.Fields.ParseResult (runParseResult)
-import Distribution.Fields.Parser (readFields)
-import Distribution.PackageDescription
-  ( Benchmark (..),
-    BuildInfo (..),
-    CondTree (..),
-    Executable (..),
-    GenericPackageDescription (..),
-    Library (..),
-    PackageDescription (..),
-    TestSuite (..),
-    unPackageName,
-    unUnqualComponentName,
-  )
-import Distribution.PackageDescription.Parsec (parseGenericPackageDescription)
-import Distribution.Parsec (showPError)
-import Distribution.Types.PackageId (PackageIdentifier (..))
-import Distribution.Utils.Path (getSymbolicPath)
-import System.Directory
-  ( doesDirectoryExist,
-    doesFileExist,
-    listDirectory,
-  )
-import System.FilePath (normalise, takeDirectory, takeExtension, (</>))
-import Tilia.Fixity.Plan (PlanComponent (..))
-import Tilia.Project (Marker (..), ProjectRoot (..), markerFile)
-import Tilia.Utils (attempted, quietly)
-
--- | Which components a run was asked for.
-data Target
-  = -- | @all@, or nothing given at all: every component of every package.
-    Everything
-  | -- | One bare word, which may name a package or a component.
-    Called Text
-  | -- | @kind:name@, or @package:kind:name@.
-    Qualified (Maybe Text) Kind Text
-  deriving (Eq, Show)
-
--- | The kinds of component a @.cabal@ file can declare.
-data Kind = Lib | Exe | Test | Bench
-  deriving (Eq, Ord, Show)
-
--- | Read a target as it was written on the command line.
-parseTarget :: String -> Either Text Target
-parseTarget written = case T.splitOn ":" (T.strip (T.pack written)) of
-  [""] -> Left "an empty target"
-  ["all"] -> Right Everything
-  [one] -> Right (Called one)
-  [k, name] | Just kind <- kindNamed k -> Right (Qualified Nothing kind name)
-  [package, k, name] | Just kind <- kindNamed k -> Right (Qualified (Just package) kind name)
-  _ -> Left unrecognised
-  where
-    unrecognised =
-      "unrecognised target "
-        <> T.pack (show written)
-        <> ": expected all, a package or component name, or one of\
-           \ lib:, exe:, test:, bench: followed by a name"
-    kindNamed = \case
-      "lib" -> Just Lib
-      "exe" -> Just Exe
-      "test" -> Just Test
-      "bench" -> Just Bench
-      "benchmark" -> Just Bench
-      _ -> Nothing
-
--- | Does a target ask for this component?
-targetSelectsComponent :: Target -> Component -> Bool
-targetSelectsComponent target c = case target of
-  Everything -> True
-  Called name -> name == componentName c || name == componentPackage c
-  Qualified package kind name ->
-    all (== componentPackage c) package
-      && kind == componentKind c
-      && name == componentName c
-
--- | One component of one package, as far as formatting cares.
-data Component = Component
-  { -- | The package it belongs to.
-    componentPackage :: Text,
-    -- | Which kind it is.
-    componentKind :: Kind,
-    -- | Its name, which for a library is the package's own.
-    componentName :: Text,
-    -- | The directory its @.cabal@ file sits in.
-    componentRoot :: FilePath,
-    -- | Its @hs-source-dirs@, relative to 'componentRoot'.
-    componentDirs :: [FilePath]
-  }
-  deriving (Eq, Show)
-
--- | Why a run could not work out what to format.
-data TargetProblem
-  = -- | A @cabal.project@ naming packages, none of which could be found.
-    NoPackages FilePath
-  | -- | A @.cabal@ file that would not parse, and what the parser said.
-    Unparseable FilePath [Text]
-  | -- | A target naming no component the project holds.
-    NoSuchTarget Text [Text]
-  deriving (Eq, Show)
-
--- | Say what went wrong, in one line.
-describeTargetProblem :: TargetProblem -> Text
-describeTargetProblem = \case
-  NoPackages file ->
-    T.pack file <> " names no packages that exist"
-  Unparseable file complaints ->
-    T.pack file <> " does not parse:" <> foldMap ("\n  " <>) complaints
-  NoSuchTarget asked available ->
-    "no component matches "
-      <> asked
-      <> ", and the targets this project takes are"
-      <> foldMap ("\n  " <>) ("all" : available)
-
--- | Every component of the project that the target asks for.
-componentsOfTarget :: ProjectRoot -> Target -> IO (Either TargetProblem [Component])
-componentsOfTarget root target = do
-  files <- packageFilesOf root
-  if null files
-    then pure (Left (NoPackages (prPath root </> markerFile (prMarker root))))
-    else
-      traverse componentsInCabalFile files >>= \case
-        results
-          | (problem : _) <- [p | Left p <- results] -> pure (Left problem)
-          | otherwise -> do
-              let found = concat [cs | Right cs <- results]
-              pure $ case filter (targetSelectsComponent target) found of
-                [] | Everything <- target -> Right []
-                [] -> Left (NoSuchTarget (spellTarget target) (map spellComponent found))
-                wanted -> Right wanted
-
--- | How a component would have to be named to be asked for on its own.
-spellComponent :: Component -> Text
-spellComponent c =
-  componentPackage c
-    <> ":"
-    <> spellKind (componentKind c)
-    <> ":"
-    <> componentName c
-
--- | How a build plan names this component.
---
--- A plan writes a library as @lib@ and everything else as its kind and
--- name, which is not quite how a target is written: see 'spellComponent'.
-componentInPlan :: Component -> PlanComponent
-componentInPlan c =
-  PlanComponent
-    { pcPackage = componentPackage c,
-      pcName = case componentKind c of
-        Lib -> "lib"
-        kind -> spellKind kind <> ":" <> componentName c
-    }
-
--- | Render 'Kind' the way it would be accepted on the command line.
-spellKind :: Kind -> Text
-spellKind = \case
-  Lib -> "lib"
-  Exe -> "exe"
-  Test -> "test"
-  Bench -> "bench"
-
--- | A target, written the way it would have been given.
-spellTarget :: Target -> Text
-spellTarget = \case
-  Everything -> "all"
-  Called name -> name
-  Qualified package kind name ->
-    T.intercalate ":" (foldMap pure package <> [spellKind kind, name])
-
--- | Every Haskell file in a component, in a settled order.
-filesOfComponent :: Component -> IO [FilePath]
-filesOfComponent c =
-  sort . Set.toList . Set.fromList . map normalise . concat
-    <$> traverse (walk . (componentRoot c </>)) (componentDirs c)
-  where
-    walk directory =
-      quietly [] $
-        doesDirectoryExist directory >>= \case
-          False -> pure []
-          True -> do
-            entries <- listDirectory directory
-            concat <$> traverse (below directory) (sort entries)
-    below directory entry
-      | "." `isPrefixOf` entry = pure []
-      | entry == "dist-newstyle" = pure []
-      | otherwise = do
-          let path = directory </> entry
-          isDirectory <- quietly False (doesDirectoryExist path)
-          if isDirectory
-            then walk path
-            else pure [path | takeExtension path `elem` formattableFileExtensions]
-
--- | Every Haskell file a set of components holds, each named once.
-filesOfComponents :: [Component] -> IO [FilePath]
-filesOfComponents components =
-  sort . Set.toList . Set.fromList . concat <$> traverse filesOfComponent components
-
--- | The extensions a Haskell source file can have.
-formattableFileExtensions :: [String]
-formattableFileExtensions = [".hs", ".hs-boot", ".hsig"]
-
--- | The @.cabal@ files the project is made of.
---
--- A @cabal.project@ names them, possibly through globs; anything else means
--- the marker found by the walk upwards is itself the only package.
-packageFilesOf :: ProjectRoot -> IO [FilePath]
-packageFilesOf root = case prMarker root of
-  PackageFile named -> pure [prPath root </> named]
-  ProjectFile -> do
-    contents <-
-      quietly BS.empty (BS.readFile (prPath root </> "cabal.project"))
-    found <-
-      traverse
-        (packageToCabalFile (prPath root))
-        (packagesInCabalProjectContents contents)
-    pure (Set.toList (Set.fromList (concat found)))
-
--- | The entries of a @cabal.project@'s @packages@ field.
-packagesInCabalProjectContents :: BS.ByteString -> [Text]
-packagesInCabalProjectContents contents = case readFields contents of
-  Left _ -> []
-  Right fields -> concatMap entries (packagesIn fields)
-  where
-    packagesIn = concatMap $ \case
-      Field (Name _ name) ls
-        | BS8.map toLower name == "packages" ->
-            [T.unwords [T.decodeUtf8Lenient value | FieldLine _ value <- ls]]
-        | otherwise -> []
-      Section _ _ inner -> packagesIn inner
-
-    entries = filter (not . T.null) . map T.strip . concatMap (T.split (== ',')) . T.words
-
--- | Turn one entry of a @packages@ field into the @.cabal@ files it names.
-packageToCabalFile :: FilePath -> Text -> IO [FilePath]
-packageToCabalFile root entry = do
-  paths <-
-    packageGlobToCabalFiles
-      root
-      (map T.unpack (T.split (== '/') (T.dropWhile (== '.') stripped)))
-  concat <$> traverse asPackage paths
-  where
-    stripped = T.dropWhile (== '/') (T.strip entry)
-    asPackage path
-      | ".cabal" `isSuffixOf` path = do
-          there <- quietly False (doesFileExist path)
-          pure [path | there]
-      | otherwise = cabalFilesIn path
-
--- | Resolve a path whose components may contain @*@.
-packageGlobToCabalFiles :: FilePath -> [String] -> IO [FilePath]
-packageGlobToCabalFiles here = \case
-  [] -> pure [here]
-  ("" : rest) -> packageGlobToCabalFiles here rest
-  ("." : rest) -> packageGlobToCabalFiles here rest
-  (component : rest)
-    | '*' `elem` component -> do
-        entries <- quietly [] (listDirectory here)
-        concat
-          <$> traverse
-            (\e -> packageGlobToCabalFiles (here </> e) rest)
-            (sort (filter (globMatching component) entries))
-    | otherwise -> packageGlobToCabalFiles (here </> component) rest
-
--- | Does a name match a pattern with @*@ in it?
-globMatching :: String -> String -> Bool
-globMatching pattern name = case break (== '*') pattern of
-  (before, []) -> before == name
-  (before, _ : after) ->
-    before `isPrefixOf` name
-      && after `isSuffixOf` drop (length before) name
-
--- | The @.cabal@ files sitting directly in a directory.
-cabalFilesIn :: FilePath -> IO [FilePath]
-cabalFilesIn directory = quietly [] $ do
-  entries <- listDirectory directory
-  let named = sort (filter (".cabal" `isSuffixOf`) entries)
-  filterM doesFileExist (map (directory </>) named)
-
--- | Every component one @.cabal@ file declares.
-componentsInCabalFile :: FilePath -> IO (Either TargetProblem [Component])
-componentsInCabalFile cabalFile =
-  attempted (BS.readFile cabalFile) >>= \case
-    Left why -> pure (Left (Unparseable cabalFile [why]))
-    Right bytes ->
-      case snd (runParseResult (parseGenericPackageDescription bytes)) of
-        Left (_, complaints) ->
-          pure (Left (Unparseable cabalFile (map said (NE.toList complaints))))
-          where
-            said = T.pack . showPError cabalFile
-        Right described ->
-          pure (Right (declaredComponents (takeDirectory cabalFile) described))
-
--- | The components of a parsed @.cabal@ file, in the order declared.
-declaredComponents :: FilePath -> GenericPackageDescription -> [Component]
-declaredComponents root described =
-  concat
-    [ foldMap (pure . made Lib package . libBuildInfo . condTreeData) (condLibrary described),
-      [ made Lib (nameOf n) (libBuildInfo (condTreeData t))
-      | (n, t) <- condSubLibraries described
-      ],
-      [ made Exe (nameOf n) (buildInfo (condTreeData t))
-      | (n, t) <- condExecutables described
-      ],
-      [ made Test (nameOf n) (testBuildInfo (condTreeData t))
-      | (n, t) <- condTestSuites described
-      ],
-      [ made Bench (nameOf n) (benchmarkBuildInfo (condTreeData t))
-      | (n, t) <- condBenchmarks described
-      ]
-    ]
-  where
-    package =
-      T.pack (unPackageName (pkgName (package' described)))
-    package' = Distribution.PackageDescription.package . packageDescription
-    nameOf = T.pack . unUnqualComponentName
-    made kind name bi =
-      Component
-        { componentPackage = package,
-          componentKind = kind,
-          componentName = name,
-          componentRoot = root,
-          componentDirs = case map getSymbolicPath (hsSourceDirs bi) of
-            [] -> ["."]
-            ds -> ds
-        }
diff --git a/src/Tilia/Utils.hs b/src/Tilia/Utils.hs
--- a/src/Tilia/Utils.hs
+++ b/src/Tilia/Utils.hs
@@ -10,13 +10,30 @@
     indent,
     wrapTo,
     visibleLength,
+    tshow,
+    inParallel,
   )
 where
 
+import Control.Concurrent
+  ( forkIO,
+    getNumCapabilities,
+    newEmptyMVar,
+    putMVar,
+    takeMVar,
+  )
 import Control.Exception (SomeException, displayException, try)
+import Control.Monad (replicateM)
+import Data.Foldable (for_, traverse_)
+import Data.IORef (atomicModifyIORef', newIORef, readIORef)
+import Data.Map.Strict qualified as Map
 import Data.Text (Text)
 import Data.Text qualified as T
 
+-- | 'show' a value and take the result as 'Text'.
+tshow :: (Show a) => a -> Text
+tshow = T.pack . show
+
 -- | Run an action, falling back on the given value if it throws.
 quietly :: a -> IO a -> IO a
 quietly fallback action =
@@ -24,18 +41,19 @@
     Left (_ :: SomeException) -> pure fallback
     Right a -> pure a
 
--- | Run an action, keeping what it threw rather than a fallback.
+-- | Run an action and return its result or the exception it threw rendered
+-- as 'Text'.
 attempted :: IO a -> IO (Either Text a)
 attempted action =
   try action >>= \case
     Left (e :: SomeException) -> pure (Left (T.pack (displayException e)))
     Right a -> pure (Right a)
 
--- | The widest line this program will print of its own accord.
+-- | The line width for the terminal output of this program.
 lineWidth :: Int
 lineWidth = 76
 
--- | Two spaces per level, which is what everything here is set in.
+-- | Indentation for the terminal output.
 indent :: Int -> Text
 indent level = T.replicate (2 * level) " "
 
@@ -46,7 +64,8 @@
     go [] = []
     go (w : ws) = let (line, rest) = fill w ws in line : go rest
     fill line (w : ws)
-      | visibleLength line + 1 + visibleLength w <= room = fill (line <> " " <> w) ws
+      | visibleLength line + 1 + visibleLength w <= room =
+          fill (line <> " " <> w) ws
     fill line ws = (line, ws)
 
 -- | How wide a piece of text is once printed.
@@ -56,5 +75,27 @@
     go !n t = case T.uncons t of
       Nothing -> n
       Just ('\ESC', rest)
-        | Just after <- T.stripPrefix "[" rest -> go n (T.drop 1 (T.dropWhile (/= 'm') after))
+        | Just after <- T.stripPrefix "[" rest ->
+            go n (T.drop 1 (T.dropWhile (/= 'm') after))
       Just (_, rest) -> go (n + 1) rest
+
+-- | Run an action over every element at once, as far as the machine allows.
+inParallel :: (a -> IO b) -> [a] -> IO [b]
+inParallel act xs = do
+  capabilities <- getNumCapabilities
+  queue <- newIORef (zip [0 :: Int ..] xs)
+  answers <- newIORef Map.empty
+  let worker =
+        atomicModifyIORef'
+          queue
+          (\case [] -> ([], Nothing); (y : ys) -> (ys, Just y))
+          >>= \case
+            Nothing -> pure ()
+            Just (i, x) -> do
+              y <- act x
+              atomicModifyIORef' answers (\m -> (Map.insert i y m, ()))
+              worker
+  done <- replicateM (max 1 (min capabilities (length xs))) newEmptyMVar
+  for_ done $ \signal -> forkIO (worker >> putMVar signal ())
+  traverse_ takeMVar done
+  Map.elems <$> readIORef answers
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -25,7 +25,7 @@
   shardFrom <$> lookupEnv "TILIA_SHARD" >>= \case
     Everything -> Spec.main
     Share i n ->
-      hspecWith defaultConfig {configFilterPredicate = Just (taking i n)} Spec.spec
+      hspecWith defaultConfig{configFilterPredicate = Just (taking i n)} Spec.spec
 
 -- | Which share of the suite a run is for.
 data Shard
@@ -77,6 +77,7 @@
 compilerBound :: [String]
 compilerBound =
   [ "Tilia.Fixity.Dependencies",
+    "Tilia.Fixity.HiFile",
     "Tilia.Fixity.PackageDb",
     "Tilia.Fixity.Plan"
   ]
diff --git a/tests/Tilia/Cabal/PackageSpec.hs b/tests/Tilia/Cabal/PackageSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Tilia/Cabal/PackageSpec.hs
@@ -0,0 +1,294 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Information obtained from @.cabal@ files.
+module Tilia.Cabal.PackageSpec (spec) where
+
+import Data.List (isSuffixOf, sort)
+import Data.Text (Text)
+import Data.Text qualified as T
+import Data.Text.IO qualified as T
+import GHC.LanguageExtensions.Type (Extension (..))
+import System.Directory (createDirectoryIfMissing, removeFile)
+import System.FilePath ((</>))
+import System.IO.Temp (withSystemTempDirectory)
+import Test.Hspec
+import Tilia.Cabal.Package (PackageProblem (..), newPackageReader)
+
+spec :: Spec
+spec = do
+  describe "the component a file belongs to" $ do
+    it "is the one whose source directory holds it" $
+      inPackage twoComponents ["src", "test"] $ \root -> do
+        library <- asked (root </> "src" </> "M.hs")
+        suite <- asked (root </> "test" </> "S.hs")
+        (has ImportQualifiedPost library, has ImportQualifiedPost suite)
+          `shouldBe` (True, False)
+
+    it "settles the extensions separately for each" $
+      inPackage twoComponents ["src", "test"] $ \root -> do
+        library <- asked (root </> "src" </> "M.hs")
+        suite <- asked (root </> "test" </> "S.hs")
+        (has OverloadedStrings library, has OverloadedStrings suite)
+          `shouldBe` (False, True)
+
+    it "is none of them when the file is outside every source directory" $
+      inPackage twoComponents ["src", "test", "scratch"] $ \root ->
+        (unclaimed <$> asked (root </> "scratch" </> "X.hs"))
+          `shouldReturn` True
+
+    it "is the package's own directory when it names no source directory" $
+      inPackage besideTheCabalFile [] $ \root ->
+        (has ImportQualifiedPost <$> asked (root </> "M.hs"))
+          `shouldReturn` True
+
+    it "is the nearer one when a wider component covers it as well" $
+      inPackage overTheWholeTree ["tests"] $ \root ->
+        (has ImportQualifiedPost <$> asked (root </> "tests" </> "S.hs"))
+          `shouldReturn` True
+
+    it "is still the wider one for a file only it covers" $
+      inPackage overTheWholeTree ["tests"] $ \root ->
+        (has ImportQualifiedPost <$> asked (root </> "M.hs"))
+          `shouldReturn` False
+
+    it "prefers the component that names a module in a shared source directory" $
+      inPackage sharedTests ["tests"] $ \root -> do
+        unit <- asked (root </> "tests" </> "Unit.hs")
+        driver <- asked (root </> "tests" </> "Doctests.hs")
+        (has BangPatterns unit, has BangPatterns driver) `shouldBe` (True, False)
+
+    it "inherits settings in conditional source directories" $
+      inPackage conditionalLibrary ["src", "new"] $ \root ->
+        (has BangPatterns <$> asked (root </> "new" </> "M.hs"))
+          `shouldReturn` True
+
+  describe "the setup script" $ do
+    it "takes the compiler's defaults, not those of a component around it" $
+      inPackage aroundTheSetupScript [] $ \root -> do
+        library <- asked (root </> "M.hs")
+        setup <- asked (root </> "Setup.hs")
+        (has OverloadedStrings library, has OverloadedStrings setup)
+          `shouldBe` (True, False)
+        (has ImportQualifiedPost library, has ImportQualifiedPost setup)
+          `shouldBe` (False, True)
+
+    it "is settled when no component covers it" $
+      inPackage twoComponents ["src", "test"] $ \root ->
+        (has ImportQualifiedPost <$> asked (root </> "Setup.hs"))
+          `shouldReturn` True
+
+  describe "the extensions a component puts in force" $ do
+    it "are the language edition's" $
+      inPackage twoComponents ["src"] $ \root -> do
+        library <- asked (root </> "src" </> "M.hs")
+        (length <$> library) `shouldSatisfy` either (const False) (> 40)
+
+    it "can be turned off again by default-extensions" $
+      inPackage refusesAnEdition ["src"] $ \root ->
+        (has ImportQualifiedPost <$> asked (root </> "src" </> "M.hs"))
+          `shouldReturn` False
+
+  describe "a file nothing can be settled for" $ do
+    it "says so when there is no package above it" $
+      withSystemTempDirectory "tilia-nopackage" $ \root ->
+        asked (root </> "M.hs")
+          `shouldReturn` Left NoPackageFile
+
+    it "says so, and how, when the package does not parse" $
+      inPackage "library\n  hs-source-dirs\n" [] $ \root ->
+        asked (root </> "M.hs") >>= \case
+          Left (PackageMalformed file complaints) -> do
+            file `shouldSatisfy` (("demo.cabal" `isSuffixOf`))
+            complaints `shouldSatisfy` not . null
+          other -> expectationFailure ("expected a parse failure, got " <> show other)
+
+  describe "a reader kept between files" $ do
+    it "answers as a fresh one would" $
+      inPackage twoComponents ["src", "test"] $ \root -> do
+        ask <- newPackageReader
+        kept <- traverse ask (modules root)
+        fresh <- traverse asked (modules root)
+        kept `shouldBe` fresh
+
+    it "reads a package once, not once per file" $
+      inPackage twoComponents ["src"] $ \root -> do
+        ask <- newPackageReader
+        first <- ask (root </> "src" </> "A.hs")
+        removeFile (root </> "demo.cabal")
+        ask (root </> "src" </> "B.hs") `shouldReturn` first
+
+    it "remembers every directory the walk went through" $
+      inPackage twoComponents ["src" </> "deep"] $ \root -> do
+        ask <- newPackageReader
+        deep <- ask (root </> "src" </> "deep" </> "A.hs")
+        removeFile (root </> "demo.cabal")
+        ask (root </> "src" </> "B.hs") `shouldReturn` deep
+
+    it "is what makes those pass, and not the file surviving" $
+      inPackage twoComponents ["src"] $ \root -> do
+        removeFile (root </> "demo.cabal")
+        (unreadableOrMissing <$> asked (root </> "src" </> "A.hs"))
+          `shouldReturn` True
+
+----------------------------------------------------------------------------
+-- The packages the tests are run against
+
+-- | A library on @GHC2021@ and a test suite on @Haskell2010@, so that the
+-- two disagree about everything worth asking.
+twoComponents :: Text
+twoComponents =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: demo",
+      "version: 0",
+      "",
+      "library",
+      "  exposed-modules: M",
+      "  hs-source-dirs: src",
+      "  default-language: GHC2021",
+      "",
+      "test-suite spec",
+      "  type: exitcode-stdio-1.0",
+      "  main-is: S.hs",
+      "  hs-source-dirs: test",
+      "  default-language: Haskell2010",
+      "  default-extensions: OverloadedStrings"
+    ]
+
+-- | A library that names no @hs-source-dirs@, so its modules sit beside the
+-- @.cabal@ file.
+besideTheCabalFile :: Text
+besideTheCabalFile =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: demo",
+      "version: 0",
+      "",
+      "library",
+      "  exposed-modules: M",
+      "  default-language: GHC2021"
+    ]
+
+-- | A library beside the @.cabal@ file with settings a setup script there
+-- does not share.
+aroundTheSetupScript :: Text
+aroundTheSetupScript =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: demo",
+      "version: 0",
+      "",
+      "library",
+      "  exposed-modules: M",
+      "  default-language: Haskell2010",
+      "  default-extensions: OverloadedStrings"
+    ]
+
+-- | A library that spreads over the whole tree, and a suite inside it.
+--
+-- The library names no @hs-source-dirs@ and so takes the package
+-- directory, which holds the test suite's directory as well as its own
+-- modules.
+overTheWholeTree :: Text
+overTheWholeTree =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: demo",
+      "version: 0",
+      "",
+      "library",
+      "  exposed-modules: M",
+      "  default-language: Haskell2010",
+      "",
+      "test-suite spec",
+      "  type: exitcode-stdio-1.0",
+      "  main-is: S.hs",
+      "  hs-source-dirs: tests",
+      "  default-language: GHC2021"
+    ]
+
+-- | An edition, and then one of the things it brings taken back out.
+refusesAnEdition :: Text
+refusesAnEdition =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: demo",
+      "version: 0",
+      "",
+      "library",
+      "  exposed-modules: M",
+      "  hs-source-dirs: src",
+      "  default-language: GHC2021",
+      "  default-extensions: NoImportQualifiedPost"
+    ]
+
+----------------------------------------------------------------------------
+-- Running one
+
+sharedTests :: Text
+sharedTests =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: demo",
+      "version: 0",
+      "test-suite doctests",
+      "  type: exitcode-stdio-1.0",
+      "  main-is: Doctests.hs",
+      "  hs-source-dirs: tests",
+      "  default-language: Haskell2010",
+      "test-suite unittests",
+      "  type: exitcode-stdio-1.0",
+      "  main-is: Unittests.hs",
+      "  other-modules: Unit",
+      "  hs-source-dirs: tests",
+      "  default-language: Haskell2010",
+      "  default-extensions: BangPatterns"
+    ]
+
+conditionalLibrary :: Text
+conditionalLibrary =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: demo",
+      "version: 0",
+      "library",
+      "  exposed-modules: M",
+      "  hs-source-dirs: src",
+      "  default-language: Haskell2010",
+      "  default-extensions: BangPatterns",
+      "  if impl(ghc >= 9.10)",
+      "    hs-source-dirs: new"
+    ]
+
+-- | Write a @.cabal@ file and the given directories, and hand back the root.
+inPackage :: Text -> [FilePath] -> (FilePath -> IO a) -> IO a
+inPackage contents dirs use =
+  withSystemTempDirectory "tilia-package" $ \root -> do
+    T.writeFile (root </> "demo.cabal") contents
+    mapM_ (createDirectoryIfMissing True . (root </>)) (sort dirs)
+    use root
+
+-- | Ask about one file with a reader of its own, which is what a test that
+-- is not about caching wants.
+asked :: FilePath -> IO (Either PackageProblem [Extension])
+asked path = do
+  ask <- newPackageReader
+  ask path
+
+-- | One module in each of the two components.
+modules :: FilePath -> [FilePath]
+modules root = [root </> "src" </> "M.hs", root </> "test" </> "S.hs"]
+
+unreadableOrMissing :: Either PackageProblem [Extension] -> Bool
+unreadableOrMissing = either (const True) (const False)
+
+has :: Extension -> Either PackageProblem [Extension] -> Bool
+has e = either (const False) (e `elem`)
+
+unclaimed :: Either PackageProblem [Extension] -> Bool
+unclaimed = either isFileUnclaimed (const False)
+  where
+    isFileUnclaimed = \case
+      FileUnclaimed _ -> True
+      _ -> False
diff --git a/tests/Tilia/Cabal/ProjectSpec.hs b/tests/Tilia/Cabal/ProjectSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Tilia/Cabal/ProjectSpec.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Finding the project a file belongs to.
+module Tilia.Cabal.ProjectSpec (spec) where
+
+import System.Directory (createDirectoryIfMissing)
+import System.FilePath ((</>))
+import System.IO.Temp (withSystemTempDirectory)
+import Test.Hspec
+import Tilia.Cabal.Project
+
+spec :: Spec
+spec = do
+  describe "in this repository" $ do
+    it "finds the root from the root" $ do
+      root <- findProjectRoot "."
+      (prMarker <$> root) `shouldBe` Just ProjectFile
+
+    it "finds the root from a nested source directory" $ do
+      root <- findProjectRoot "src/Tilia/Printer"
+      (prMarker <$> root) `shouldBe` Just ProjectFile
+
+    it "finds the root from a file rather than a directory" $ do
+      root <- findProjectRoot "src/Tilia/Fixity.hs"
+      (prMarker <$> root) `shouldBe` Just ProjectFile
+
+    it "returns the same directory however it is reached" $ do
+      a <- findProjectRoot "."
+      b <- findProjectRoot "tests/Tilia"
+      c <- findProjectRoot "src/Tilia/Printer/Internal.hs"
+      (prPath <$> a, prPath <$> b) `shouldBe` (prPath <$> a, prPath <$> c)
+      (prPath <$> b) `shouldBe` (prPath <$> c)
+
+  describe "marker precedence" $ do
+    it "prefers cabal.project to a bare .cabal file" $
+      withTree [("cabal.project", ""), ("thing.cabal", "")] $ \dir -> do
+        root <- findProjectRoot dir
+        (prMarker <$> root) `shouldBe` Just ProjectFile
+
+    it "accepts a bare .cabal file when there is no project" $
+      withTree [("thing.cabal", "")] $ \dir -> do
+        root <- findProjectRoot dir
+        (prMarker <$> root) `shouldBe` Just (PackageFile "thing.cabal")
+
+    it "passes over a stack.yaml, which cabal does not read" $
+      withTree [("stack.yaml", ""), ("thing.cabal", "")] $ \dir -> do
+        root <- findProjectRoot dir
+        (prMarker <$> root) `shouldBe` Just (PackageFile "thing.cabal")
+
+    it "climbs out of a stack project to the package it is asked about" $
+      withTree [("stack.yaml", ""), ("packages/inner/inner.cabal", "")] $
+        \dir -> do
+          root <- findProjectRoot (dir </> "packages" </> "inner")
+          prPath <$> root `shouldBe` Just (dir </> "packages" </> "inner")
+
+    it "climbs past a package to the project that contains it"
+      $ withTree
+        [ ("cabal.project", ""),
+          ("packages/inner/placeholder", "")
+        ]
+      $ \dir -> do
+        root <- findProjectRoot (dir </> "packages" </> "inner")
+        (prMarker <$> root) `shouldBe` Just ProjectFile
+
+    it "climbs past a package that has its own .cabal"
+      $ withTree
+        [ ("cabal.project", ""),
+          ("packages/inner/inner.cabal", "")
+        ]
+      $ \dir -> do
+        root <- findProjectRoot (dir </> "packages" </> "inner")
+        (prPath <$> root) `shouldBe` Just dir
+        (prMarker <$> root) `shouldBe` Just ProjectFile
+
+    it "takes the nearest project of the ones above"
+      $ withTree
+        [ ("cabal.project", ""),
+          ("packages/inner/cabal.project", ""),
+          ("packages/inner/inner.cabal", "")
+        ]
+      $ \dir -> do
+        root <- findProjectRoot (dir </> "packages" </> "inner")
+        prPath <$> root `shouldBe` Just (dir </> "packages" </> "inner")
+
+    it "takes the nearest package when no project is above either"
+      $ withTree
+        [ ("outer.cabal", ""),
+          ("packages/inner/inner.cabal", "")
+        ]
+      $ \dir -> do
+        root <- findProjectRoot (dir </> "packages" </> "inner")
+        (prMarker <$> root) `shouldBe` Just (PackageFile "inner.cabal")
+
+    it "climbs to a project past a package that is not the one asked about"
+      $ withTree
+        [ ("cabal.project", ""),
+          ("outer.cabal", ""),
+          ("packages/inner/inner.cabal", "")
+        ]
+      $ \dir -> do
+        root <- findProjectRoot (dir </> "packages" </> "inner")
+        (prMarker <$> root) `shouldBe` Just ProjectFile
+
+  describe "no project" $
+    it "gives up rather than guessing" $
+      withTree [("lonely/Thing.hs", "module Thing where")] $ \dir -> do
+        root <- findProjectRoot (dir </> "lonely")
+        case root of
+          Nothing -> pure ()
+          Just found ->
+            prPath found `shouldNotBe` (dir </> "lonely")
+
+-- | Build a throwaway tree of files and run an action on its root.
+withTree :: [(FilePath, String)] -> (FilePath -> IO a) -> IO a
+withTree files action =
+  withSystemTempDirectory "tilia-project" $ \dir -> do
+    mapM_ (create dir) files
+    action dir
+  where
+    create dir (path, contents) = do
+      let full = dir </> path
+      createDirectoryIfMissing True (parentOf full)
+      writeFile full contents
+    parentOf = reverse . drop 1 . dropWhile (/= '/') . reverse
diff --git a/tests/Tilia/Cabal/TargetSpec.hs b/tests/Tilia/Cabal/TargetSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Tilia/Cabal/TargetSpec.hs
@@ -0,0 +1,517 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Working with cabal targets.
+module Tilia.Cabal.TargetSpec (spec) where
+
+import Data.List (isSuffixOf, sort)
+import Data.Text (Text)
+import Data.Text qualified as T
+import Data.Text.IO qualified as T
+import System.Directory (createDirectoryIfMissing)
+import System.FilePath (takeFileName, (</>))
+import System.IO.Temp (withSystemTempDirectory)
+import Test.Hspec
+import Tilia.Cabal.Project (Marker (..), ProjectRoot (..), findProjectRoot)
+import Tilia.Cabal.Target
+
+spec :: Spec
+spec = do
+  describe "reading a target as it was written" $ do
+    it "takes all as everything" $
+      parseTarget "all" `shouldBe` Right Everything
+
+    it "takes a bare word as a name that may be either" $
+      parseTarget "tilia" `shouldBe` Right (Called "tilia")
+
+    it "takes each kind of component" $ do
+      parseTarget "lib:tilia" `shouldBe` Right (Qualified Nothing Lib "tilia")
+      parseTarget "exe:tilia" `shouldBe` Right (Qualified Nothing Exe "tilia")
+      parseTarget "test:tests" `shouldBe` Right (Qualified Nothing Test "tests")
+      parseTarget "bench:speed" `shouldBe` Right (Qualified Nothing Bench "speed")
+
+    it "takes benchmark as a spelling of bench" $
+      parseTarget "benchmark:speed" `shouldBe` Right (Qualified Nothing Bench "speed")
+
+    it "takes a package in front of the kind" $
+      parseTarget "tilia:lib:tilia" `shouldBe` Right (Qualified (Just "tilia") Lib "tilia")
+
+    it "ignores space around it" $
+      parseTarget "  lib:tilia  " `shouldBe` Right (Qualified Nothing Lib "tilia")
+
+    it "refuses an empty target" $
+      parseTarget "" `shouldSatisfy` failed
+
+    it "refuses a kind it does not know" $
+      parseTarget "flib:thing" `shouldSatisfy` failed
+
+    it "refuses more colons than it can account for" $
+      parseTarget "a:lib:b:c" `shouldSatisfy` failed
+
+    it "says what it would have accepted" $
+      case parseTarget "flib:thing" of
+        Left why -> why `shouldSatisfy` T.isInfixOf "lib:"
+        Right _ -> expectationFailure "should not have parsed"
+
+  describe "against this very project" $ do
+    root <- runIO (findProjectRoot ".")
+    case root of
+      Nothing -> it "needs a project" $ pendingWith "no project above the working directory"
+      Just here -> do
+        it "is rooted at the cabal.project, not the .cabal file" $
+          prMarker here `shouldBe` ProjectFile
+
+        it "finds the three components this package declares" $
+          componentsOfTarget here Everything >>= \case
+            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+            Right cs ->
+              sort (fmap (\c -> (componentKind c, componentName c)) cs)
+                `shouldBe` sort [(Lib, "tilia"), (Exe, "tilia"), (Test, "tests")]
+
+        it "narrows to one component when asked for one" $
+          componentsOfTarget here (Qualified Nothing Lib "tilia") >>= \case
+            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+            Right cs -> do
+              files <- filesOfComponents here cs
+              files `shouldSatisfy` any ("src/Tilia/Cabal/Target.hs" `isSuffixOf`)
+
+        it "takes the package name as all of its components" $
+          componentsOfTarget here (Called "tilia") >>= \case
+            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+            Right cs -> length cs `shouldBe` 3
+
+        it "refuses a target the project does not hold, and says what it does" $
+          componentsOfTarget here (Called "nothing-like-this") >>= \case
+            Right cs -> expectationFailure ("matched " <> show (length cs) <> " components")
+            Left problem -> do
+              let said = describeTargetProblem problem
+              said `shouldSatisfy` T.isInfixOf "tilia:lib:tilia"
+              said `shouldSatisfy` T.isInfixOf "tilia:test:tests"
+              said `shouldSatisfy` T.isInfixOf "\n  all"
+
+        it "finds this module among the test component's files" $
+          componentsOfTarget here (Qualified Nothing Test "tests") >>= \case
+            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+            Right cs -> do
+              files <- filesOfComponents here cs
+              fmap takeFileName files `shouldSatisfy` elem "TargetSpec.hs"
+
+        it "finds only Haskell in it" $
+          componentsOfTarget here Everything >>= \case
+            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+            Right cs -> do
+              files <- filesOfComponents here cs
+              filter (not . haskell) files `shouldBe` []
+
+        it "does not wander into the build directory" $
+          componentsOfTarget here Everything >>= \case
+            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+            Right cs -> do
+              files <- filesOfComponents here cs
+              filter (T.isInfixOf "dist-newstyle" . T.pack) files `shouldBe` []
+
+  describe "against a project made up for the purpose" $ do
+    it "reads the packages a cabal.project names"
+      $ withProject
+        [ ("cabal.project", "packages: one two\n"),
+          ("one/one.cabal", package "one" "src"),
+          ("one/src/A.hs", "module A where\n"),
+          ("two/two.cabal", package "two" "lib"),
+          ("two/lib/B.hs", "module B where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> sort (fmap componentPackage cs) `shouldBe` ["one", "two"]
+
+    it "expands a glob in the packages field"
+      $ withProject
+        [ ("cabal.project", "packages: pkgs/*/*.cabal\n"),
+          ("pkgs/one/one.cabal", package "one" "src"),
+          ("pkgs/two/two.cabal", package "two" "src")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> sort (fmap componentPackage cs) `shouldBe` ["one", "two"]
+
+    it "passes over a package a comment has taken out"
+      $ withProject
+        [ ("cabal.project", "packages:\n  one\n  -- two\n"),
+          ("one/one.cabal", package "one" "src"),
+          ("two/two.cabal", package "two" "src")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> fmap componentPackage cs `shouldBe` ["one"]
+
+    it "reads a packages field continued onto later lines"
+      $ withProject
+        [ ("cabal.project", "packages:\n  one\n  two\n"),
+          ("one/one.cabal", package "one" "src"),
+          ("two/two.cabal", package "two" "src")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> sort (fmap componentPackage cs) `shouldBe` ["one", "two"]
+
+    it "reads one continued with tabs, as cabal itself does"
+      $ withProject
+        [ ("cabal.project", "packages:\n\tone\n\ttwo\n"),
+          ("one/one.cabal", package "one" "src"),
+          ("two/two.cabal", package "two" "src")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> sort (fmap componentPackage cs) `shouldBe` ["one", "two"]
+
+    it "finds one a conditional has put inside a section"
+      $ withProject
+        [ ("cabal.project", "if impl(ghc >= 9.4)\n  packages: one\n"),
+          ("one/one.cabal", package "one" "src")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> fmap componentPackage cs `shouldBe` ["one"]
+
+    it "looks in every source directory a component names"
+      $ withProject
+        [ ("only.cabal", packageWith "only" ["src", "gen"] ["A", "B"]),
+          ("src/A.hs", "module A where\n"),
+          ("gen/B.hs", "module B where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            sort (fmap takeFileName files) `shouldBe` ["A.hs", "B.hs"]
+
+    it "spells a path through a dot source directory without the dot"
+      $ withProject
+        [ ("only.cabal", packageWith "only" ["."] ["A", "Nested.B"]),
+          ("A.hs", "module A where\n"),
+          ("Nested/B.hs", "module Nested.B where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            filter (T.isInfixOf "/./" . T.pack) files `shouldBe` []
+
+    it "spells a path through a dot-slash source directory without the dot"
+      $ withProject
+        [ ("only.cabal", packageWith "only" ["./"] ["A"]),
+          ("A.hs", "module A where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            files `shouldBe` [prPath root </> "A.hs"]
+
+    it "names a file once even when two components reach it"
+      $ withProject
+        [ ("both.cabal", twoComponents),
+          ("app/One.hs", "module Main where\n"),
+          ("app/Two.hs", "module Main where\n"),
+          ("app/Shared.hs", "module Shared where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            length cs `shouldBe` 2
+            fmap takeFileName files `shouldBe` ["One.hs", "Shared.hs", "Two.hs"]
+
+    it "leaves out files no component declares"
+      $ withProject
+        [ ("only.cabal", packageWith "only" ["."] ["A"]),
+          ("A.hs", "module A where\n"),
+          ("Stray.hs", "module Stray where\n"),
+          ("data/Example.hs", "main = pure ()\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            fmap takeFileName files `shouldBe` ["A.hs"]
+
+    it "takes the boot file and signature of a declared module"
+      $ withProject
+        [ ("only.cabal", packageWith "only" ["src"] ["A", "B"]),
+          ("src/A.hs", "module A where\n"),
+          ("src/A.hs-boot", "module A where\n"),
+          ("src/B.hsig", "signature B where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            fmap takeFileName files `shouldBe` ["A.hs", "A.hs-boot", "B.hsig"]
+
+    it "takes what every conditional branch declares"
+      $ withProject
+        [ ("only.cabal", conditional),
+          ("src/A.hs", "module A where\n"),
+          ("unix/B.hs", "module B where\n"),
+          ("windows/C.hs", "module C where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            fmap takeFileName files `shouldBe` ["A.hs", "B.hs", "C.hs"]
+
+    it "looks for inherited modules in the directories a branch adds"
+      $ withProject
+        [ ("only.cabal", platformSpecific),
+          ("src/A.hs", "module A where\n"),
+          ("unix/B.hs", "module B where\n"),
+          ("windows/B.hs", "module B where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            files
+              `shouldBe` fmap (prPath root </>) ["src/A.hs", "unix/B.hs", "windows/B.hs"]
+
+    it "passes over a declared module with no source, such as a generated one"
+      $ withProject
+        [ ("only.cabal", packageWith "only" ["src"] ["A", "Paths_only"]),
+          ("src/A.hs", "module A where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            fmap takeFileName files `shouldBe` ["A.hs"]
+
+    it "excludes literal files and directory trees from .tiliaignore"
+      $ withProject
+        [ ( "only.cabal",
+            packageWith
+              "only"
+              ["src"]
+              ["Runner", "Generated", "Fixtures.Input", "Fixtures.Nested.Other", "FixturesOther.Keep"]
+          ),
+          (".tiliaignore", "  # Generated sources and runtime fixtures\r\n\r\n ./src/Fixtures/ \r\nsrc/Generated.hs\r\n"),
+          ("src/Runner.hs", "module Runner where\n"),
+          ("src/Generated.hs", "module Generated where\n"),
+          ("src/Fixtures/Input.hs", "module Fixtures.Input where\n"),
+          ("src/Fixtures/Nested/Other.hs", "module Fixtures.Nested.Other where\n"),
+          ("src/FixturesOther/Keep.hs", "module FixturesOther.Keep where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            sort (map takeFileName files) `shouldBe` ["Keep.hs", "Runner.hs"]
+
+    it "uses the project ignore file for packages and explicit fixture source directories"
+      $ withProject
+        [ ("cabal.project", "packages: one two\n"),
+          (".tiliaignore", "one/fixtures\n"),
+          ("one/one.cabal", packageWith "one" ["src", "fixtures"] ["A", "Input"]),
+          ("one/src/A.hs", "module A where\n"),
+          ("one/fixtures/Input.hs", "module Input where\n"),
+          ("two/two.cabal", packageWith "two" ["fixtures"] ["B"]),
+          ("two/fixtures/B.hs", "module B where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> do
+            files <- filesOfComponents root cs
+            sort (map takeFileName files) `shouldBe` ["A.hs", "B.hs"]
+
+    it "can exclude every file of an explicitly selected component"
+      $ withProject
+        [ ("only.cabal", packageWith "only" ["fixtures"] ["Input"]),
+          (".tiliaignore", "fixtures/\n"),
+          ("fixtures/Input.hs", "module Input where\n")
+        ]
+      $ \root ->
+        componentsOfTarget root (Called "only") >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> filesOfComponents root cs `shouldReturn` []
+
+    it "takes the setup script under all and the package name, not under a component"
+      $ withProject
+        [ ("only.cabal", packageWith "only" ["src"] ["A"]),
+          ("Setup.hs", "import Distribution.Simple\nmain = defaultMain\n"),
+          ("src/A.hs", "module A where\n")
+        ]
+      $ \root -> do
+        let filesFor target =
+              componentsOfTarget root target >>= \case
+                Left problem -> fail (T.unpack (describeTargetProblem problem))
+                Right cs -> fmap takeFileName <$> filesOfComponents root cs
+        filesFor Everything `shouldReturn` ["Setup.hs", "A.hs"]
+        filesFor (Called "only") `shouldReturn` ["Setup.hs", "A.hs"]
+        filesFor (Qualified Nothing Lib "only") `shouldReturn` ["A.hs"]
+
+    it "does not offer the setup script as a target"
+      $ withProject
+        [ ("only.cabal", packageWith "only" ["src"] ["A"]),
+          ("Setup.hs", "import Distribution.Simple\nmain = defaultMain\n")
+        ]
+      $ \root ->
+        componentsOfTarget root (Called "setup") >>= \case
+          Right cs -> expectationFailure ("matched " <> show (length cs) <> " components")
+          Left problem -> describeTargetProblem problem `shouldNotSatisfy` T.isInfixOf ":setup"
+
+    it "says so when a cabal.project names nothing that exists" $
+      withProject [("cabal.project", "packages: nowhere\n")] $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Right cs -> expectationFailure ("found " <> show (length cs) <> " components")
+          Left problem -> describeTargetProblem problem `shouldSatisfy` T.isInfixOf "no packages"
+
+    it "includes optional packages that exist, ignoring absent ones"
+      $ withProject
+        [ ("cabal.project", "packages: main\noptional-packages: optional absent\n"),
+          ("main/main.cabal", package "main" "src"),
+          ("optional/optional.cabal", package "optional" "src")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
+          Right cs -> sort (map componentPackage cs) `shouldBe` ["main", "optional"]
+
+    it "says so when a .cabal file will not parse"
+      $ withProject
+        [ ("cabal.project", "packages: .\n"),
+          ("broken.cabal", "this is not a cabal file at all\n")
+        ]
+      $ \root ->
+        componentsOfTarget root Everything >>= \case
+          Right cs -> expectationFailure ("found " <> show (length cs) <> " components")
+          Left problem -> describeTargetProblem problem `shouldSatisfy` T.isInfixOf "does not parse"
+
+----------------------------------------------------------------------------
+-- Helpers
+
+failed :: Either Text Target -> Bool
+failed = \case
+  Left _ -> True
+  Right _ -> False
+
+haskell :: FilePath -> Bool
+haskell path = any (`isSuffixOf` path) [".hs", ".hs-boot", ".hsig"]
+
+-- | A @.cabal@ file for a package with one library that declares no
+-- modules.
+package :: Text -> Text -> Text
+package name dir = packageWith name [dir] []
+
+-- | A @.cabal@ file for a package with one library.
+packageWith ::
+  -- | The name of the package.
+  Text ->
+  -- | Its source directories.
+  [Text] ->
+  -- | The modules it exposes.
+  [Text] ->
+  Text
+packageWith name dirs modules =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: " <> name,
+      "version: 0.1.0.0",
+      "",
+      "library",
+      "  hs-source-dirs: " <> T.intercalate ", " dirs,
+      "  exposed-modules: " <> T.intercalate ", " modules,
+      "  default-language: Haskell2010"
+    ]
+
+-- | Lay out a project in a temporary directory and hand over its root.
+withProject :: [(FilePath, Text)] -> (ProjectRoot -> IO a) -> IO a
+withProject files act =
+  withSystemTempDirectory "tilia-target" $ \directory -> do
+    mapM_ (place directory) files
+    act (ProjectRoot directory (marker files))
+  where
+    place directory (path, contents) = do
+      createDirectoryIfMissing True (directory </> parent path)
+      T.writeFile (directory </> path) contents
+    parent = reverse . drop 1 . dropWhile (/= '/') . reverse
+    marker fs
+      | any ((== "cabal.project") . fst) fs = ProjectFile
+      | (named : _) <- [p | (p, _) <- fs, ".cabal" `isSuffixOf` p] = PackageFile named
+      | otherwise = ProjectFile
+
+-- | A package with two executables that share a module.
+twoComponents :: Text
+twoComponents =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: both",
+      "version: 0.1.0.0",
+      "",
+      "executable one",
+      "  main-is: One.hs",
+      "  hs-source-dirs: app",
+      "  other-modules: Shared",
+      "  default-language: Haskell2010",
+      "",
+      "executable two",
+      "  main-is: Two.hs",
+      "  hs-source-dirs: app",
+      "  other-modules: Shared",
+      "  default-language: Haskell2010"
+    ]
+
+-- | A package whose library declares its modules once and finds one of
+-- them in a directory that depends on the platform.
+platformSpecific :: Text
+platformSpecific =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: only",
+      "version: 0.1.0.0",
+      "",
+      "library",
+      "  hs-source-dirs: src",
+      "  exposed-modules: A, B",
+      "  default-language: Haskell2010",
+      "  if os(windows)",
+      "    hs-source-dirs: windows",
+      "  else",
+      "    hs-source-dirs: unix"
+    ]
+
+-- | A package whose library declares a module in each branch of a
+-- conditional, each from a source directory of its own.
+conditional :: Text
+conditional =
+  T.unlines
+    [ "cabal-version: 2.4",
+      "name: only",
+      "version: 0.1.0.0",
+      "",
+      "library",
+      "  hs-source-dirs: src",
+      "  exposed-modules: A",
+      "  default-language: Haskell2010",
+      "  if os(windows)",
+      "    hs-source-dirs: windows",
+      "    other-modules: C",
+      "  else",
+      "    hs-source-dirs: unix",
+      "    other-modules: B"
+    ]
diff --git a/tests/Tilia/Comments/PlaceSpec.hs b/tests/Tilia/Comments/PlaceSpec.hs
--- a/tests/Tilia/Comments/PlaceSpec.hs
+++ b/tests/Tilia/Comments/PlaceSpec.hs
@@ -204,11 +204,11 @@
 -- 'Nothing' is a comment nothing came for, which the printer writes after
 -- the whole document.
 placedIn ::
-  -- | The regions a comment may be given to
+  -- | The regions a comment may be given to.
   [Span] ->
-  -- | The boundaries a comment printed in place may not be carried across
+  -- | The boundaries a comment printed in place may not be carried across.
   [Span] ->
-  -- | A module for the comments to be read out of
+  -- | A module for the comments to be read out of.
   Text ->
   [(Text, Maybe (Position, Span))]
 placedIn regions fences src =
@@ -216,7 +216,7 @@
   where
     cs = commentsIn src
     gathered = fst (foldl collect ([], placeComments regions fences cs) regions)
-    collect (found, placements) r = case takePlaced r placements of
+    collect (found, placements) r = case claimPlaced r placements of
       (mine, rest) -> (found <> [(commentSpan c, (p, r)) | (p, c) <- mine], rest)
 
 firstComment :: Text -> Comment
diff --git a/tests/Tilia/CommentsSpec.hs b/tests/Tilia/CommentsSpec.hs
--- a/tests/Tilia/CommentsSpec.hs
+++ b/tests/Tilia/CommentsSpec.hs
@@ -213,17 +213,17 @@
     Right pm -> comments (pmSource pm)
 
 bodies :: Text -> [[Text]]
-bodies = map (NE.toList . commentBody) . commentsIn
+bodies = fmap (NE.toList . commentBody) . commentsIn
 
 -- | The bodies a doc comment comes out with once its trigger is tidied.
 widened :: Text -> [[Text]]
-widened = map (NE.toList . commentBody . widenTrigger) . commentsIn
+widened = fmap (NE.toList . commentBody . widenTrigger) . commentsIn
 
 trailings :: Text -> [Bool]
-trailings = map commentTrailing . commentsIn
+trailings = fmap commentTrailing . commentsIn
 
 followeds :: Text -> [Bool]
-followeds = map commentFollowed . commentsIn
+followeds = fmap commentFollowed . commentsIn
 
 headerLine :: Text -> Maybe Int
 headerLine src = case parseModule defaultParserConfig "test.hs" src of
diff --git a/tests/Tilia/Corpus.hs b/tests/Tilia/Corpus.hs
--- a/tests/Tilia/Corpus.hs
+++ b/tests/Tilia/Corpus.hs
@@ -48,7 +48,7 @@
   )
 import System.Environment (lookupEnv)
 import System.FilePath (splitDirectories, takeDirectory, (</>))
-import Tilia.Package (newPackageReader)
+import Tilia.Cabal.Package (newPackageReader)
 
 ----------------------------------------------------------------------------
 -- Corpora
@@ -144,7 +144,7 @@
           ("data" </> "examples"),
       corpusReference = ReferenceMarked "-out",
       corpusExpectations =
-        Listed Lists {expectSkip = ormoluSkip, expectDeclined = []},
+        Listed Lists{expectSkip = ormoluSkip, expectDeclined = []},
       corpusInPackages = False
     }
 
@@ -152,7 +152,7 @@
 ghcTestSuite :: Corpus
 ghcTestSuite =
   Corpus
-    { corpusName = "ghc-9.10.1-testsuite",
+    { corpusName = "ghc-9.14.1-testsuite",
       corpusSource =
         Fetched
           ( https "codeload.github.com"
@@ -161,7 +161,7 @@
               /: "tar.gz"
               /: "refs"
               /: "tags"
-              /: "ghc-9.10.1-release",
+              /: "ghc-9.14.1-release",
             mempty
           )
           ("testsuite" </> "tests"),
@@ -328,8 +328,27 @@
     "declaration" </> "deriving" </> "overlapping.hs",
     "declaration" </> "warning" </> "warning-single-line.hs"
   ]
+    <> ormoluRecordBraces
     <> ormoluUnreadable
 
+-- | Ormolu examples with a space between a record and its braces.
+ormoluRecordBraces :: [FilePath]
+ormoluRecordBraces =
+  [ "declaration" </> "data" </> "linear.hs",
+    "declaration" </> "data" </> "record-singleline.hs",
+    "declaration" </> "data" </> "simple-broken.hs",
+    "declaration" </> "data" </> "strictness.hs",
+    "declaration" </> "value" </> "function" </> "lambda-case.hs",
+    "declaration" </> "value" </> "function" </> "operator-comments-3.hs",
+    "declaration" </> "value" </> "function" </> "pattern" </> "record-patterns.hs",
+    "declaration" </> "value" </> "function" </> "record" </> "constructors.hs",
+    "declaration" </> "value" </> "function" </> "record" </> "record-dot.hs",
+    "declaration" </> "value" </> "function" </> "record" </> "updaters.hs",
+    "declaration" </> "value" </> "function" </> "record" </> "wildcards.hs",
+    "declaration" </> "value" </> "pattern-synonyms" </> "bidirectional.hs",
+    "declaration" </> "value" </> "pattern-synonyms" </> "unidirectional.hs"
+  ]
+
 -- | Ormolu examples GHC's own parser cannot read.
 ormoluUnreadable :: [FilePath]
 ormoluUnreadable =
@@ -496,6 +515,9 @@
     "parser" </> "should_compile" </> "read058.hs",
     "parser" </> "should_fail" </> "ExportCommaComma.hs",
     "parser" </> "should_fail" </> "InfixAppPatErr.hs",
+    "parser" </> "should_fail" </> "MultilineStringsInnerTab.hs",
+    "parser" </> "should_fail" </> "MultilineStringsSmartQuotes.hs",
+    "parser" </> "should_fail" </> "MultilineStringsUnterminated.hs",
     "parser" </> "should_fail" </> "NoBlockArgumentsFail.hs",
     "parser" </> "should_fail" </> "NoBlockArgumentsFail2.hs",
     "parser" </> "should_fail" </> "NoBlockArgumentsFail3.hs",
@@ -507,6 +529,8 @@
     "parser" </> "should_fail" </> "OpaqueParseFail1.hs",
     "parser" </> "should_fail" </> "OpaqueParseFail2.hs",
     "parser" </> "should_fail" </> "OpaqueParseFail3.hs",
+    "parser" </> "should_fail" </> "Or1.hs",
+    "parser" </> "should_fail" </> "OrPatInExprErr.hs",
     "parser" </> "should_fail" </> "ParserNoLambdaCase.hs",
     "parser" </> "should_fail" </> "ParserNoMultiWayIf.hs",
     "parser" </> "should_fail" </> "ParserNoTH1.hs",
@@ -559,6 +583,10 @@
     "parser" </> "should_fail" </> "T21843e.hs",
     "parser" </> "should_fail" </> "T21843f.hs",
     "parser" </> "should_fail" </> "T22070.hs",
+    "parser" </> "should_fail" </> "T25258a.hs",
+    "parser" </> "should_fail" </> "T25258b.hs",
+    "parser" </> "should_fail" </> "T25258c.hs",
+    "parser" </> "should_fail" </> "T25530.hs",
     "parser" </> "should_fail" </> "T3095.hs",
     "parser" </> "should_fail" </> "T3153.hs",
     "parser" </> "should_fail" </> "T3751.hs",
@@ -583,6 +611,8 @@
     "parser" </> "should_fail" </> "cmdFail007.hs",
     "parser" </> "should_fail" </> "cmdFail008.hs",
     "parser" </> "should_fail" </> "cmdFail009.hs",
+    "parser" </> "should_fail" </> "cmdFail010.hs",
+    "parser" </> "should_fail" </> "cmdFail011.hs",
     "parser" </> "should_fail" </> "patFail001.hs",
     "parser" </> "should_fail" </> "patFail002.hs",
     "parser" </> "should_fail" </> "patFail003.hs",
@@ -714,8 +744,11 @@
     "simplCore" </> "T9646" </> "Type.hs",
     "simplCore" </> "should_compile" </> "T13658.hs",
     "simplCore" </> "should_compile" </> "T21694.hs",
+    "simplCore" </> "should_compile" </> "T5821.hs",
     "simplCore" </> "should_compile" </> "T8832.hs",
+    "simplCore" </> "should_fail" </> "T25117b.hs",
     "simplCore" </> "should_run" </> "T21575.hs",
+    "splice-imports" </> "SI27.hs",
     "stage1" </> "T2632.hs",
     "th" </> "T10279.hs",
     "th" </> "T10638.hs",
@@ -790,7 +823,14 @@
     "typecheck" </> "should_run" </> "T4809.hs",
     "unboxedsums" </> "UnboxedSumsTH_Fail.hs",
     "unboxedsums" </> "unboxedsums4.hs",
+    "vdq-rta" </> "should_fail" </> "T24159_pat_parse_error_1.hs",
+    "vdq-rta" </> "should_fail" </> "T24159_pat_parse_error_2.hs",
+    "vdq-rta" </> "should_fail" </> "T24159_pat_parse_error_3.hs",
+    "vdq-rta" </> "should_fail" </> "T24159_pat_parse_error_4.hs",
+    "vdq-rta" </> "should_fail" </> "T24159_pat_parse_error_5.hs",
+    "vdq-rta" </> "should_fail" </> "T24159_pat_parse_error_6.hs",
     "warnings" </> "should_fail" </> "CaretDiagnostics2.hs",
+    "warnings" </> "should_fail" </> "SpecEMultipleTys.hs",
     "wcompat-warnings" </> "WCompatWarningsOff.hs",
     "wcompat-warnings" </> "WCompatWarningsOn.hs",
     "wcompat-warnings" </> "WCompatWarningsOnOff.hs"
diff --git a/tests/Tilia/Corpus/Manifest.hs b/tests/Tilia/Corpus/Manifest.hs
--- a/tests/Tilia/Corpus/Manifest.hs
+++ b/tests/Tilia/Corpus/Manifest.hs
@@ -121,7 +121,7 @@
 writeManifest :: FilePath -> Manifest -> IO ()
 writeManifest path manifest = do
   createDirectoryIfMissing True (takeDirectory path)
-  T.writeFile path (T.unlines (header <> map line (Map.toAscList manifest)))
+  T.writeFile path (T.unlines (header <> fmap line (Map.toAscList manifest)))
   where
     header =
       [ "# What each example of this corpus does today, one line each.",
@@ -136,7 +136,7 @@
         <> T.justifyLeft 14 ' ' (entryDigest entry)
         <> T.pack name
     width =
-      2 + maximum (1 : map (T.length . outcomeName . entryOutcome) (Map.elems manifest))
+      2 + maximum (1 : fmap (T.length . outcomeName . entryOutcome) (Map.elems manifest))
 
 -- | Write the reasons beside the record.
 writeReport :: FilePath -> [(FilePath, Outcome, Text)] -> IO ()
@@ -172,7 +172,7 @@
       ]
         <> concatMap entry es
     entry (name, why) =
-      [T.pack name] <> map ("    " <>) (T.lines (T.strip why)) <> [""]
+      [T.pack name] <> fmap ("    " <>) (T.lines (T.strip why)) <> [""]
 
 -- | Is this run supposed to write the records rather than check against
 -- them?
diff --git a/tests/Tilia/CorpusSpec.hs b/tests/Tilia/CorpusSpec.hs
--- a/tests/Tilia/CorpusSpec.hs
+++ b/tests/Tilia/CorpusSpec.hs
@@ -139,7 +139,7 @@
                   PartlyChecked -> pendingWith (T.unpack why)
                   Broken -> pendingWith (T.unpack (T.take reasonLength why))
       it "records nothing it does not have" $ do
-        let had = Set.fromList (map exampleName examples)
+        let had = Set.fromList (fmap exampleName examples)
             gone = [n | n <- Map.keys manifest, not (Set.member n had)]
         unless (null gone) . expectationFailure $
           show (length gone)
diff --git a/tests/Tilia/Cpp/MacrosSpec.hs b/tests/Tilia/Cpp/MacrosSpec.hs
--- a/tests/Tilia/Cpp/MacrosSpec.hs
+++ b/tests/Tilia/Cpp/MacrosSpec.hs
@@ -7,7 +7,7 @@
 import Data.Text (Text)
 import Data.Text qualified as T
 import Test.Hspec
-import Tilia.Cpp (withoutRuledOut)
+import Tilia.Cpp.Directives (withoutRuledOut)
 import Tilia.Cpp.Macros
 
 -- | A plan with one dependency at 1.2.3 and a compiler at 9.10.3.
@@ -29,24 +29,24 @@
 
 -- | What this guard comes to, given the plan above.
 answer :: Text -> Maybe Bool
-answer = answerTo macros
+answer = guardHolds macros
 
 spec :: Spec
 spec = do
   describe "a guard about a version the plan fixed" $ do
     it "is true where the plan is at least what it asks for" $
-      map answer ["if MIN_VERSION_thing(1,2,3)", "if MIN_VERSION_thing(1,0,0)"]
+      fmap answer ["if MIN_VERSION_thing(1,2,3)", "if MIN_VERSION_thing(1,0,0)"]
         `shouldBe` [Just True, Just True]
 
     it "is false where the plan is short of it" $
-      map answer ["if MIN_VERSION_thing(1,2,4)", "if MIN_VERSION_thing(2,0,0)"]
+      fmap answer ["if MIN_VERSION_thing(1,2,4)", "if MIN_VERSION_thing(2,0,0)"]
         `shouldBe` [Just False, Just False]
 
     it "compares the parts as numbers and not as text" $
       answer "if MIN_VERSION_thing(1,10,0)" `shouldBe` Just False
 
     it "pads the shorter side with zeros" $
-      map answer ["if MIN_VERSION_thing(1,2)", "if MIN_VERSION_thing(1,2,3,1)"]
+      fmap answer ["if MIN_VERSION_thing(1,2)", "if MIN_VERSION_thing(1,2,3,1)"]
         `shouldBe` [Just True, Just False]
 
     it "says nothing about a package the plan does not name" $
@@ -54,11 +54,11 @@
 
   describe "a guard about the compiler" $ do
     it "reads its version as the compiler spells it" $
-      map answer ["if __GLASGOW_HASKELL__ >= 902", "if __GLASGOW_HASKELL__ >= 912"]
+      fmap answer ["if __GLASGOW_HASKELL__ >= 902", "if __GLASGOW_HASKELL__ >= 912"]
         `shouldBe` [Just True, Just False]
 
     it "takes the four-part macro apart the same way" $
-      map
+      fmap
         answer
         [ "if MIN_VERSION_GLASGOW_HASKELL(9,10,1,0)",
           "if MIN_VERSION_GLASGOW_HASKELL(9,2,0,0)",
@@ -76,7 +76,7 @@
         `shouldBe` Just True
 
     it "gives up where what is left over decides it" $
-      map
+      fmap
         answer
         [ "if defined(SOMETHING) && MIN_VERSION_thing(1,0,0)",
           "if defined(SOMETHING) || MIN_VERSION_thing(2,0,0)"
@@ -88,7 +88,7 @@
         `shouldBe` Just True
 
     it "negates what it knows and nothing else" $
-      map answer ["if !MIN_VERSION_thing(2,0,0)", "if !defined(SOMETHING)"]
+      fmap answer ["if !MIN_VERSION_thing(2,0,0)", "if !defined(SOMETHING)"]
         `shouldBe` [Just True, Nothing]
 
     it "reads brackets" $
@@ -97,21 +97,21 @@
 
   describe "a guard that is not about a version at all" $ do
     it "answers a bare number, which is how a branch is turned off" $
-      map answer ["if 0", "if 1"] `shouldBe` [Just False, Just True]
+      fmap answer ["if 0", "if 1"] `shouldBe` [Just False, Just True]
 
     it "says nothing about a flag" $
-      map answer ["ifdef FOO", "ifndef FOO", "if defined FOO"]
+      fmap answer ["ifdef FOO", "ifndef FOO", "if defined FOO"]
         `shouldBe` [Nothing, Nothing, Nothing]
 
     it "says a macro it has a value for is defined" $
-      map answer ["ifdef MIN_VERSION_thing", "ifndef MIN_VERSION_thing"]
+      fmap answer ["ifdef MIN_VERSION_thing", "ifndef MIN_VERSION_thing"]
         `shouldBe` [Just True, Just False]
 
     it "says nothing about arithmetic, which it does not read" $
       answer "if __GLASGOW_HASKELL__ + 1 > 900" `shouldBe` Nothing
 
     it "says nothing about a guard whose keyword asks nothing" $
-      map answer ["else", "endif", "define FOO 1"]
+      fmap answer ["else", "endif", "define FOO 1"]
         `shouldBe` [Nothing, Nothing, Nothing]
 
   describe "blanking the branches a plan rules out" $ do
diff --git a/tests/Tilia/Cpp/PropertiesSpec.hs b/tests/Tilia/Cpp/PropertiesSpec.hs
--- a/tests/Tilia/Cpp/PropertiesSpec.hs
+++ b/tests/Tilia/Cpp/PropertiesSpec.hs
@@ -17,6 +17,7 @@
 import Tilia.Equivalence (syntaxDifference)
 import Tilia.Parser (defaultParserConfig, parseModule, pmModule)
 import Tilia.Render (defaultRenderConfig)
+import Tilia.Utils (tshow)
 
 spec :: Spec
 spec = modifyMaxSuccess (const 5000) $
@@ -43,9 +44,13 @@
         let source = sourceOf m
          in case (answeredLeaves source, answeredLeaves (withoutRuledOut macros source)) of
               (Right went, Right came) ->
-                let had = Set.fromList (map snd went)
+                let had = Set.fromList (fmap snd went)
                  in conjoin $
-                      counterexample "nothing was left to read" (not (null came))
+                      -- Selecting a branch with #error may intentionally
+                      -- leave no compilable configuration.
+                      counterexample
+                        "nothing was left to read"
+                        (not (null came) || "#error" `T.isInfixOf` source)
                         : [ counterexample
                               (T.unpack ("not a configuration the module had:\n" <> t))
                               (Set.member t had)
@@ -203,6 +208,3 @@
       <> concatMap written yes
       <> (if null no then [] else "#else" : concatMap written no)
       <> ["#endif"]
-
-tshow :: Int -> Text
-tshow = T.pack . show
diff --git a/tests/Tilia/CppSpec.hs b/tests/Tilia/CppSpec.hs
--- a/tests/Tilia/CppSpec.hs
+++ b/tests/Tilia/CppSpec.hs
@@ -20,10 +20,31 @@
 
 spec :: Spec
 spec = do
+  describe "matching configurations before and after formatting" $ do
+    it "does not mistake different whitespace for another configuration" $ do
+      let input = "module M where\n#if FLAG\nf=1\n#else\nf = 1\n#endif\n"
+      (said (correspondingBranches input "module M where\nf = 1\n") >>= mapM_ sameBranch)
+        `shouldBe` Right ()
+    it "keeps branch identity when sorting the source text would swap it" $ do
+      let input = "module M where\n#if FLAG\nf=1\n#else\nf = 2\n#endif\n"
+          output = "module M where\n#if FLAG\nf = 1\n#else\nf = 2\n#endif\n"
+      (said (correspondingBranches input output) >>= mapM_ sameBranch) `shouldBe` Right ()
+    it "detects moving an error to a different branch" $ do
+      let input = "module M where\n#if FLAG\n#error no\n#else\nf = 1\n#endif\n"
+          output = "module M where\n#if FLAG\nf = 1\n#else\n#error no\n#endif\n"
+      (said (correspondingBranches input output) >>= mapM_ sameBranch) `shouldSatisfy` isLeft
+  describe "branches which deliberately abort preprocessing" $ do
+    it "formats the valid branches and preserves the error directive" $
+      case formatCpp errorAlternative of
+        Left why -> expectationFailure (T.unpack why)
+        Right formatted -> formatted `shouldSatisfy` T.isInfixOf "#error Unsupported word size"
+    it "checks only valid configurations and is idempotent" $ do
+      roundTrip errorAlternative `shouldBe` Right ()
+      settles errorAlternative `shouldBe` Right ()
   describe "splitting a module on its conditional" $ do
     it "keeps the directive as written, keyword and all" $
       cfgGuards <$> configurations atDeclarations
-        `shouldBe` Just (map Guard ["ifdef FOO"])
+        `shouldBe` Just (fmap Guard ["ifdef FOO"])
 
     it "keeps every line where it was" $
       let sameLength c = all ((== length (T.lines atDeclarations)) . length . T.lines) (cfgTexts c)
@@ -31,20 +52,20 @@
 
     it "has one more configuration than it has directives" $
       let balanced c = length (cfgTexts c) == length (cfgGuards c) + 1
-       in map (fmap balanced . configurations) [atDeclarations, withoutElse, withElif]
+       in fmap (fmap balanced . configurations) [atDeclarations, withoutElse, withElif]
             `shouldBe` [Just True, Just True, Just True]
 
     it "finds every directive of an #elif chain, in order" $
       cfgGuards <$> configurations withElif
-        `shouldBe` Just (map Guard ["if A", "elif B"])
+        `shouldBe` Just (fmap Guard ["if A", "elif B"])
 
     it "takes only the outermost conditional, leaving the nested one alone" $
       cfgGuards <$> configurations nested
-        `shouldBe` Just (map Guard ["if OUTER"])
+        `shouldBe` Just (fmap Guard ["if OUTER"])
 
     it "takes only the first of two conditionals side by side" $
       cfgGuards <$> configurations twoConditionals
-        `shouldBe` Just (map Guard ["if FIRST"])
+        `shouldBe` Just (fmap Guard ["if FIRST"])
 
     it "declines a module with no conditional at all" $
       configurations "module M where\nf = 1\n" `shouldBe` Nothing
@@ -76,11 +97,11 @@
 
   describe "every configuration of the output"
     $ it "is the same program as that configuration of the input"
-    $ mapM_ (`shouldBe` Right ()) (map roundTrip everyFixture)
+    $ mapM_ (`shouldBe` Right ()) (fmap roundTrip everyFixture)
 
   describe "formatting an already formatted module"
     $ it "changes nothing, for every module the prototype handles"
-    $ mapM_ (`shouldBe` Right ()) (map settles everyFixture)
+    $ mapM_ (`shouldBe` Right ()) (fmap settles everyFixture)
 
   describe "an #elif chain" $ do
     it "is printed back as one conditional rather than as nested ones" $
@@ -178,7 +199,7 @@
   describe "counting the configurations" $ do
     it "agrees with enumerating them, where enumerating them is possible" $
       let counted m = (said (countLeaves m), said (toInteger . length <$> leaves m))
-       in map
+       in fmap
             counted
             [ atDeclarations,
               withElif,
@@ -317,6 +338,23 @@
 ----------------------------------------------------------------------------
 -- The modules the question is asked of
 
+errorAlternative :: Text
+errorAlternative =
+  T.unlines
+    [ "{-# LANGUAGE CPP #-}",
+      "module M where",
+      "value :: Int",
+      "value = if True then",
+      "#if WORD_SIZE_IN_BITS == 64",
+      "  64",
+      "#elif WORD_SIZE_IN_BITS == 32",
+      "  32",
+      "#else",
+      "#error Unsupported word size",
+      "#endif",
+      "  else 0"
+    ]
+
 -- | Everything that is meant to come out the other side, for the properties
 -- that should hold of all of it.
 everyFixture :: [Text]
@@ -763,11 +801,12 @@
 roundTrip :: Text -> Either Text ()
 roundTrip source = do
   formatted <- formatCpp source
-  went <- said (leaves source)
-  came <- said (leaves formatted)
-  if length went == length came
-    then mapM_ (uncurry sameProgram) (zip went came)
-    else Left ("the number of configurations changed: " <> T.pack (show (length went, length came)))
+  pairs <- said (correspondingBranches source formatted)
+  mapM_ sameBranch pairs
+
+sameBranch :: (Maybe Text, Maybe Text) -> Either Text ()
+sameBranch (Nothing, Nothing) = Right ()
+sameBranch (Just input, Just output) = sameProgram input output
   where
     sameProgram before' after' = do
       a <- moduleOf before'
@@ -778,6 +817,7 @@
     moduleOf text = case parseModule defaultParserConfig "<cpp>" text of
       Left _ -> Left ("did not parse:\n" <> text)
       Right parsed -> Right (pmModule parsed)
+sameBranch _ = Left "preprocessing changed between succeeding and failing"
 
 -- | Whether formatting what was formatted changes anything.
 --
@@ -814,7 +854,7 @@
 agreement source = do
   c <- maybe (Left "no conditional") Right (configurations source)
   docs <- traverse documentOf (cfgTexts c)
-  case map regions docs of
+  case fmap regions docs of
     [] -> Left "a conditional with no branches"
     (first' : rest) -> Right (foldl' (narrow first') (True <$ first') rest)
   where
diff --git a/tests/Tilia/Doc/BodySpec.hs b/tests/Tilia/Doc/BodySpec.hs
--- a/tests/Tilia/Doc/BodySpec.hs
+++ b/tests/Tilia/Doc/BodySpec.hs
@@ -9,7 +9,6 @@
 import Tilia.Doc
 import Tilia.Doc.Body
 import Tilia.Doc.Combinators
-import Tilia.Span
 
 -- | A stand-in for a real body type, enough to exercise the class: one
 -- construct that hangs, one that does not, and one that takes its answer
@@ -22,7 +21,7 @@
 instance Body Toy where
   printBody = \case
     Call f x -> txt f <> space <> txt x
-    Block ss -> txt "do" <> indent (hardBreak <> sepBy hardBreak (map txt ss))
+    Block ss -> txt "do" <> indent (hardBreak <> sepBy hardBreak (fmap txt ss))
     Apply f x -> printBody f <> space <> printBody x
 
   bodyPlacement = \case
@@ -42,12 +41,6 @@
     it "stays on one line when flat, either way" $ do
       out (flat (txt "=" <> attach Normal (txt "x"))) `shouldBe` "= x\n"
       out (flat (txt "=" <> attach Hanging (txt "x"))) `shouldBe` "= x\n"
-
-  describe "hangingIfSingleLine" $ do
-    it "hangs for a single-line span" $
-      hangingIfSingleLine (mkSpan (1, 1) (1, 9)) `shouldBe` Hanging
-    it "does not hang for a multi-line span" $
-      hangingIfSingleLine (mkSpan (1, 1) (2, 9)) `shouldBe` Normal
 
   describe "Body" $ do
     it "attaches a hanging body" $
diff --git a/tests/Tilia/Doc/CombinatorsSpec.hs b/tests/Tilia/Doc/CombinatorsSpec.hs
--- a/tests/Tilia/Doc/CombinatorsSpec.hs
+++ b/tests/Tilia/Doc/CombinatorsSpec.hs
@@ -55,9 +55,6 @@
     it "keeps commas on the line above when broken" $
       out (broken (commaSep [txt "a", txt "b"]))
         `shouldBe` "a,\nb\n"
-    it "punctuates all but the last" $
-      out (flat (hsep (punctuate comma [txt "a", txt "b", txt "c"])))
-        `shouldBe` "a, b, c\n"
     it "handles an empty list" $
       out (flat (commaSep [])) `shouldBe` ""
     it "handles a single element" $
diff --git a/tests/Tilia/Fixity/CabalSpec.hs b/tests/Tilia/Fixity/CabalSpec.hs
--- a/tests/Tilia/Fixity/CabalSpec.hs
+++ b/tests/Tilia/Fixity/CabalSpec.hs
@@ -25,7 +25,7 @@
           (Tar.entryTarPath (entryFor "hspec-2.11.17/hspec.cabal" ""))
 
     it "knows a package's own cabal file from one further down" $
-      map
+      fmap
         cabalFileAtTop
         [ "hspec-2.11.17/hspec.cabal",
           "hspec-2.11.17/vendor/other.cabal",
diff --git a/tests/Tilia/Fixity/CacheSpec.hs b/tests/Tilia/Fixity/CacheSpec.hs
--- a/tests/Tilia/Fixity/CacheSpec.hs
+++ b/tests/Tilia/Fixity/CacheSpec.hs
@@ -1,11 +1,15 @@
+{-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
 
 -- | The on-disk cache of what was read out of a package.
 module Tilia.Fixity.CacheSpec (spec) where
 
+import Data.Choice (pattern Do, pattern Don't)
 import Data.Map.Strict qualified as Map
+import Data.Maybe (isNothing)
 import Data.Set qualified as Set
-import System.Directory (getModificationTime, setModificationTime)
+import System.Directory (getModificationTime, listDirectory, setModificationTime)
 import System.Environment (setEnv, unsetEnv)
 import System.FilePath ((</>))
 import System.IO.Temp (withSystemTempDirectory)
@@ -18,6 +22,14 @@
 spec = do
   tokens
   database
+  describe "a cache not to be used" $
+    it "is not opened, and nothing is made on disk for it" $
+      withIsolatedDirectory $ \dir -> do
+        setEnv "XDG_CACHE_HOME" dir
+        opened <- openCache (Don't #useCache) (PlanToken "plan")
+        unsetEnv "XDG_CACHE_HOME"
+        isNothing opened `shouldBe` True
+        listDirectory dir `shouldReturn` []
   around withIsolatedCache $ do
     describe "modules" $ do
       it "remembers a package's module list" $ \cache -> do
@@ -314,7 +326,7 @@
 open :: FilePath -> PlanToken -> IO Cache
 open dir token = do
   setEnv "XDG_CACHE_HOME" dir
-  opened <- openCache token
+  opened <- openCache (Do #useCache) token
   unsetEnv "XDG_CACHE_HOME"
   case opened of
     Nothing -> fail "could not open a cache in a temporary directory"
diff --git a/tests/Tilia/Fixity/DebugSpec.hs b/tests/Tilia/Fixity/DebugSpec.hs
--- a/tests/Tilia/Fixity/DebugSpec.hs
+++ b/tests/Tilia/Fixity/DebugSpec.hs
@@ -14,10 +14,10 @@
 import Tilia.Fixity
   ( Direction (..),
     Fixity (..),
-    Known (..),
+    KnownModules (..),
     OpName (..),
     inBothNamespaces,
-    nothingKnown,
+    noKnownModules,
     resolveScope,
   )
 import Tilia.Fixity.Debug (fixityNotes, renderFixityNotes)
@@ -129,8 +129,8 @@
 
     it "sets out under headings" $ do
       told <- notesFor [("Prelude", Just [("+", infixl' 6)])] "f a b = a + b\n"
-      map T.stripStart told `shouldContain` ["· imports"]
-      map T.stripStart told `shouldContain` ["· operators"]
+      fmap T.stripStart told `shouldContain` ["· imports"]
+      fmap T.stripStart told `shouldContain` ["· operators"]
 
     it "leaves out a heading it would have nothing to put under" $
       notesFor [("Prelude", Just [])] "f = 1\n"
@@ -166,7 +166,7 @@
 
 -- | The same, told how far reading got below each import it could not read.
 notesThrough ::
-  -- | What lies below an import, ending at the module that stopped it
+  -- | What lies below an import, ending at the module that stopped it.
   [(Text, [Text])] ->
   [(Text, Maybe [(Text, Fixity)])] ->
   Text ->
@@ -178,7 +178,7 @@
     scope =
       resolveScope
         (Is #implicitPrelude)
-        nothingKnown {knownFixities = exportsOf, knownChain = chainFor}
+        noKnownModules{knownFixities = exportsOf, knownChain = chainFor}
         hsModule
     chainFor m = maybe [] id (lookup m chains)
     chainOf = pure . chainFor
@@ -188,7 +188,7 @@
       Right m -> m
     exportsOf m = do
       declared <- lookup m world
-      inBothNamespaces . Map.fromList . map (\(op, fixity) -> (OpName op, fixity))
+      inBothNamespaces . Map.fromList . fmap (\(op, fixity) -> (OpName op, fixity))
         <$> declared
 
 infixl' :: Int -> Fixity
@@ -207,7 +207,7 @@
 -- | Is this line among them, whatever it was indented by?
 shouldContain' :: [Text] -> Text -> Expectation
 shouldContain' told wanted =
-  map T.stripStart (rejoined told) `shouldContain` [wanted]
+  fmap T.stripStart (rejoined told) `shouldContain` [wanted]
 
 -- | Does some line say this much, whatever else it goes on to say?
 mentions :: [Text] -> Text -> Expectation
diff --git a/tests/Tilia/Fixity/DependenciesSpec.hs b/tests/Tilia/Fixity/DependenciesSpec.hs
--- a/tests/Tilia/Fixity/DependenciesSpec.hs
+++ b/tests/Tilia/Fixity/DependenciesSpec.hs
@@ -17,11 +17,10 @@
 
 import Control.Monad (filterM)
 import Data.ByteString qualified as BS
-import Data.Choice (pattern Is)
+import Data.Choice (pattern Do, pattern Is)
 import Data.Foldable (for_)
 import Data.List (isSuffixOf, sort)
 import Data.Map.Strict qualified as Map
-import Data.Maybe (listToMaybe)
 import Data.Set qualified as Set
 import Data.Text (Text)
 import Data.Text qualified as T
@@ -29,52 +28,41 @@
 import GHC.Hs (HsModule)
 import GHC.Hs.Extension (GhcPs)
 import System.Directory (doesDirectoryExist, doesFileExist, listDirectory)
-import System.FilePath (takeDirectory, (</>))
+import System.FilePath ((</>))
 import Test.Hspec
+import Tilia.Cpp (blankCpp)
 import Tilia.Fixity
 import Tilia.Fixity.Builtin (builtinFixities)
 import Tilia.Fixity.Interface (Interface (..), readInterface)
 import Tilia.Fixity.PackageDb
 import Tilia.Fixity.Plan
 import Tilia.Parser
+import Tilia.WithProjectPlan
+  ( Dependency (..),
+    compilerShipped,
+    dependenciesOf,
+    testsFor,
+    withProjectPlan,
+  )
 
 spec :: Spec
-spec = do
-  plan <- runIO (readBuildPlan (planPathFor "."))
-  case plan of
-    Left _ ->
-      it "needs a built project" $
-        pendingWith "no build plan; run cabal build first"
-    Right p -> withPlan p
+spec = withProjectPlan withPlan
 
 withPlan :: BuildPlan -> Spec
 withPlan plan = do
   installed <- runIO readInstalledPackages
-  fromSource <- runIO (askFixities <$> newResolverVia [FromSource] plan)
-  fromInterface <- runIO (askFixities <$> newResolverVia [FromInterface] plan)
+  fromSource <- runIO (askFixities <$> newResolverVia (Do #useCache) [FromSource] plan)
+  fromInterface <- runIO (askFixities <$> newResolverVia (Do #useCache) [FromInterface] plan)
   resolver <- runIO (newResolver plan)
   let resolve = askFixities resolver
   own <- runIO ownModules
   let isShippedModule m = Map.member m builtinFixities
   dependencies <- runIO (dependenciesOf (not . isShippedModule) plan installed)
   preloaded <- runIO (dependenciesOf isShippedModule plan installed)
+  shippedPackages <- runIO compilerShipped
   let modules = concatMap depModules dependencies
-      compilerDir =
-        listToMaybe
-          [ takeDirectory dir
-          | p <- installedPackages installed,
-            ipName p == "ghc",
-            dir <- take 1 (ipImportDirs p)
-          ]
-      shippedPackages =
-        Set.fromList
-          [ ipName p
-          | p <- installedPackages installed,
-            dir <- take 1 (ipImportDirs p),
-            Just (takeDirectory dir) == compilerDir
-          ]
       readFromSourcePackages =
-        Set.fromList (map depPackage dependencies)
+        Set.fromList (fmap depPackage dependencies)
           `Set.difference` shippedPackages
   missing <-
     runIO $
@@ -93,13 +81,13 @@
     -- pass without having compared anything: this is where that is caught,
     -- rather than in a hundred quietly hollow ticks.
     it "has the source of every package it reads" $
-      case map (T.unpack . ppName . fst) missing of
+      case fmap (T.unpack . ppName . fst) missing of
         [] -> pure ()
         names ->
           expectationFailure $
             "no source for "
               <> unwords names
-              <> "; fetch them with nix run .#sources"
+              <> "; the test suite fetches these itself, so something stopped it"
 
   describe "the operators the compiler ships with" $
     parallel $
@@ -164,56 +152,6 @@
 ----------------------------------------------------------------------------
 -- The dependencies
 
--- | A package this project is built against, as the compiler holds it.
-data Dependency = Dependency
-  { -- | The package name
-    depPackage :: Text,
-    -- | Each module the package holds, with the interface file the compiler
-    -- wrote for it.
-    depModules :: [(Text, FilePath)]
-  }
-
--- | The modules of every package in the plan that the compiler can also
--- see, keeping the ones the predicate wants.
-dependenciesOf :: (Text -> Bool) -> BuildPlan -> Installed -> IO [Dependency]
-dependenciesOf wanted plan installed =
-  filter (not . null . depModules) <$> traverse ofPackage candidates
-  where
-    candidates =
-      [ (package, dir)
-      | package <- installedPackages installed,
-        Set.member (ipName package) planned,
-        dir <- take 1 (ipImportDirs package)
-      ]
-    ofPackage (package, dir) =
-      Dependency (ipName package)
-        <$> filterM
-          (doesFileExist . snd)
-          [ (m, dir </> T.unpack (T.replace "." "/" m) <> ".hi")
-          | m <- ipModules package,
-            wanted m
-          ]
-    planned = Set.fromList [ppName p | p <- bpPackages plan, not (isLocal p)]
-    isLocal p = case ppSource p of
-      LocalPackage _ -> True
-      _ -> False
-
--- | One test per package, splitting the large ones up.
-testsFor :: Dependency -> [(String, [(Text, FilePath)])]
-testsFor dependency = case chunksOf 32 (depModules dependency) of
-  [whole] -> [(name, whole)]
-  pieces ->
-    [ (name <> " (" <> show i <> " of " <> show (length pieces) <> ")", piece)
-    | (i, piece) <- zip [1 :: Int ..] pieces
-    ]
-  where
-    name = T.unpack (depPackage dependency)
-
-chunksOf :: Int -> [a] -> [[a]]
-chunksOf n = \case
-  [] -> []
-  xs -> let (chunk, rest) = splitAt n xs in chunk : chunksOf n rest
-
 -- | Where the built-in table and the compiler both hold a fixity for an
 -- operator and it is not the same fixity.
 --
@@ -245,9 +183,9 @@
 -- | Every fixity the compiler recorded for a module that reading the
 -- package's source did not produce.
 undeclared ::
-  -- | What a module declares, read from the package's source
+  -- | What a module declares, read from the package's source.
   (Text -> IO (Maybe (Fixities))) ->
-  -- | The module, and the interface the compiler wrote for it
+  -- | The module, and the interface the compiler wrote for it.
   (Text, FilePath) ->
   IO [String]
 undeclared fromSource (modName, interfaceFile) =
@@ -285,9 +223,9 @@
 -- compiler followed the same chain when it built the package, so the two
 -- have to arrive at the same place.
 conflicting ::
-  -- | The answer read out of the package's source
+  -- | The answer read out of the package's source.
   (Text -> IO (Maybe (Fixities))) ->
-  -- | The answer read out of the compiler's interfaces
+  -- | The answer read out of the compiler's interfaces.
   (Text -> IO (Maybe (Fixities))) ->
   Text ->
   IO [String]
@@ -328,7 +266,7 @@
       source <- T.decodeUtf8Lenient <$> BS.readFile path
       pure
         ( path,
-          case parseModule defaultParserConfig path source of
+          case parseModule defaultParserConfig path (blankCpp source) of
             Left _ -> Nothing
             Right pm -> Just (pmModule pm)
         )
diff --git a/tests/Tilia/Fixity/HiFileSpec.hs b/tests/Tilia/Fixity/HiFileSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Tilia/Fixity/HiFileSpec.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Interface files read directly, against what @ghc --show-iface@ makes of
+-- them, for the modules of the packages this project is built against.
+--
+-- Every module is decoded, but only those that declare fixities and a fixed
+-- eighth of the rest are checked against @ghc@, which costs a process per
+-- module and was most of the suite's run time.
+module Tilia.Fixity.HiFileSpec (spec) where
+
+import Control.Exception (evaluate)
+import Data.Bits (xor)
+import Data.ByteString qualified as BS
+import Data.Char (ord)
+import Data.Foldable (for_)
+import Data.Map.Strict qualified as Map
+import Data.Set qualified as Set
+import Data.Text (Text)
+import Data.Text qualified as T
+import Data.Word (Word64)
+import Test.Hspec
+import Tilia.Fixity.HiFile (decodeHiFile)
+import Tilia.Fixity.Interface (Interface (..), fromHiFile, parseInterface)
+import Tilia.Fixity.PackageDb (readInstalledPackages)
+import Tilia.Fixity.Plan (BuildPlan)
+import Tilia.Process (readProgramOutput)
+import Tilia.Utils (inParallel)
+import Tilia.WithProjectPlan
+  ( Dependency (..),
+    dependenciesOf,
+    testsFor,
+    withProjectPlan,
+  )
+
+spec :: Spec
+spec = withProjectPlan withPlan
+
+withPlan :: BuildPlan -> Spec
+withPlan plan = do
+  installed <- runIO readInstalledPackages
+  dependencies <- runIO (dependenciesOf (const True) plan installed)
+  let modules = concatMap depModules dependencies
+  describe "interface files read directly" $ do
+    it "are there to read" $
+      length modules `shouldSatisfy` (>= 500)
+
+    it "decode, every one of them" $ do
+      failures <- concat <$> inParallel undecodable modules
+      failures `shouldBe` []
+
+    for_ (concatMap testsFor dependencies) $ \(label, chunk) ->
+      it ("agree with ghc --show-iface on " <> label) $ do
+        found <- concat <$> inParallel disagreeing chunk
+        found `shouldBe` []
+  where
+    undecodable (m, path) = do
+      bytes <- BS.readFile path
+      evaluate [(m, why) | Left why <- [decodeHiFile bytes]]
+    -- Forced before it is returned, so that the output of ghc, which is
+    -- hundreds of megabytes across a run, is not kept alive until the end.
+    disagreeing (m, path) = do
+      direct <-
+        either (const Nothing) (Just . fromHiFile m) . decodeHiFile
+          <$> BS.readFile path
+      case direct of
+        Just (Right d)
+          | not (Map.null (interfaceDeclares d)) || sampled m -> do
+              shown <-
+                maybe Nothing (parseInterface m)
+                  <$> readProgramOutput "ghc" ["--show-iface", path]
+              let found = [(m, x) | Just s <- [shown], x <- disagreements m d s]
+              found <$ evaluate (length found)
+        _ -> pure []
+
+-- | Whether a module is in the fixed eighth of those that declare no
+-- fixities and are checked against @ghc@ all the same.
+--
+-- Chosen by an FNV-1a hash of the name, so that it is the same modules on
+-- every run and machine.
+sampled :: Text -> Bool
+sampled m = T.foldl' step 14695981039346656037 m `mod` 8 == (0 :: Word64)
+  where
+    step h c = (h `xor` fromIntegral (ord c)) * 1099511628211
+
+-- | Where a direct reading and the text disagree beyond what the text
+-- cannot tell.
+disagreements :: Text -> Interface -> Interface -> [Text]
+disagreements m direct shown =
+  [ "fixities"
+  | not (interfaceDeclares shown `Map.isSubmapOf` interfaceDeclares direct)
+      || byOperator (interfaceDeclares direct) /= byOperator (interfaceDeclares shown)
+  ]
+    <> [ "re-exports"
+       | Set.fromList (interfaceReexports direct)
+           /= Set.fromList [r | r@(from, _) <- interfaceReexports shown, from /= m]
+       ]
+    <> ["children" | interfaceChildren direct /= interfaceChildren shown]
+  where
+    byOperator = Set.fromList . fmap (\((_, op), fixity) -> (op, show fixity)) . Map.toList
diff --git a/tests/Tilia/Fixity/InterfaceSpec.hs b/tests/Tilia/Fixity/InterfaceSpec.hs
--- a/tests/Tilia/Fixity/InterfaceSpec.hs
+++ b/tests/Tilia/Fixity/InterfaceSpec.hs
@@ -92,6 +92,25 @@
     it "leaves a capitalised name this module declared alone" $
       passesOn "exports:\n  Value\n" `shouldBe` []
 
+  describe "operators with a vertical bar in them" $ do
+    -- A bar also marks a type exported without itself, as in T|{...}, so
+    -- these are read in the same text as that mark.
+    it "reads one made of bars alone" $
+      passesOn "exports:\n  GHC.Internal.Data.Type.Bool.||\n"
+        `shouldBe` [("GHC.Internal.Data.Type.Bool", OpName "||")]
+
+    it "reads them among the members of a type exported without itself" $
+      passesOn "exports:\n  GHC.Internal.Bits.Bits|{GHC.Internal.Bits..&. GHC.Internal.Bits..|. GHC.Internal.Bits.complement}\n"
+        `shouldBe` [ ("GHC.Internal.Bits", OpName "Bits"),
+                     ("GHC.Internal.Bits", OpName ".&."),
+                     ("GHC.Internal.Bits", OpName ".|."),
+                     ("GHC.Internal.Bits", OpName "complement")
+                   ]
+
+    it "takes them as what such a type carries" $
+      carries "exports:\n  GHC.Internal.Base.Alternative|{GHC.Internal.Base.<|> GHC.Internal.Base.empty}\n"
+        `shouldBe` [(OpName "Alternative", [OpName "<|>", OpName "empty"])]
+
   describe "which namespace a fixity governs" $ do
     it "gives one to types where the module declares a type of that name" $
       declaresIn "fixities infix 4 :~:\nab12\n  data (:~:) a b where\n"
@@ -162,7 +181,7 @@
             \trusted: none\n"
       fmap (Map.toList . interfaceDeclares) (parseInterface "Data.Aeson" out)
         `shouldBe` Just [((InTerms, OpName "!"), Fixity LeftAssoc 9)]
-      fmap interfacePassedOn (parseInterface "Data.Aeson" out)
+      fmap interfaceReexports (parseInterface "Data.Aeson" out)
         `shouldBe` Just [("Data.Aeson.Types.FromJSON", OpName ".:")]
 
   describe "output it will not read" $ do
@@ -183,7 +202,7 @@
 -- | The fixities an interface of this shape declares, by name alone.
 declares :: Text -> [(OpName, Fixity)]
 declares =
-  map (\((_, op), fixity) -> (op, fixity))
+  fmap (\((_, op), fixity) -> (op, fixity))
     . maybe [] (Map.toList . interfaceDeclares)
     . parseInterface "M"
     . (header "M" <>)
@@ -194,11 +213,11 @@
   maybe [] (Map.toList . interfaceDeclares) . parseInterface "M" . (header "M" <>)
 
 passesOn :: Text -> [(Text, OpName)]
-passesOn = maybe [] interfacePassedOn . parseInterface "M" . (header "M" <>)
+passesOn = maybe [] interfaceReexports . parseInterface "M" . (header "M" <>)
 
 -- | What each exported name carries with it, in a settled order.
 carries :: Text -> [(OpName, [OpName])]
 carries =
-  maybe [] (map (fmap Set.toList) . Map.toList . interfaceChildren)
+  maybe [] (fmap (fmap Set.toList) . Map.toList . interfaceChildren)
     . parseInterface "M"
     . (header "M" <>)
diff --git a/tests/Tilia/Fixity/PlanSpec.hs b/tests/Tilia/Fixity/PlanSpec.hs
--- a/tests/Tilia/Fixity/PlanSpec.hs
+++ b/tests/Tilia/Fixity/PlanSpec.hs
@@ -22,7 +22,7 @@
 import Control.Exception (bracket)
 import Control.Monad (when)
 import Data.ByteString.Lazy qualified as BL
-import Data.Choice (pattern Is)
+import Data.Choice (pattern Do, pattern Don't, pattern Is)
 import Data.Foldable (traverse_)
 import Data.IORef (IORef, modifyIORef', newIORef, readIORef, writeIORef)
 import Data.List (isInfixOf)
@@ -34,16 +34,30 @@
 import Data.Text qualified as T
 import Data.Text.Encoding qualified as T
 import Data.Text.IO qualified as T
-import System.Directory (createDirectoryIfMissing)
+import System.Directory
+  ( createDirectoryIfMissing,
+    doesFileExist,
+    getPermissions,
+    setOwnerExecutable,
+    setPermissions,
+  )
 import System.Environment (lookupEnv, setEnv, unsetEnv)
-import System.FilePath (dropExtension, takeBaseName, takeDirectory, (</>))
+import System.FilePath (dropExtension, searchPathSeparator, takeBaseName, takeDirectory, (</>))
 import System.IO.Temp (withSystemTempDirectory)
+import System.Info qualified
 import Test.Hspec
 import Tilia.Fixity
-import Tilia.Fixity.PackageDb (compilerIdentity)
-import Tilia.Fixity.Plan
+import Tilia.Fixity.PackageDb
+  ( Installed (..),
+    InstalledPackage (..),
+    compilerIdentity,
+    readInstalledPackages,
+  )
+import Tilia.Fixity.Plan hiding (checkReadiness, prepareWith)
+import Tilia.Fixity.Plan qualified as Plan
 import Tilia.Parser
 import Tilia.Process (readProgramOutput)
+import Tilia.WithProjectPlan (withProjectPlan)
 
 spec :: Spec
 spec = do
@@ -55,10 +69,8 @@
   gitDependencies
   repositories
   packageCache
-  plan <- runIO (readBuildPlan (planPathFor "."))
-  case plan of
-    Left _ -> unavailable "no build plan; run cabal build first"
-    Right p -> withPlan p
+  givenPlans
+  withProjectPlan withPlan
 
 -- | What a cached failure is filed under.
 --
@@ -69,22 +81,24 @@
 tokens :: Spec
 tokens = describe "the token a plan is cached under" $ do
   it "differs between environments over the same plan" $
-    planToken "/one/bin/ghc-pkg" onePackage
-      `shouldNotBe` planToken "/another/bin/ghc-pkg" onePackage
+    tokenForEnvAndBuildPlan "/one/bin/ghc-pkg" onePackage
+      `shouldNotBe` tokenForEnvAndBuildPlan "/another/bin/ghc-pkg" onePackage
 
   it "differs between plans in the same environment" $
-    planToken here onePackage `shouldNotBe` planToken here noPackages
+    tokenForEnvAndBuildPlan here onePackage
+      `shouldNotBe` tokenForEnvAndBuildPlan here noPackages
 
   it "is the same twice over for the same plan and environment" $
-    planToken here onePackage `shouldBe` planToken here onePackage
+    tokenForEnvAndBuildPlan here onePackage
+      `shouldBe` tokenForEnvAndBuildPlan here onePackage
 
   it "asks the environment it is actually going to read in" $ do
-    asked <- tokenFor onePackage
+    asked <- tokenForBuildPlan onePackage
     environment <- compilerIdentity
-    asked `shouldBe` planToken environment onePackage
+    asked `shouldBe` tokenForEnvAndBuildPlan environment onePackage
   where
     here = "/somewhere/bin/ghc-pkg"
-    noPackages = BuildPlan {bpCompiler = "ghc-9.10.3", bpPackages = []}
+    noPackages = BuildPlan{bpCompiler = "ghc-9.10.3", bpPackages = []}
     onePackage =
       BuildPlan
         { bpCompiler = "ghc-9.10.3",
@@ -98,6 +112,20 @@
             ]
         }
 
+-- | 'Plan.checkReadiness', with the cache in use as it is by default.
+checkReadiness :: [PlanComponent] -> FilePath -> IO Readiness
+checkReadiness = Plan.checkReadiness (Do #useCache)
+
+-- | 'Plan.prepareWith', with the cache in use as it is by default.
+prepareWith ::
+  ([String] -> IO (Either Text ())) ->
+  Futility ->
+  [PlanComponent] ->
+  FilePath ->
+  Readiness ->
+  IO (Either Text ())
+prepareWith = Plan.prepareWith (Do #useCache) (Do #download)
+
 -- | What a run does before it trusts the plan.
 --
 -- These need no plan of their own and no @cabal@: the point is the order of
@@ -112,7 +140,7 @@
             when (args == solving) (writePlan dir wantingATarball)
             pure (Right ())
       checkReadiness [] dir `shouldReturn` PlanMissing
-      prepareWith cabal forgetfulSolves [] dir PlanMissing `shouldReturn` Right ()
+      prepareWith cabal undiscoveredFutility [] dir PlanMissing `shouldReturn` Right ()
       readIORef steps
         `shouldReturn` [solving, fetching]
 
@@ -121,19 +149,28 @@
       steps <- newIORef []
       readiness <- checkReadiness [] dir
       readiness `shouldBe` SourcesMissing ["tilia-phantom"]
-      prepareWith (obliging steps) forgetfulSolves [] dir readiness `shouldReturn` Right ()
+      prepareWith (obliging steps) undiscoveredFutility [] dir readiness `shouldReturn` Right ()
       readIORef steps `shouldReturn` [fetching]
 
+  it "fetches nothing when told not to download" $
+    withTempProject (Just wantingATarball) $ \dir -> do
+      steps <- newIORef []
+      readiness <- checkReadiness [] dir
+      readiness `shouldBe` SourcesMissing ["tilia-phantom"]
+      Plan.prepareWith (Do #useCache) (Don't #download) (obliging steps) undiscoveredFutility [] dir readiness
+        `shouldReturn` Right ()
+      readIORef steps `shouldReturn` []
+
   it "runs nothing at all when nothing is missing" $ do
     steps <- newIORef []
-    prepareWith (obliging steps) forgetfulSolves [] "." Ready `shouldReturn` Right ()
+    prepareWith (obliging steps) undiscoveredFutility [] "." Ready `shouldReturn` Right ()
     readIORef steps `shouldReturn` []
 
   it "does not go on to fetch when the solve fails" $
     withTempProject Nothing $ \dir -> do
       steps <- newIORef []
       let cabal args = record steps args >> pure (Left "cabal said no")
-      prepareWith cabal forgetfulSolves [] dir PlanMissing `shouldReturn` Left "cabal said no"
+      prepareWith cabal undiscoveredFutility [] dir PlanMissing `shouldReturn` Left "cabal said no"
       readIORef steps `shouldReturn` [solving, narrowSolve]
 
   it "asks about the test suites and the benchmarks, not the library alone" $
@@ -143,7 +180,7 @@
             record steps args
             when (args == solving) (writePlan dir wantingATarball)
             pure (Right ())
-      _ <- prepareWith cabal forgetfulSolves [] dir PlanMissing
+      _ <- prepareWith cabal undiscoveredFutility [] dir PlanMissing
       asked <- readIORef steps
       asked `shouldSatisfy` all (\args -> wholeProject `Data.List.isSuffixOf` args)
 
@@ -157,7 +194,7 @@
               else do
                 when (args == narrowSolve) (writePlan dir wantingATarball)
                 pure (Right ())
-      prepareWith cabal forgetfulSolves [] dir PlanMissing `shouldReturn` Right ()
+      prepareWith cabal undiscoveredFutility [] dir PlanMissing `shouldReturn` Right ()
       readIORef steps
         `shouldReturn` [solving, narrowSolve, fetching, narrowFetch]
 
@@ -188,7 +225,7 @@
               record steps args
               when (args == solving) (writePlan dir twoComponents)
               pure (Right ())
-        prepareWith cabal forgetfulSolves [component "test:tests"] dir (PlanNarrow ["thing:test:tests"])
+        prepareWith cabal undiscoveredFutility [component "test:tests"] dir (PlanNarrow ["thing:test:tests"])
           `shouldReturn` Right ()
         readIORef steps `shouldReturn` [solving]
 
@@ -208,13 +245,13 @@
               record steps args
               when (args == solving) (writePlan dir twoComponents)
               pure (Right ())
-            solves =
-              forgetfulSolves
+            futility =
+              undiscoveredFutility
                 { solveWasFutile = readIORef futile,
                   rememberFutileSolve = writeIORef futile True
                 }
             narrow = PlanNarrow ["thing:test:tests"]
-            once = prepareWith cabal solves [component "test:tests"] dir narrow
+            once = prepareWith cabal futility [component "test:tests"] dir narrow
         once `shouldReturn` Right ()
         readIORef futile `shouldReturn` True
         once `shouldReturn` Right ()
@@ -228,7 +265,7 @@
               when (args == solving) (writePlan dir narrowAndWanting)
               pure (Right ())
             narrow = PlanNarrow ["thing:test:tests"]
-        prepareWith cabal forgetfulSolves [component "test:tests"] dir narrow
+        prepareWith cabal undiscoveredFutility [component "test:tests"] dir narrow
           `shouldReturn` Right ()
         readIORef steps
           `shouldReturn` [solving, fetching]
@@ -237,13 +274,13 @@
       withTempProject (Just narrowAndWanting) $ \dir -> do
         steps <- newIORef []
         futile <- newIORef True
-        let solves =
-              forgetfulSolves
+        let futility =
+              undiscoveredFutility
                 { solveWasFutile = readIORef futile,
                   rememberFutileSolve = writeIORef futile True
                 }
             narrow = PlanNarrow ["thing:test:tests"]
-        prepareWith (obliging steps) solves [component "test:tests"] dir narrow
+        prepareWith (obliging steps) futility [component "test:tests"] dir narrow
           `shouldReturn` Right ()
         readIORef steps `shouldReturn` [fetching]
 
@@ -251,14 +288,14 @@
       withTempProject (Just narrowAndWanting) $ \dir -> do
         steps <- newIORef []
         refused <- newIORef []
-        let solves =
-              forgetfulSolves
+        let futility =
+              undiscoveredFutility
                 { solveWasFutile = pure True,
                   fetchWasFutileFor = readIORef refused,
                   rememberFutileFetch = writeIORef refused
                 }
             narrow = PlanNarrow ["thing:test:tests"]
-            again = prepareWith (obliging steps) solves [component "test:tests"] dir narrow
+            again = prepareWith (obliging steps) futility [component "test:tests"] dir narrow
         again `shouldReturn` Right ()
         readIORef refused `shouldReturn` ["tilia-phantom"]
         again `shouldReturn` Right ()
@@ -272,12 +309,12 @@
               record steps args
               when (args == solving) (writePlan dir threeComponents)
               pure (Right ())
-            solves =
-              forgetfulSolves
+            futility =
+              undiscoveredFutility
                 { solveWasFutile = readIORef futile,
                   rememberFutileSolve = writeIORef futile True
                 }
-        prepareWith cabal solves [component "test:tests"] dir (PlanNarrow ["thing:test:tests"])
+        prepareWith cabal futility [component "test:tests"] dir (PlanNarrow ["thing:test:tests"])
           `shouldReturn` Right ()
         readIORef futile `shouldReturn` False
         readIORef steps `shouldReturn` [solving]
@@ -443,6 +480,112 @@
       withLayouts $
         \xdg _ -> guessedPackageCacheRoot `shouldReturn` xdg
 
+-- | A plan handed over to be taken as it is.
+givenPlans :: Spec
+givenPlans = describe "a plan trusted as up to date" $ do
+  it "finds a local package it names relatively under the project" $
+    withGivenPlan [] $ \project planFile ->
+      readGivenPlan project planFile >>= \case
+        Left why -> expectationFailure (T.unpack why)
+        Right plan -> do
+          resolver <- newResolverVia (Do #useCache) [FromInterface] plan
+          fixities <- askFixities resolver "Ops"
+          (Map.lookup (InTerms, OpName "<+>") =<< fixities)
+            `shouldBe` Just (Fixity LeftAssoc 6)
+
+  it "fetches nothing where every dependency is installed" $ do
+    installed <- installedPackages <$> readInstalledPackages
+    case installed of
+      [] -> pendingWith "nothing installed where this runs"
+      p : _ ->
+        withGivenPlan [dependency (ipName p) (ipVersion p)] $ \project planFile ->
+          filter (== "fetch") . fst <$> runsCabal (fetchingFor project planFile)
+            `shouldReturn` []
+
+  it "fetches what is not installed, all in one go" $
+    withGivenPlan [unavailable, dependency "tilia-nowhere-either" "1.0"] $ \project planFile ->
+      filter (== "fetch") . fst <$> runsCabal (fetchingFor project planFile)
+        `shouldReturn` ["fetch"]
+
+  it "runs no cabal where it reads interfaces alone, whatever it is asked" $
+    withGivenPlan [unavailable] $ \project planFile ->
+      fst
+        <$> runsCabal
+          ( readGivenPlan project planFile >>= \case
+              Left why -> expectationFailure (T.unpack why)
+              Right plan -> do
+                resolver <- newResolverVia (Do #useCache) [FromInterface] plan
+                traverse_ (askFixities resolver) ["Ops", "Nowhere.At.All"]
+          )
+        `shouldReturn` []
+  where
+    fetchingFor project planFile =
+      readGivenPlan project planFile
+        >>= traverse_ (fetchUninstalled (Do #useCache) project)
+    unavailable = dependency "tilia-nowhere-installed" "1.0"
+    dependency name version =
+      "{\"type\":\"configured\",\"pkg-name\":\""
+        <> name
+        <> "\",\"pkg-version\":\""
+        <> version
+        <> "\",\"pkg-src\":{\"type\":\"repo-tar\",\"repo\":\
+           \{\"type\":\"secure-repo\",\"uri\":\"http://hackage.haskell.org/\"}}}"
+
+-- | A project with one local module declaring @infixl 6 <+>@, and a plan
+-- for it kept outside of it that names the project relatively, as
+-- @haskell.nix@ writes it, along with the other entries given.
+withGivenPlan :: [Text] -> (FilePath -> FilePath -> Expectation) -> Expectation
+withGivenPlan others act =
+  withSystemTempDirectory "tilia-given" $ \dir -> do
+    let project = dir </> "project"
+        planFile = dir </> "elsewhere" </> "plan.json"
+    createDirectoryIfMissing True (project </> "src")
+    createDirectoryIfMissing True (takeDirectory planFile)
+    T.writeFile (project </> "fake.cabal") $
+      T.unlines
+        [ "cabal-version: 2.4",
+          "name: fake",
+          "version: 0.1.0.0",
+          "library",
+          "  exposed-modules: Ops",
+          "  hs-source-dirs: src",
+          "  default-language: Haskell2010"
+        ]
+    T.writeFile (project </> "src" </> "Ops.hs") $
+      T.unlines
+        [ "module Ops ((<+>)) where",
+          "infixl 6 <+>",
+          "(<+>) :: a -> a -> a",
+          "(<+>) = const"
+        ]
+    T.writeFile planFile $
+      "{\"compiler-id\":\"ghc-0.0\",\"install-plan\":["
+        <> T.intercalate
+          ","
+          ( "{\"pkg-name\":\"fake\",\"pkg-version\":\"0.1.0.0\",\
+            \\"pkg-src\":{\"type\":\"local\",\"path\":\"./.\"}}"
+              : others
+          )
+        <> "]}"
+    withEnvironment [("XDG_CACHE_HOME", dir </> "cache")] (act project planFile)
+
+-- | The @cabal@ commands something runs, as told by a stand-in put first
+-- on the path that fails, and what it came to.
+runsCabal :: IO a -> IO ([String], a)
+runsCabal act
+  | System.Info.os == "mingw32" = pendingWith "the stand-in is a shell script" >> (,) [] <$> act
+  | otherwise =
+      withSystemTempDirectory "tilia-cabal" $ \bin -> do
+        let stand = bin </> "cabal"
+            commandLog = bin </> "commands"
+        writeFile stand ("#!/bin/sh\necho \"$1\" >> '" <> commandLog <> "'\nexit 1\n")
+        setPermissions stand . setOwnerExecutable True =<< getPermissions stand
+        path <- maybe "" (searchPathSeparator :) <$> lookupEnv "PATH"
+        answer <- withEnvironment [("PATH", bin <> path)] act
+        ran <- doesFileExist commandLog
+        commands <- if ran then lines <$> readFile commandLog else pure []
+        pure (commands, answer)
+
 -- | Run something against a home and an XDG cache directory of its own,
 -- handing it both of the places a cache could then be in.
 withLayouts :: (FilePath -> FilePath -> Expectation) -> Expectation
@@ -464,9 +607,9 @@
 -- | Run something on where @plannedTarballs@ looked, against a package
 -- cache holding the entries given.
 withCache ::
-  -- | Repository directory, package, version — one per cached tarball
+  -- | Repository directory, package, version — one per cached tarball.
   [(FilePath, Text, Text)] ->
-  -- | The plan to read it against
+  -- | The plan to read it against.
   Text ->
   (FilePath -> Expectation) ->
   Expectation
@@ -483,7 +626,7 @@
           Right plan ->
             plannedTarballs plan >>= \case
               [(_, found)] -> act found
-              other -> expectationFailure (show (map snd other))
+              other -> expectationFailure (show (fmap snd other))
   where
     put cabalDir (repo, held, version) = do
       let at =
@@ -554,7 +697,7 @@
 sourcesOf dir =
   readBuildPlan (planPathFor dir) >>= \case
     Left why -> error (T.unpack why)
-    Right plan -> pure (map ppSource (bpPackages plan))
+    Right plan -> pure (fmap ppSource (bpPackages plan))
 
 -- | A project whose one dependency is a @source-repository-package@, with
 -- the clones given unpacked where @cabal@ unpacks them.
@@ -1416,7 +1559,7 @@
               "name: fake",
               "version: 0.1.0.0",
               "library",
-              "  exposed-modules: " <> T.intercalate ", " (map named (haskellIn sources)),
+              "  exposed-modules: " <> T.intercalate ", " (fmap named (haskellIn sources)),
               "  hs-source-dirs: src",
               "  default-language: Haskell2010"
             ]
@@ -1472,7 +1615,7 @@
           "name: " <> name,
           "version: " <> version,
           "library",
-          "  exposed-modules: " <> T.intercalate ", " (map moduleIn sources),
+          "  exposed-modules: " <> T.intercalate ", " (fmap moduleIn sources),
           "  hs-source-dirs: .",
           "  default-language: Haskell2010"
         ]
@@ -1510,8 +1653,3 @@
 -- with nothing below it.
 unreadOnly :: Text -> NonEmpty ModuleChain
 unreadOnly m = ModuleChain (m :| []) :| []
-
--- | Say why nothing could be tested, once, instead of failing repeatedly.
-unavailable :: String -> Spec
-unavailable reason =
-  it "needs a built project" $ pendingWith reason
diff --git a/tests/Tilia/FixitySpec.hs b/tests/Tilia/FixitySpec.hs
--- a/tests/Tilia/FixitySpec.hs
+++ b/tests/Tilia/FixitySpec.hs
@@ -134,7 +134,7 @@
         `shouldBe` []
 
     it "declines one that writes an operator both agree to disagree about" $
-      map snd (unsettledIn "module M where\nimport Terms\nimport Other.Terms\nf a b = a :> b\n")
+      fmap snd (unsettledIn "module M where\nimport Terms\nimport Other.Terms\nf a b = a :> b\n")
         `shouldBe` [Ambiguous]
 
   describe "what a module says it exports" $ do
@@ -153,33 +153,6 @@
       exportsOfSource "module M (module Data.Map) where\n"
         `shouldBe` Just [ExportModule "Data.Map"]
 
-  describe "the operators an export list names" $ do
-    it "takes them from an explicit list" $
-      exportedIn "module M ((<+>), (<?>), f) where\n"
-        `shouldBe` Just [OpName "<+>", OpName "<?>", OpName "f"]
-
-    it "takes the members of a class the module declares itself" $
-      exportedIn
-        "module M (C (..)) where\nclass C a where\n  infixr 8 .=\n  (.=) :: a -> a -> Int\n"
-        `shouldBe` Just [OpName ".=", OpName "C"]
-
-    it "takes the constructors of a type the module declares itself" $
-      exportedIn "module M (T (..)) where\ndata T = A | Int :| Int\n"
-        `shouldBe` Just [OpName ":|", OpName "A", OpName "T"]
-
-    it "knows nothing of a type the module only passes on" $
-      exportedIn "module M (C (..)) where\nimport Elsewhere\n" `shouldBe` Nothing
-
-    it "knows nothing of a module that hands a whole module on" $
-      exportedIn "module M ((<+>), module Data.Map) where\n" `shouldBe` Nothing
-
-    it "takes what a module with no export list declares" $
-      exportedIn "module M where\ninfixr 5 <+>\ninfixl 6 <?>\n"
-        `shouldBe` Just [OpName "<+>", OpName "<?>"]
-
-    it "finds nothing in a module with no list and no declarations" $
-      exportedIn "module M where\nf = 1\n" `shouldBe` Just []
-
   describe "which unread module an unsettled operator is blamed on" $ do
     it "passes over one whose export list has no such operator" $
       lookupFixity (scopeKnowing [("Opaque", ["<+>"])] usesUnknown) InTerms Nothing (OpName "<??>")
@@ -426,7 +399,7 @@
         `shouldBe` []
 
     it "would be caught between two spellings were the Prelude assumed" $
-      map snd (unsettledAboutPrelude (Is #implicitPrelude) usingItBothWays)
+      fmap snd (unsettledAboutPrelude (Is #implicitPrelude) usingItBothWays)
         `shouldBe` [Ambiguous]
 
     it "still takes the Prelude where the module does import it" $
@@ -541,7 +514,7 @@
         `shouldBe` [((Just "M", OpName "!"), Ambiguous)]
 
     it "spells a use the way the module wrote it" $
-      map (uncurry operatorSpelling . fst) (unsettledIn "module M where\nimport qualified Opaque as O\nf a b = a O.<+> b\n")
+      fmap (uncurry operatorSpelling . fst) (unsettledIn "module M where\nimport qualified Opaque as O\nf a b = a O.<+> b\n")
         `shouldBe` ["O.<+>"]
 
   describe "parsing with the module's own pragmas"
@@ -591,7 +564,7 @@
 -- declaration, however many places it lands in.
 declaredIn :: Text -> [(OpName, Fixity)]
 declaredIn =
-  Map.toList . Map.fromList . map (\((_, op), fixity) -> (op, fixity)) . declaredWithNamespaces
+  Map.toList . Map.fromList . fmap (\((_, op), fixity) -> (op, fixity)) . declaredWithNamespaces
 
 -- | The same, keeping the namespace each governs.
 declaredWithNamespaces :: Text -> [((Namespace, OpName), Fixity)]
@@ -607,8 +580,8 @@
   resolveScope (Is #implicitPrelude) knowingExports . pmModule . parsed
 
 -- | What is known in a world made of 'exportsOf' alone.
-knowingExports :: Known
-knowingExports = nothingKnown {knownFixities = exportsOf}
+knowingExports :: KnownModules
+knowingExports = noKnownModules{knownFixities = exportsOf}
 
 -- | The one import blamed for an operator, unread on its own account and so
 -- with nothing below it. What every answer here was before a chain could be
@@ -633,11 +606,11 @@
 scopeKnowing said =
   resolveScope
     (Is #implicitPrelude)
-    knowingExports {knownExportNames = exportNamesOf}
+    knowingExports{knownExportNames = exportNamesOf}
     . pmModule
     . parsed
   where
-    exportNamesOf m = Set.fromList . map OpName <$> lookup m said
+    exportNamesOf m = Set.fromList . fmap OpName <$> lookup m said
 
 -- | What each name a module declares carries with it, in a settled order.
 childrenIn :: Text -> [(OpName, [OpName])]
@@ -648,7 +621,7 @@
 exportedChildrenIn = settled . moduleChildren . pmModule . parsed
 
 settled :: Map.Map OpName (Set.Set OpName) -> [(OpName, [OpName])]
-settled = map (fmap Set.toList) . Map.toList
+settled = fmap (fmap Set.toList) . Map.toList
 
 -- | A scope over a world where Carrier keeps @:|@ under @T@.
 --
@@ -658,7 +631,7 @@
 scopeCarrying source =
   resolveScope
     (Is #implicitPrelude)
-    knowingExports {knownChildren = childrenOf}
+    knowingExports{knownChildren = childrenOf}
     (pmModule (parsed ("module M where\n" <> source)))
   where
     childrenOf = \case
@@ -681,19 +654,15 @@
 scopeSuspecting carries source =
   resolveScope
     (Is #implicitPrelude)
-    knowingExports {knownChildren = childrenOf}
+    knowingExports{knownChildren = childrenOf}
     (pmModule (parsed ("module M where\n" <> source <> "f a b = a <??> b\n")))
   where
     childrenOf m =
       Map.fromList
-        [ (OpName parent, Set.fromList (map OpName kids))
+        [ (OpName parent, Set.fromList (fmap OpName kids))
         | (parent, kids) <- Map.findWithDefault [] m (Map.fromList carries)
         ]
 
--- | The operators a module's export list names, in a settled order.
-exportedIn :: Text -> Maybe [OpName]
-exportedIn = fmap Set.toList . exportedOperators . pmModule . parsed
-
 -- | The uses of an operator a module makes that its scope cannot settle.
 unsettledIn :: Text -> [((Maybe Text, OpName), Unknown)]
 unsettledIn src =
@@ -718,8 +687,8 @@
 --
 -- Kept out of 'exportsOf' so that a Prelude which declares something does
 -- not have to be reckoned with by every other test in the file.
-disagreeingAboutPrelude :: Known
-disagreeingAboutPrelude = nothingKnown {knownFixities = said}
+disagreeingAboutPrelude :: KnownModules
+disagreeingAboutPrelude = noKnownModules{knownFixities = said}
   where
     said = \case
       "Prelude" -> whichever [(OpName "<%>", Fixity RightAssoc 6)]
diff --git a/tests/Tilia/Gen.hs b/tests/Tilia/Gen.hs
--- a/tests/Tilia/Gen.hs
+++ b/tests/Tilia/Gen.hs
@@ -100,11 +100,11 @@
 
 -- | Build a document.
 genDoc ::
-  -- | Whether 'DVariant' may appear
+  -- | Whether 'DVariant' may appear.
   Bool ->
-  -- | Whether things that force a break may appear
+  -- | Whether things that force a break may appear.
   Bool ->
-  -- | The size parameter
+  -- | The size parameter.
   Int ->
   Gen Doc
 genDoc withVariant withBreaks = go
@@ -145,7 +145,7 @@
   DBreak -> [DEmpty, DSpace]
   DSoftBreak -> [DEmpty]
   DHardBreak -> [DEmpty]
-  DVerbatimBreak _ -> [DEmpty]
+  DVerbatimBreak _ _ -> [DEmpty]
   DCloseLine -> [DEmpty]
   DHoldBack t -> DHoldBack <$> filter (not . T.null) (T.inits t)
   DCat a b -> [DEmpty, a, b] <> [DCat a' b | a' <- shrinkDoc a] <> [DCat a b' | b' <- shrinkDoc b]
@@ -155,7 +155,7 @@
   DVariant a b -> [DEmpty, a, b]
   DLocated s d -> [DEmpty, d] <> [DLocated s d' | d' <- shrinkDoc d]
   DFence s d -> [DEmpty, d] <> [DFence s d' | d' <- shrinkDoc d]
-  DCppChoice bs e -> [DEmpty, e] <> map snd bs
+  DCppChoice bs e -> [DEmpty, e] <> fmap snd bs
   DCppDirective _ _ -> [DEmpty]
 
 -- | Every fragment of literal text the document contains, in order.
@@ -171,7 +171,7 @@
   DBreak -> []
   DSoftBreak -> []
   DHardBreak -> []
-  DVerbatimBreak _ -> []
+  DVerbatimBreak _ _ -> []
   DCloseLine -> []
   DHoldBack t -> [t]
   DCat a b -> docTexts a <> docTexts b
diff --git a/tests/Tilia/NewlineSpec.hs b/tests/Tilia/NewlineSpec.hs
--- a/tests/Tilia/NewlineSpec.hs
+++ b/tests/Tilia/NewlineSpec.hs
@@ -10,7 +10,7 @@
 spec = do
   describe "the style a text is written in" $ do
     it "is read off the first ending there is" $
-      map getNewlineStyle ["a\r\nb\n", "a\nb\r\n", "a\nb\n", "a\r\nb\r\n"]
+      fmap getNewlineStyle ["a\r\nb\n", "a\nb\r\n", "a\nb\n", "a\r\nb\r\n"]
         `shouldBe` [CrLf, Lf, Lf, CrLf]
 
     it "is newlines for a text that ends no line at all" $
@@ -25,7 +25,7 @@
       setNewlineStyle Lf "a\r\nb\r\n" `shouldBe` "a\nb\n"
 
     it "can be told to set the style already there, and change nothing" $
-      map (\(style, t) -> setNewlineStyle style t) [(CrLf, "a\r\nb\r\n"), (Lf, "a\nb\n")]
+      fmap (\(style, t) -> setNewlineStyle style t) [(CrLf, "a\r\nb\r\n"), (Lf, "a\nb\n")]
         `shouldBe` ["a\r\nb\r\n", "a\nb\n"]
 
     it "brings a text whose endings disagree to one of them" $ do
@@ -37,7 +37,7 @@
       setNewlineStyle CrLf "x = \"a\\\r b\"\n" `shouldBe` "x = \"a\\\r b\"\r\n"
 
     it "has nothing to do to a text that ends no line" $
-      map (`setNewlineStyle` "module A where") [Lf, CrLf]
+      fmap (`setNewlineStyle` "module A where") [Lf, CrLf]
         `shouldBe` ["module A where", "module A where"]
 
     it "takes a text out and back unchanged, whichever style it began in" $
diff --git a/tests/Tilia/PackageSpec.hs b/tests/Tilia/PackageSpec.hs
deleted file mode 100644
--- a/tests/Tilia/PackageSpec.hs
+++ /dev/null
@@ -1,218 +0,0 @@
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Information obtained from @.cabal@ files.
-module Tilia.PackageSpec (spec) where
-
-import Data.List (isSuffixOf, sort)
-import Data.Text (Text)
-import Data.Text qualified as T
-import Data.Text.IO qualified as T
-import GHC.LanguageExtensions.Type (Extension (..))
-import System.Directory (createDirectoryIfMissing, removeFile)
-import System.FilePath ((</>))
-import System.IO.Temp (withSystemTempDirectory)
-import Test.Hspec
-import Tilia.Package (PackageProblem (..), newPackageReader)
-
-spec :: Spec
-spec = do
-  describe "the component a file belongs to" $ do
-    it "is the one whose source directory holds it" $
-      inPackage twoComponents ["src", "test"] $ \root -> do
-        library <- asked (root </> "src" </> "M.hs")
-        suite <- asked (root </> "test" </> "S.hs")
-        (has ImportQualifiedPost library, has ImportQualifiedPost suite)
-          `shouldBe` (True, False)
-
-    it "settles the extensions separately for each" $
-      inPackage twoComponents ["src", "test"] $ \root -> do
-        library <- asked (root </> "src" </> "M.hs")
-        suite <- asked (root </> "test" </> "S.hs")
-        (has OverloadedStrings library, has OverloadedStrings suite)
-          `shouldBe` (False, True)
-
-    it "is none of them when the file is outside every source directory" $
-      inPackage twoComponents ["src", "test", "scratch"] $ \root ->
-        (unclaimed <$> asked (root </> "scratch" </> "X.hs"))
-          `shouldReturn` True
-
-    it "is the package's own directory when it names no source directory" $
-      inPackage besideTheCabalFile [] $ \root ->
-        (has ImportQualifiedPost <$> asked (root </> "M.hs"))
-          `shouldReturn` True
-
-    it "is the nearer one when a wider component covers it as well" $
-      inPackage overTheWholeTree ["tests"] $ \root ->
-        (has ImportQualifiedPost <$> asked (root </> "tests" </> "S.hs"))
-          `shouldReturn` True
-
-    it "is still the wider one for a file only it covers" $
-      inPackage overTheWholeTree ["tests"] $ \root ->
-        (has ImportQualifiedPost <$> asked (root </> "M.hs"))
-          `shouldReturn` False
-
-  describe "the extensions a component puts in force" $ do
-    it "are the language edition's" $
-      inPackage twoComponents ["src"] $ \root -> do
-        library <- asked (root </> "src" </> "M.hs")
-        (length <$> library) `shouldSatisfy` either (const False) (> 40)
-
-    it "can be turned off again by default-extensions" $
-      inPackage refusesAnEdition ["src"] $ \root ->
-        (has ImportQualifiedPost <$> asked (root </> "src" </> "M.hs"))
-          `shouldReturn` False
-
-  describe "a file nothing can be settled for" $ do
-    it "says so when there is no package above it" $
-      withSystemTempDirectory "tilia-nopackage" $ \root ->
-        asked (root </> "M.hs")
-          `shouldReturn` Left NoPackageFile
-
-    it "says so, and how, when the package does not parse" $
-      inPackage "library\n  hs-source-dirs\n" [] $ \root ->
-        asked (root </> "M.hs") >>= \case
-          Left (PackageMalformed file complaints) -> do
-            file `shouldSatisfy` (("demo.cabal" `isSuffixOf`))
-            complaints `shouldSatisfy` not . null
-          other -> expectationFailure ("expected a parse failure, got " <> show other)
-
-  describe "a reader kept between files" $ do
-    it "answers as a fresh one would" $
-      inPackage twoComponents ["src", "test"] $ \root -> do
-        ask <- newPackageReader
-        kept <- traverse ask (modules root)
-        fresh <- traverse asked (modules root)
-        kept `shouldBe` fresh
-
-    it "reads a package once, not once per file" $
-      inPackage twoComponents ["src"] $ \root -> do
-        ask <- newPackageReader
-        first <- ask (root </> "src" </> "A.hs")
-        removeFile (root </> "demo.cabal")
-        ask (root </> "src" </> "B.hs") `shouldReturn` first
-
-    it "remembers every directory the walk went through" $
-      inPackage twoComponents ["src" </> "deep"] $ \root -> do
-        ask <- newPackageReader
-        deep <- ask (root </> "src" </> "deep" </> "A.hs")
-        removeFile (root </> "demo.cabal")
-        ask (root </> "src" </> "B.hs") `shouldReturn` deep
-
-    it "is what makes those pass, and not the file surviving" $
-      inPackage twoComponents ["src"] $ \root -> do
-        removeFile (root </> "demo.cabal")
-        (unreadableOrMissing <$> asked (root </> "src" </> "A.hs"))
-          `shouldReturn` True
-
-----------------------------------------------------------------------------
--- The packages the tests are run against
-
--- | A library on @GHC2021@ and a test suite on @Haskell2010@, so that the
--- two disagree about everything worth asking.
-twoComponents :: Text
-twoComponents =
-  T.unlines
-    [ "cabal-version: 2.4",
-      "name: demo",
-      "version: 0",
-      "",
-      "library",
-      "  exposed-modules: M",
-      "  hs-source-dirs: src",
-      "  default-language: GHC2021",
-      "",
-      "test-suite spec",
-      "  type: exitcode-stdio-1.0",
-      "  main-is: S.hs",
-      "  hs-source-dirs: test",
-      "  default-language: Haskell2010",
-      "  default-extensions: OverloadedStrings"
-    ]
-
--- | A library that names no @hs-source-dirs@, so its modules sit beside the
--- @.cabal@ file.
-besideTheCabalFile :: Text
-besideTheCabalFile =
-  T.unlines
-    [ "cabal-version: 2.4",
-      "name: demo",
-      "version: 0",
-      "",
-      "library",
-      "  exposed-modules: M",
-      "  default-language: GHC2021"
-    ]
-
--- | A library that spreads over the whole tree, and a suite inside it.
---
--- The library names no @hs-source-dirs@ and so takes the package
--- directory, which holds the test suite's directory as well as its own
--- modules.
-overTheWholeTree :: Text
-overTheWholeTree =
-  T.unlines
-    [ "cabal-version: 2.4",
-      "name: demo",
-      "version: 0",
-      "",
-      "library",
-      "  exposed-modules: M",
-      "  default-language: Haskell2010",
-      "",
-      "test-suite spec",
-      "  type: exitcode-stdio-1.0",
-      "  main-is: S.hs",
-      "  hs-source-dirs: tests",
-      "  default-language: GHC2021"
-    ]
-
--- | An edition, and then one of the things it brings taken back out.
-refusesAnEdition :: Text
-refusesAnEdition =
-  T.unlines
-    [ "cabal-version: 2.4",
-      "name: demo",
-      "version: 0",
-      "",
-      "library",
-      "  exposed-modules: M",
-      "  hs-source-dirs: src",
-      "  default-language: GHC2021",
-      "  default-extensions: NoImportQualifiedPost"
-    ]
-
-----------------------------------------------------------------------------
--- Running one
-
--- | Write a @.cabal@ file and the given directories, and hand back the root.
-inPackage :: Text -> [FilePath] -> (FilePath -> IO a) -> IO a
-inPackage contents dirs use =
-  withSystemTempDirectory "tilia-package" $ \root -> do
-    T.writeFile (root </> "demo.cabal") contents
-    mapM_ (createDirectoryIfMissing True . (root </>)) (sort dirs)
-    use root
-
--- | Ask about one file with a reader of its own, which is what a test that
--- is not about caching wants.
-asked :: FilePath -> IO (Either PackageProblem [Extension])
-asked path = do
-  ask <- newPackageReader
-  ask path
-
--- | One module in each of the two components.
-modules :: FilePath -> [FilePath]
-modules root = [root </> "src" </> "M.hs", root </> "test" </> "S.hs"]
-
-unreadableOrMissing :: Either PackageProblem [Extension] -> Bool
-unreadableOrMissing = either (const True) (const False)
-
-has :: Extension -> Either PackageProblem [Extension] -> Bool
-has e = either (const False) (e `elem`)
-
-unclaimed :: Either PackageProblem [Extension] -> Bool
-unclaimed = either isFileUnclaimed (const False)
-  where
-    isFileUnclaimed = \case
-      FileUnclaimed _ -> True
-      _ -> False
diff --git a/tests/Tilia/ProjectSpec.hs b/tests/Tilia/ProjectSpec.hs
deleted file mode 100644
--- a/tests/Tilia/ProjectSpec.hs
+++ /dev/null
@@ -1,130 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Finding the project a file belongs to.
-module Tilia.ProjectSpec (spec) where
-
-import System.Directory (createDirectoryIfMissing, withCurrentDirectory)
-import System.FilePath ((</>))
-import System.IO.Temp (withSystemTempDirectory)
-import Test.Hspec
-import Tilia.Project
-
-spec :: Spec
-spec = do
-  describe "in this repository" $ do
-    it "finds the root from the root" $ do
-      root <- findProjectRoot "."
-      (prMarker <$> root) `shouldBe` Just ProjectFile
-
-    it "finds the root from a nested source directory" $ do
-      root <- findProjectRoot "src/Tilia/Printer"
-      (prMarker <$> root) `shouldBe` Just ProjectFile
-
-    it "finds the root from a file rather than a directory" $ do
-      root <- findProjectRoot "src/Tilia/Fixity.hs"
-      (prMarker <$> root) `shouldBe` Just ProjectFile
-
-    it "returns the same directory however it is reached" $ do
-      a <- findProjectRoot "."
-      b <- findProjectRoot "tests/Tilia"
-      c <- findProjectRoot "src/Tilia/Printer/Internal.hs"
-      (prPath <$> a, prPath <$> b) `shouldBe` (prPath <$> a, prPath <$> c)
-      (prPath <$> b) `shouldBe` (prPath <$> c)
-
-  describe "marker precedence" $ do
-    it "prefers cabal.project to a bare .cabal file" $
-      withTree [("cabal.project", ""), ("thing.cabal", "")] $ \dir -> do
-        root <- findProjectRoot dir
-        (prMarker <$> root) `shouldBe` Just ProjectFile
-
-    it "accepts a bare .cabal file when there is no project" $
-      withTree [("thing.cabal", "")] $ \dir -> do
-        root <- findProjectRoot dir
-        (prMarker <$> root) `shouldBe` Just (PackageFile "thing.cabal")
-
-    it "passes over a stack.yaml, which cabal does not read" $
-      withTree [("stack.yaml", ""), ("thing.cabal", "")] $ \dir -> do
-        root <- findProjectRoot dir
-        (prMarker <$> root) `shouldBe` Just (PackageFile "thing.cabal")
-
-    it "climbs out of a stack project to the package it is asked about" $
-      withTree [("stack.yaml", ""), ("packages/inner/inner.cabal", "")] $
-        \dir -> do
-          root <- findProjectRoot (dir </> "packages" </> "inner")
-          prPath <$> root `shouldBe` Just (dir </> "packages" </> "inner")
-
-    it "climbs past a package to the project that contains it"
-      $ withTree
-        [ ("cabal.project", ""),
-          ("packages/inner/placeholder", "")
-        ]
-      $ \dir -> do
-        root <- findProjectRoot (dir </> "packages" </> "inner")
-        (prMarker <$> root) `shouldBe` Just ProjectFile
-
-    it "climbs past a package that has its own .cabal"
-      $ withTree
-        [ ("cabal.project", ""),
-          ("packages/inner/inner.cabal", "")
-        ]
-      $ \dir -> do
-        root <- findProjectRoot (dir </> "packages" </> "inner")
-        (prPath <$> root) `shouldBe` Just dir
-        (prMarker <$> root) `shouldBe` Just ProjectFile
-
-    it "takes the nearest project of the ones above"
-      $ withTree
-        [ ("cabal.project", ""),
-          ("packages/inner/cabal.project", ""),
-          ("packages/inner/inner.cabal", "")
-        ]
-      $ \dir -> do
-        root <- findProjectRoot (dir </> "packages" </> "inner")
-        prPath <$> root `shouldBe` Just (dir </> "packages" </> "inner")
-
-    it "takes the nearest package when no project is above either"
-      $ withTree
-        [ ("outer.cabal", ""),
-          ("packages/inner/inner.cabal", "")
-        ]
-      $ \dir -> do
-        root <- findProjectRoot (dir </> "packages" </> "inner")
-        (prMarker <$> root) `shouldBe` Just (PackageFile "inner.cabal")
-
-    it "climbs to a project past a package that is not the one asked about"
-      $ withTree
-        [ ("cabal.project", ""),
-          ("outer.cabal", ""),
-          ("packages/inner/inner.cabal", "")
-        ]
-      $ \dir -> do
-        root <- findProjectRoot (dir </> "packages" </> "inner")
-        (prMarker <$> root) `shouldBe` Just ProjectFile
-
-  describe "no project" $
-    it "gives up rather than guessing" $
-      withTree [("lonely/Thing.hs", "module Thing where")] $ \dir ->
-        -- A temporary directory has no project above it, so this walks to
-        -- the filesystem root and finds nothing.
-        withCurrentDirectory dir $ do
-          root <- findProjectRoot "lonely"
-          case root of
-            Nothing -> pure ()
-            Just found ->
-              -- Some machines have a stray marker in a parent of the
-              -- system temporary directory; only a genuine find inside the
-              -- tree would be a failure.
-              prPath found `shouldNotBe` (dir </> "lonely")
-
--- | Build a throwaway tree of files and run an action on its root.
-withTree :: [(FilePath, String)] -> (FilePath -> IO a) -> IO a
-withTree files action =
-  withSystemTempDirectory "tilia-project" $ \dir -> do
-    mapM_ (create dir) files
-    action dir
-  where
-    create dir (path, contents) = do
-      let full = dir </> path
-      createDirectoryIfMissing True (parentOf full)
-      writeFile full contents
-    parentOf = reverse . drop 1 . dropWhile (/= '/') . reverse
diff --git a/tests/Tilia/Render/OperatorSpec.hs b/tests/Tilia/Render/OperatorSpec.hs
--- a/tests/Tilia/Render/OperatorSpec.hs
+++ b/tests/Tilia/Render/OperatorSpec.hs
@@ -79,7 +79,7 @@
 leaves :: [Char] -> NonEmpty E
 leaves = \case
   [] -> error "leaves: none"
-  (c : cs) -> Leaf c :| map Leaf cs
+  (c : cs) -> Leaf c :| fmap Leaf cs
 
 -- | @?@ is the operator nothing is known about.
 known :: Char -> Maybe Fixity
diff --git a/tests/Tilia/RenderSpec.hs b/tests/Tilia/RenderSpec.hs
--- a/tests/Tilia/RenderSpec.hs
+++ b/tests/Tilia/RenderSpec.hs
@@ -263,10 +263,10 @@
 
 -- | Format with the given extensions in force, as a package would put them.
 formatUnder :: [Extension] -> [Text] -> [Text]
-formatUnder exts = withSettings defaultRenderConfig {rcExtensions = Set.fromList exts}
+formatUnder exts = withSettings defaultRenderConfig{rcExtensions = Set.fromList exts}
 
 formatWith :: Maybe Scope -> [Text] -> [Text]
-formatWith scope = withSettings defaultRenderConfig {rcScope = scope}
+formatWith scope = withSettings defaultRenderConfig{rcScope = scope}
 
 withSettings :: RenderConfig -> [Text] -> [Text]
 withSettings settings input =
diff --git a/tests/Tilia/RunSpec.hs b/tests/Tilia/RunSpec.hs
--- a/tests/Tilia/RunSpec.hs
+++ b/tests/Tilia/RunSpec.hs
@@ -18,10 +18,10 @@
 import System.FilePath ((</>))
 import System.IO.Temp (withSystemTempDirectory)
 import Test.Hspec
+import Tilia.Cabal.Package (PackageProblem (..))
 import Tilia.Cpp (CppError (..))
 import Tilia.Fixity (ModuleChain (..), OpName (..), Unknown (..))
 import Tilia.Format (FormatError (..), formatErrorExitCode, refused)
-import Tilia.Package (PackageProblem (..))
 import Tilia.Palette (Color (Bad), Palette (..))
 import Tilia.Run
 import Tilia.Utils (lineWidth, visibleLength, wrapTo)
@@ -30,7 +30,7 @@
 spec = do
   describe "telling a refusal from a failure" $ do
     it "counts what we would not touch as a refusal" $
-      map
+      fmap
         refused
         [ PositionPragmas "A.hs",
           CppUnsupported "A.hs" UnsplittableConditional,
@@ -39,7 +39,7 @@
         `shouldBe` [True, True, True]
 
     it "counts what we could not read or make sense of as a failure" $
-      map
+      fmap
         refused
         [ Unreadable "A.hs" "no such file",
           NoPackage "A.hs" NoPackageFile,
@@ -52,12 +52,12 @@
 
   describe "what became of a file" $ do
     it "counts a rewrite as a difference and nothing else" $
-      map differs [Changed "a" "b", Unchanged, decline, failure]
+      fmap differs [Changed "a" "b", Unchanged, decline, failure]
         `shouldBe` [True, False, False, False]
 
     it "keeps refusals and failures apart" $ do
-      map declined [decline, failure, Unchanged] `shouldBe` [True, False, False]
-      map failed [decline, failure, Unchanged] `shouldBe` [False, True, False]
+      fmap declined [decline, failure, Unchanged] `shouldBe` [True, False, False]
+      fmap failed [decline, failure, Unchanged] `shouldBe` [False, True, False]
 
   describe "the status a run leaves behind" $ do
     it "has none to give when nothing failed" $
@@ -79,6 +79,10 @@
     it "is not swayed by a refusal, however many there are" $
       exitCodeOf [("A.hs", decline), ("B.hs", decline)] `shouldBe` Nothing
 
+    it "gives the code of a refusal once refusing is not allowed" $
+      exitCodeOf [("A.hs", failIfDeclined decline), ("B.hs", failIfDeclined Unchanged)]
+        `shouldBe` Just (formatErrorExitCode (PositionPragmas "A.hs"))
+
   describe "the summary an inplace run prints" $ do
     it "counts the files it formatted, indented, by extension" $
       reportOut (inplaceReport Plain [("A.hs", Unchanged), ("B.hs", Changed "a" "b")])
@@ -261,7 +265,7 @@
 
   describe "breaking text to fit" $ do
     it "keeps every line within the room given" $
-      map T.length (wrapTo 20 (T.replicate 40 "word ")) `shouldSatisfy` all (<= 20)
+      fmap T.length (wrapTo 20 (T.replicate 40 "word ")) `shouldSatisfy` all (<= 20)
 
     it "breaks at spaces and nowhere else" $
       wrapTo 12 "one two three four" `shouldBe` ["one two", "three four"]
@@ -285,7 +289,7 @@
     it "breaks a colored line exactly where it breaks the bare one" $ do
       let bare = "alpha beta gamma delta epsilon zeta eta theta"
           lit = T.replace "gamma" "\ESC[36mgamma\ESC[0m" bare
-      map visibleLength (wrapTo 20 lit) `shouldBe` map T.length (wrapTo 20 bare)
+      fmap visibleLength (wrapTo 20 lit) `shouldBe` fmap T.length (wrapTo 20 bare)
 
   describe "how wide anything gets" $ do
     let sprawling =
@@ -293,15 +297,15 @@
             ("another/quite/deeply/nested/one/Module.hs", failure)
           ]
     it "never prints a line wider than it allows itself" $
-      map T.length (reportErr (inplaceReport Plain sprawling))
+      fmap T.length (reportErr (inplaceReport Plain sprawling))
         `shouldSatisfy` all (<= lineWidth)
 
     it "does the same when the reason is enormous" $
-      map T.length (reportErr (inplaceReport Plain [("A.hs", Failed (Unreadable "A.hs" (T.replicate 40 "and more words ")))]))
+      fmap T.length (reportErr (inplaceReport Plain [("A.hs", Failed (Unreadable "A.hs" (T.replicate 40 "and more words ")))]))
         `shouldSatisfy` all (<= lineWidth)
 
     it "wraps what it says when it gives up, too" $
-      map T.length (noted Plain ("✗", Bad) (T.replicate 40 "and more words "))
+      fmap T.length (noted Plain ("✗", Bad) (T.replicate 40 "and more words "))
         `shouldSatisfy` all (<= lineWidth)
 
   describe "reading a file" $ do
@@ -469,7 +473,7 @@
 
 -- | The same, where more than one module could have declared it.
 missingIn :: [Text] -> Outcome
-missingIn = missingThrough . map (ModuleChain . (:| []))
+missingIn = missingThrough . fmap (ModuleChain . (:| []))
 
 -- | Two operators with the one answer between them, which is said once.
 missingTwice :: Text -> Outcome
@@ -509,4 +513,4 @@
 
 -- | A report as one piece of text, with the breaks it was wrapped at undone.
 flattened :: Report -> Text
-flattened = T.unwords . map T.strip . reportErr
+flattened = T.unwords . fmap T.strip . reportErr
diff --git a/tests/Tilia/TargetSpec.hs b/tests/Tilia/TargetSpec.hs
deleted file mode 100644
--- a/tests/Tilia/TargetSpec.hs
+++ /dev/null
@@ -1,307 +0,0 @@
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Working with cabal targets.
-module Tilia.TargetSpec (spec) where
-
-import Data.List (isSuffixOf, sort)
-import Data.Text (Text)
-import Data.Text qualified as T
-import Data.Text.IO qualified as T
-import System.Directory (createDirectoryIfMissing)
-import System.FilePath (takeFileName, (</>))
-import System.IO.Temp (withSystemTempDirectory)
-import Test.Hspec
-import Tilia.Project (Marker (..), ProjectRoot (..), findProjectRoot)
-import Tilia.Target
-
-spec :: Spec
-spec = do
-  describe "reading a target as it was written" $ do
-    it "takes all as everything" $
-      parseTarget "all" `shouldBe` Right Everything
-
-    it "takes a bare word as a name that may be either" $
-      parseTarget "tilia" `shouldBe` Right (Called "tilia")
-
-    it "takes each kind of component" $ do
-      parseTarget "lib:tilia" `shouldBe` Right (Qualified Nothing Lib "tilia")
-      parseTarget "exe:tilia" `shouldBe` Right (Qualified Nothing Exe "tilia")
-      parseTarget "test:tests" `shouldBe` Right (Qualified Nothing Test "tests")
-      parseTarget "bench:speed" `shouldBe` Right (Qualified Nothing Bench "speed")
-
-    it "takes benchmark as a spelling of bench" $
-      parseTarget "benchmark:speed" `shouldBe` Right (Qualified Nothing Bench "speed")
-
-    it "takes a package in front of the kind" $
-      parseTarget "tilia:lib:tilia" `shouldBe` Right (Qualified (Just "tilia") Lib "tilia")
-
-    it "ignores space around it" $
-      parseTarget "  lib:tilia  " `shouldBe` Right (Qualified Nothing Lib "tilia")
-
-    it "refuses an empty target" $
-      parseTarget "" `shouldSatisfy` failed
-
-    it "refuses a kind it does not know" $
-      parseTarget "flib:thing" `shouldSatisfy` failed
-
-    it "refuses more colons than it can account for" $
-      parseTarget "a:lib:b:c" `shouldSatisfy` failed
-
-    it "says what it would have accepted" $
-      case parseTarget "flib:thing" of
-        Left why -> why `shouldSatisfy` T.isInfixOf "lib:"
-        Right _ -> expectationFailure "should not have parsed"
-
-  describe "against this very project" $ do
-    root <- runIO (findProjectRoot ".")
-    case root of
-      Nothing -> it "needs a project" $ pendingWith "no project above the working directory"
-      Just here -> do
-        it "is rooted at the cabal.project, not the .cabal file" $
-          prMarker here `shouldBe` ProjectFile
-
-        it "finds the three components this package declares" $
-          componentsOfTarget here Everything >>= \case
-            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-            Right cs ->
-              sort (map (\c -> (componentKind c, componentName c)) cs)
-                `shouldBe` sort [(Lib, "tilia"), (Exe, "tilia"), (Test, "tests")]
-
-        it "narrows to one component when asked for one" $
-          componentsOfTarget here (Qualified Nothing Lib "tilia") >>= \case
-            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-            Right cs -> map componentDirs cs `shouldBe` [["src"]]
-
-        it "takes the package name as all of its components" $
-          componentsOfTarget here (Called "tilia") >>= \case
-            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-            Right cs -> length cs `shouldBe` 3
-
-        it "refuses a target the project does not hold, and says what it does" $
-          componentsOfTarget here (Called "nothing-like-this") >>= \case
-            Right cs -> expectationFailure ("matched " <> show (length cs) <> " components")
-            Left problem -> do
-              let said = describeTargetProblem problem
-              said `shouldSatisfy` T.isInfixOf "tilia:lib:tilia"
-              said `shouldSatisfy` T.isInfixOf "tilia:test:tests"
-              said `shouldSatisfy` T.isInfixOf "\n  all"
-
-        it "finds this module among the test component's files" $
-          componentsOfTarget here (Qualified Nothing Test "tests") >>= \case
-            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-            Right cs -> do
-              files <- filesOfComponents cs
-              map takeFileName files `shouldSatisfy` elem "TargetSpec.hs"
-
-        it "finds only Haskell in it" $
-          componentsOfTarget here Everything >>= \case
-            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-            Right cs -> do
-              files <- filesOfComponents cs
-              filter (not . haskell) files `shouldBe` []
-
-        it "does not wander into the build directory" $
-          componentsOfTarget here Everything >>= \case
-            Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-            Right cs -> do
-              files <- filesOfComponents cs
-              filter (T.isInfixOf "dist-newstyle" . T.pack) files `shouldBe` []
-
-  describe "against a project made up for the purpose" $ do
-    it "reads the packages a cabal.project names"
-      $ withProject
-        [ ("cabal.project", "packages: one two\n"),
-          ("one/one.cabal", package "one" "src"),
-          ("one/src/A.hs", "module A where\n"),
-          ("two/two.cabal", package "two" "lib"),
-          ("two/lib/B.hs", "module B where\n")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-          Right cs -> sort (map componentPackage cs) `shouldBe` ["one", "two"]
-
-    it "expands a glob in the packages field"
-      $ withProject
-        [ ("cabal.project", "packages: pkgs/*/*.cabal\n"),
-          ("pkgs/one/one.cabal", package "one" "src"),
-          ("pkgs/two/two.cabal", package "two" "src")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-          Right cs -> sort (map componentPackage cs) `shouldBe` ["one", "two"]
-
-    it "passes over a package a comment has taken out"
-      $ withProject
-        [ ("cabal.project", "packages:\n  one\n  -- two\n"),
-          ("one/one.cabal", package "one" "src"),
-          ("two/two.cabal", package "two" "src")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-          Right cs -> map componentPackage cs `shouldBe` ["one"]
-
-    it "reads a packages field continued onto later lines"
-      $ withProject
-        [ ("cabal.project", "packages:\n  one\n  two\n"),
-          ("one/one.cabal", package "one" "src"),
-          ("two/two.cabal", package "two" "src")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-          Right cs -> sort (map componentPackage cs) `shouldBe` ["one", "two"]
-
-    it "reads one continued with tabs, as cabal itself does"
-      $ withProject
-        [ ("cabal.project", "packages:\n\tone\n\ttwo\n"),
-          ("one/one.cabal", package "one" "src"),
-          ("two/two.cabal", package "two" "src")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-          Right cs -> sort (map componentPackage cs) `shouldBe` ["one", "two"]
-
-    it "finds one a conditional has put inside a section"
-      $ withProject
-        [ ("cabal.project", "if impl(ghc >= 9.4)\n  packages: one\n"),
-          ("one/one.cabal", package "one" "src")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-          Right cs -> map componentPackage cs `shouldBe` ["one"]
-
-    it "walks every source directory a component names"
-      $ withProject
-        [ ("only.cabal", packageWith "only" ["src", "gen"]),
-          ("src/A.hs", "module A where\n"),
-          ("gen/B.hs", "module B where\n")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-          Right cs -> do
-            files <- filesOfComponents cs
-            sort (map takeFileName files) `shouldBe` ["A.hs", "B.hs"]
-
-    it "spells a path through a dot source directory without the dot"
-      $ withProject
-        [ ("only.cabal", packageWith "only" ["."]),
-          ("A.hs", "module A where\n"),
-          ("nested/B.hs", "module B where\n")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-          Right cs -> do
-            files <- filesOfComponents cs
-            filter (T.isInfixOf "/./" . T.pack) files `shouldBe` []
-
-    it "names a file once even when two components reach it"
-      $ withProject
-        [ ("both.cabal", twoComponents),
-          ("bench/Main.hs", "module Main where\n")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-          Right cs -> do
-            files <- filesOfComponents cs
-            length cs `shouldBe` 2
-            map takeFileName files `shouldBe` ["Main.hs"]
-
-    it "leaves hidden directories alone"
-      $ withProject
-        [ ("only.cabal", package "only" "src"),
-          ("src/A.hs", "module A where\n"),
-          ("src/.hidden/B.hs", "module B where\n")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Left problem -> expectationFailure (T.unpack (describeTargetProblem problem))
-          Right cs -> do
-            files <- filesOfComponents cs
-            map takeFileName files `shouldBe` ["A.hs"]
-
-    it "says so when a cabal.project names nothing that exists" $
-      withProject [("cabal.project", "packages: nowhere\n")] $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Right cs -> expectationFailure ("found " <> show (length cs) <> " components")
-          Left problem -> describeTargetProblem problem `shouldSatisfy` T.isInfixOf "no packages"
-
-    it "says so when a .cabal file will not parse"
-      $ withProject
-        [ ("cabal.project", "packages: .\n"),
-          ("broken.cabal", "this is not a cabal file at all\n")
-        ]
-      $ \root ->
-        componentsOfTarget root Everything >>= \case
-          Right cs -> expectationFailure ("found " <> show (length cs) <> " components")
-          Left problem -> describeTargetProblem problem `shouldSatisfy` T.isInfixOf "does not parse"
-
-----------------------------------------------------------------------------
--- Helpers
-
-failed :: Either Text Target -> Bool
-failed = \case
-  Left _ -> True
-  Right _ -> False
-
-haskell :: FilePath -> Bool
-haskell path = any (`isSuffixOf` path) [".hs", ".hs-boot", ".hsig"]
-
--- | A @.cabal@ file for a package with one library.
-package :: Text -> Text -> Text
-package name dir = packageWith name [dir]
-
-packageWith :: Text -> [Text] -> Text
-packageWith name dirs =
-  T.unlines
-    [ "cabal-version: 2.4",
-      "name: " <> name,
-      "version: 0.1.0.0",
-      "",
-      "library",
-      "  hs-source-dirs: " <> T.intercalate ", " dirs,
-      "  default-language: Haskell2010"
-    ]
-
--- | Lay out a project in a temporary directory and hand over its root.
-withProject :: [(FilePath, Text)] -> (ProjectRoot -> IO a) -> IO a
-withProject files act =
-  withSystemTempDirectory "tilia-target" $ \directory -> do
-    mapM_ (place directory) files
-    act (ProjectRoot directory (marker files))
-  where
-    place directory (path, contents) = do
-      createDirectoryIfMissing True (directory </> parent path)
-      T.writeFile (directory </> path) contents
-    parent = reverse . drop 1 . dropWhile (/= '/') . reverse
-    marker fs
-      | any ((== "cabal.project") . fst) fs = ProjectFile
-      | (named : _) <- [p | (p, _) <- fs, ".cabal" `isSuffixOf` p] = PackageFile named
-      | otherwise = ProjectFile
-
--- | A package whose library sweeps the whole directory and whose benchmark
--- names a directory inside it, so that the two overlap.
-twoComponents :: Text
-twoComponents =
-  T.unlines
-    [ "cabal-version: 2.4",
-      "name: both",
-      "version: 0.1.0.0",
-      "",
-      "library",
-      "  default-language: Haskell2010",
-      "",
-      "benchmark speed",
-      "  type: exitcode-stdio-1.0",
-      "  main-is: Main.hs",
-      "  hs-source-dirs: bench",
-      "  default-language: Haskell2010"
-    ]
diff --git a/tests/Tilia/TestConfig.hs b/tests/Tilia/TestConfig.hs
--- a/tests/Tilia/TestConfig.hs
+++ b/tests/Tilia/TestConfig.hs
@@ -21,14 +21,14 @@
   ( Direction (..),
     Fixities,
     Fixity (..),
-    Known (..),
+    KnownModules (..),
     Namespace (..),
     OpName (..),
     Provenance (..),
     Reach (..),
     Scope (..),
     inBothNamespaces,
-    nothingKnown,
+    noKnownModules,
     operatorsUsed,
     resolveScope,
   )
@@ -54,7 +54,7 @@
           )
     }
   where
-    known = nothingKnown {knownFixities = exportsOf}
+    known = noKnownModules{knownFixities = exportsOf}
     underEveryQualifier scope =
       scope
         { scopeInTypes = alsoQualified (scopeInTypes scope),
diff --git a/tests/Tilia/WithProjectPlan.hs b/tests/Tilia/WithProjectPlan.hs
new file mode 100644
--- /dev/null
+++ b/tests/Tilia/WithProjectPlan.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedLabels #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+
+-- | This project, prepared the way the specs that read it need it.
+module Tilia.WithProjectPlan
+  ( withProjectPlan,
+    compilerShipped,
+    Dependency (..),
+    dependenciesOf,
+    testsFor,
+  )
+where
+
+import Control.Monad (filterM, unless)
+import Data.Choice (pattern Do)
+import Data.Maybe (isNothing, listToMaybe, mapMaybe)
+import Data.Set (Set)
+import Data.Set qualified as Set
+import Data.Text (Text)
+import Data.Text qualified as T
+import System.Directory (doesFileExist)
+import System.FilePath (takeDirectory, (</>))
+import System.IO.Unsafe (unsafePerformIO)
+import Test.Hspec (Spec)
+import Tilia.Cabal.Project (findProjectRoot)
+import Tilia.Cabal.Target
+  ( Target (..),
+    componentInPlan,
+    componentsOfTarget,
+    describeTargetProblem,
+  )
+import Tilia.Fixity.PackageDb
+  ( Installed (..),
+    InstalledPackage (..),
+    readInstalledPackages,
+  )
+import Tilia.Fixity.Plan
+  ( BuildPlan (..),
+    PackageSource (..),
+    PlanPackage (..),
+    loadPlan,
+    plannedTarballs,
+  )
+import Tilia.Process (readProgramOutput)
+
+-- | Build a spec around the build plan of this very project, with the
+-- package sources that spec reads alongside it already fetched.
+withProjectPlan :: (BuildPlan -> Spec) -> Spec
+withProjectPlan use = either refuse use prepared
+  where
+    refuse why = error ("this project will not prepare: " <> T.unpack why)
+
+-- | The answer 'withProjectPlan' hands out, worked out at most once.
+prepared :: Either Text BuildPlan
+prepared = unsafePerformIO prepare
+{-# NOINLINE prepared #-}
+
+-- | Find the project, have @cabal@ make it ready, and fetch what the specs
+-- read that being ready does not cover.
+prepare :: IO (Either Text BuildPlan)
+prepare =
+  findProjectRoot "." >>= \case
+    Nothing -> pure (Left "no cabal.project or .cabal file above this directory")
+    Just root ->
+      componentsOfTarget root Everything >>= \case
+        Left problem -> pure (Left (describeTargetProblem problem))
+        Right components ->
+          loadPlan (Do #useCache) (Do #download) (mapMaybe componentInPlan components) "." >>= \case
+            Left why -> pure (Left why)
+            Right plan -> Right plan <$ fetchMissingSources plan
+
+-- | Fetch the source of every planned package the specs read that is not
+-- already here.
+fetchMissingSources :: BuildPlan -> IO ()
+fetchMissingSources plan = do
+  installed <- readInstalledPackages
+  let unread = shippedIn installed <> modulelessIn installed
+  absent <-
+    filterM (fmap not . doesFileExist . snd)
+      . filter (not . (`Set.member` unread) . ppName . fst)
+      =<< plannedTarballs plan
+  unless (null absent) $ do
+    putStrLn ("fetching the source of " <> show (length absent) <> " package(s)")
+    refused <- filterM (fmap isNothing . fetch . fst) absent
+    unless (null refused) $
+      putStrLn ("no source on Hackage for " <> unwords (fmap (named . fst) refused))
+  where
+    fetch p = readProgramOutput "cabal" ["fetch", "--no-dependencies", named p]
+    named p = T.unpack (ppName p <> "-" <> ppVersion p)
+
+-- | The packages that came with the compiler rather than from a release of
+-- their own, by the directory they are installed beside @ghc@ in.
+compilerShipped :: IO (Set Text)
+compilerShipped = shippedIn <$> readInstalledPackages
+
+-- | The same, of packages already read.
+shippedIn :: Installed -> Set Text
+shippedIn installed = case compilerDir of
+  Nothing -> Set.empty
+  Just dir ->
+    Set.fromList [ipName p | p <- installedPackages installed, beside p == Just dir]
+  where
+    beside p = takeDirectory <$> listToMaybe (ipImportDirs p)
+    compilerDir =
+      listToMaybe
+        [dir | p <- installedPackages installed, ipName p == "ghc", Just dir <- [beside p]]
+
+-- | Packages holding no modules at all, such as the runtime system.
+modulelessIn :: Installed -> Set Text
+modulelessIn installed =
+  Set.fromList [ipName p | p <- installedPackages installed, null (ipModules p)]
+
+-- | A package this project is built against, as the compiler holds it.
+data Dependency = Dependency
+  { -- | The package name
+    depPackage :: Text,
+    -- | Each module the package holds, with the interface file the compiler
+    -- wrote for it.
+    depModules :: [(Text, FilePath)]
+  }
+
+-- | The modules of every package in the plan that the compiler can also
+-- see, keeping the ones the predicate wants.
+dependenciesOf :: (Text -> Bool) -> BuildPlan -> Installed -> IO [Dependency]
+dependenciesOf wanted plan installed =
+  filter (not . null . depModules) <$> traverse ofPackage candidates
+  where
+    candidates =
+      [ (package, dir)
+      | package <- installedPackages installed,
+        Set.member (ipName package) planned,
+        dir <- take 1 (ipImportDirs package)
+      ]
+    ofPackage (package, dir) =
+      Dependency (ipName package)
+        <$> filterM
+          (doesFileExist . snd)
+          [ (m, dir </> T.unpack (T.replace "." "/" m) <> ".hi")
+          | m <- ipModules package,
+            wanted m
+          ]
+    planned = Set.fromList [ppName p | p <- bpPackages plan, not (isLocal p)]
+    isLocal p = case ppSource p of
+      LocalPackage _ -> True
+      _ -> False
+
+-- | One test per package, splitting the large ones up.
+testsFor :: Dependency -> [(String, [(Text, FilePath)])]
+testsFor dependency = case chunksOf 32 (depModules dependency) of
+  [whole] -> [(name, whole)]
+  pieces ->
+    [ (name <> " (" <> show i <> " of " <> show (length pieces) <> ")", piece)
+    | (i, piece) <- zip [1 :: Int ..] pieces
+    ]
+  where
+    name = T.unpack (depPackage dependency)
+
+chunksOf :: Int -> [a] -> [[a]]
+chunksOf n = \case
+  [] -> []
+  xs -> let (chunk, rest) = splitAt n xs in chunk : chunksOf n rest
diff --git a/tilia.cabal b/tilia.cabal
--- a/tilia.cabal
+++ b/tilia.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.4
 name: tilia
-version: 0.0.1.0
+version: 0.0.2.0
 license: BSD-3-Clause
 license-file: LICENSE.md
 maintainer: Mark Karpov <markkarpov92@gmail.com>
@@ -35,10 +35,14 @@
 
 library
   exposed-modules:
+    Tilia.Cabal.Package
+    Tilia.Cabal.Project
+    Tilia.Cabal.Target
     Tilia.Comments
     Tilia.Comments.Attach
     Tilia.Comments.Place
     Tilia.Cpp
+    Tilia.Cpp.Directives
     Tilia.Cpp.Macros
     Tilia.Diff
     Tilia.Doc
@@ -52,18 +56,17 @@
     Tilia.Fixity.Cabal
     Tilia.Fixity.Cache
     Tilia.Fixity.Debug
+    Tilia.Fixity.HiFile
     Tilia.Fixity.Interface
     Tilia.Fixity.PackageDb
     Tilia.Fixity.Plan
     Tilia.Format
     Tilia.Imports
     Tilia.Newline
-    Tilia.Package
     Tilia.Palette
     Tilia.Parser
     Tilia.Pragma
     Tilia.Process
-    Tilia.Project
     Tilia.Render
     Tilia.Render.Body
     Tilia.Render.Class
@@ -86,15 +89,15 @@
     Tilia.Source.Lines
     Tilia.Span
     Tilia.Span.Ghc
-    Tilia.Target
     Tilia.Utils
 
   hs-source-dirs: src
   default-language: GHC2021
   build-depends:
     Cabal-syntax >=3.12 && <3.17,
-    Diff >=0.4 && <2,
+    Diff >=0.4 && <2.1,
     aeson >=2.1 && <3,
+    array >=0.5 && <0.6,
     base >=4.14 && <5,
     base16-bytestring >=1 && <2,
     bytestring >=0.11 && <0.13,
@@ -106,7 +109,7 @@
     ghc-lib-parser >=9.14 && <9.15,
     process >=1.6 && <1.7,
     syb >=0.7 && <0.8,
-    tar >=0.6 && <0.7,
+    tar >=0.6 && <0.8,
     text >=2.1 && <3,
     transformers >=0.5 && <0.7,
     zlib >=0.6 && <0.8,
@@ -179,6 +182,9 @@
   hs-source-dirs: tests
   other-modules:
     Spec
+    Tilia.Cabal.PackageSpec
+    Tilia.Cabal.ProjectSpec
+    Tilia.Cabal.TargetSpec
     Tilia.Comments.PlaceSpec
     Tilia.CommentsSpec
     Tilia.Corpus
@@ -196,21 +202,20 @@
     Tilia.Fixity.CacheSpec
     Tilia.Fixity.DebugSpec
     Tilia.Fixity.DependenciesSpec
+    Tilia.Fixity.HiFileSpec
     Tilia.Fixity.InterfaceSpec
     Tilia.Fixity.PackageDbSpec
     Tilia.Fixity.PlanSpec
     Tilia.FixitySpec
     Tilia.Gen
     Tilia.NewlineSpec
-    Tilia.PackageSpec
     Tilia.PragmaSpec
     Tilia.ProcessSpec
-    Tilia.ProjectSpec
     Tilia.Render.OperatorSpec
     Tilia.RenderSpec
     Tilia.RunSpec
-    Tilia.TargetSpec
     Tilia.TestConfig
+    Tilia.WithProjectPlan
 
   default-language: GHC2021
   build-depends:
@@ -227,7 +232,7 @@
     hspec >=2 && <3,
     http-client >=0.7 && <0.8,
     req >=3.13 && <4,
-    tar >=0.6 && <0.7,
+    tar >=0.6 && <0.8,
     temporary ^>=1.3,
     text >=2.1 && <3,
     tilia,
