packages feed

tilia 0.0.1.0 → 0.0.2.0

raw patch · 109 files changed

+11799/−10833 lines, 109 filesdep +arrayPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: array

API changes (from Hackage documentation)

- Tilia.Comments.Place: takePlaced :: Span -> Placements -> ([(Position, Comment)], Placements)
- Tilia.Cpp: instance GHC.Classes.Eq Tilia.Cpp.Configurations
- Tilia.Cpp: instance GHC.Classes.Eq Tilia.Cpp.Directive
- Tilia.Cpp: instance GHC.Classes.Eq Tilia.Cpp.Guard
- Tilia.Cpp: instance GHC.Classes.Eq Tilia.Cpp.Opaque
- Tilia.Cpp: instance GHC.Classes.Eq Tilia.Cpp.Varied
- Tilia.Cpp: instance GHC.Classes.Ord Tilia.Cpp.Guard
- Tilia.Cpp: instance GHC.Internal.Show.Show Tilia.Cpp.Configurations
- Tilia.Cpp: instance GHC.Internal.Show.Show Tilia.Cpp.Directive
- Tilia.Cpp: instance GHC.Internal.Show.Show Tilia.Cpp.Guard
- Tilia.Cpp: instance GHC.Internal.Show.Show Tilia.Cpp.Opaque
- Tilia.Cpp: instance GHC.Internal.Show.Show Tilia.Cpp.Varied
- Tilia.Cpp.Macros: answerTo :: Macros -> Text -> Maybe Bool
- Tilia.Doc.Combinators: data Resume
- Tilia.Doc.Combinators: hangingIfSingleLine :: Span -> Placement
- Tilia.Doc.Combinators: punctuate :: Doc -> [Doc] -> [Doc]
- Tilia.Doc.Internal: data Resume
- Tilia.Doc.Internal: instance GHC.Classes.Eq Tilia.Doc.Internal.Resume
- Tilia.Doc.Internal: instance GHC.Internal.Show.Show Tilia.Doc.Internal.Resume
- Tilia.Fixity: Known :: (Text -> Maybe Fixities) -> (Text -> Map OpName (Set OpName)) -> (Text -> Maybe (Set OpName)) -> (Text -> [Text]) -> Known
- Tilia.Fixity: Unread :: Import -> Maybe (Set OpName) -> Map OpName (Set OpName) -> [Text] -> Unread
- Tilia.Fixity: [unreadBelow] :: Unread -> [Text]
- Tilia.Fixity: [unreadCarries] :: Unread -> Map OpName (Set OpName)
- Tilia.Fixity: [unreadExports] :: Unread -> Maybe (Set OpName)
- Tilia.Fixity: data Known
- Tilia.Fixity: data Unread
- Tilia.Fixity: exportedOperators :: HsModule GhcPs -> Maybe (Set OpName)
- Tilia.Fixity: instance GHC.Classes.Eq Tilia.Fixity.Unread
- Tilia.Fixity: instance GHC.Internal.Show.Show Tilia.Fixity.Unread
- Tilia.Fixity: nothingKnown :: Known
- Tilia.Fixity.Interface: [interfacePassedOn] :: Interface -> [(Text, OpName)]
- Tilia.Fixity.Plan: Solves :: IO Bool -> IO () -> IO [Text] -> ([Text] -> IO ()) -> Solves
- Tilia.Fixity.Plan: data Solves
- Tilia.Fixity.Plan: forgetfulSolves :: Solves
- Tilia.Fixity.Plan: instance GHC.Classes.Eq Tilia.Fixity.Plan.Repository
- Tilia.Fixity.Plan: instance GHC.Internal.Show.Show Tilia.Fixity.Plan.Repository
- Tilia.Fixity.Plan: planToken :: Text -> BuildPlan -> PlanToken
- Tilia.Fixity.Plan: tokenFor :: BuildPlan -> IO PlanToken
- Tilia.Imports: instance GHC.Classes.Eq Tilia.Imports.PreludeImport
- Tilia.Imports: instance GHC.Internal.Show.Show Tilia.Imports.PreludeImport
- Tilia.Package: FileUnclaimed :: FilePath -> PackageProblem
- Tilia.Package: NoPackageFile :: PackageProblem
- Tilia.Package: PackageMalformed :: FilePath -> [Text] -> PackageProblem
- Tilia.Package: PackageUnreadable :: FilePath -> Text -> PackageProblem
- Tilia.Package: data PackageProblem
- Tilia.Package: describePackageProblem :: PackageProblem -> Text
- Tilia.Package: instance GHC.Classes.Eq Tilia.Package.PackageProblem
- Tilia.Package: instance GHC.Internal.Show.Show Tilia.Package.PackageProblem
- Tilia.Package: newPackageReader :: IO PackageReader
- Tilia.Package: type PackageReader = FilePath -> IO Either PackageProblem [Extension]
- Tilia.Project: PackageFile :: FilePath -> Marker
- Tilia.Project: ProjectFile :: Marker
- Tilia.Project: ProjectRoot :: FilePath -> Marker -> ProjectRoot
- Tilia.Project: [prMarker] :: ProjectRoot -> Marker
- Tilia.Project: [prPath] :: ProjectRoot -> FilePath
- Tilia.Project: data Marker
- Tilia.Project: data ProjectRoot
- Tilia.Project: findProjectRoot :: FilePath -> IO (Maybe ProjectRoot)
- Tilia.Project: instance GHC.Classes.Eq Tilia.Project.Marker
- Tilia.Project: instance GHC.Classes.Eq Tilia.Project.ProjectRoot
- Tilia.Project: instance GHC.Internal.Show.Show Tilia.Project.Marker
- Tilia.Project: instance GHC.Internal.Show.Show Tilia.Project.ProjectRoot
- Tilia.Project: markerFile :: Marker -> FilePath
- Tilia.Render.Context: ModuleSource :: SourceType
- Tilia.Render.Context: SignatureSource :: SourceType
- Tilia.Render.Context: data SourceType
- Tilia.Render.Expression: CaseStyle :: MatchStyle
- Tilia.Render.Expression: EqualsSign :: GuardStyle
- Tilia.Render.Expression: FunctionStyle :: LocatedN RdrName -> MatchStyle
- Tilia.Render.Expression: LambdaCaseStyle :: MatchStyle
- Tilia.Render.Expression: LambdaStyle :: MatchStyle
- Tilia.Render.Expression: PatternBindStyle :: MatchStyle
- Tilia.Render.Expression: RightArrow :: GuardStyle
- Tilia.Render.Expression: data GuardStyle
- Tilia.Render.Expression: data MatchStyle
- Tilia.Render.Type: class TyVarBndrFlag flag
- Tilia.Render.Type: flagIsInferred :: TyVarBndrFlag flag => flag -> Bool
- Tilia.Render.Type: flagPrefix :: TyVarBndrFlag flag => flag -> Doc
- Tilia.Source: directiveAt :: Int -> Lines -> Bool
- Tilia.Source.Lines: directiveAt :: Int -> Lines -> Bool
- Tilia.Target: Bench :: Kind
- Tilia.Target: Called :: Text -> Target
- Tilia.Target: Component :: Text -> Kind -> Text -> FilePath -> [FilePath] -> Component
- Tilia.Target: Everything :: Target
- Tilia.Target: Exe :: Kind
- Tilia.Target: Lib :: Kind
- Tilia.Target: NoPackages :: FilePath -> TargetProblem
- Tilia.Target: NoSuchTarget :: Text -> [Text] -> TargetProblem
- Tilia.Target: Qualified :: Maybe Text -> Kind -> Text -> Target
- Tilia.Target: Test :: Kind
- Tilia.Target: Unparseable :: FilePath -> [Text] -> TargetProblem
- Tilia.Target: [componentDirs] :: Component -> [FilePath]
- Tilia.Target: [componentKind] :: Component -> Kind
- Tilia.Target: [componentName] :: Component -> Text
- Tilia.Target: [componentPackage] :: Component -> Text
- Tilia.Target: [componentRoot] :: Component -> FilePath
- Tilia.Target: componentInPlan :: Component -> PlanComponent
- Tilia.Target: componentsOfTarget :: ProjectRoot -> Target -> IO (Either TargetProblem [Component])
- Tilia.Target: data Component
- Tilia.Target: data Kind
- Tilia.Target: data Target
- Tilia.Target: data TargetProblem
- Tilia.Target: describeTargetProblem :: TargetProblem -> Text
- Tilia.Target: filesOfComponents :: [Component] -> IO [FilePath]
- Tilia.Target: instance GHC.Classes.Eq Tilia.Target.Component
- Tilia.Target: instance GHC.Classes.Eq Tilia.Target.Kind
- Tilia.Target: instance GHC.Classes.Eq Tilia.Target.Target
- Tilia.Target: instance GHC.Classes.Eq Tilia.Target.TargetProblem
- Tilia.Target: instance GHC.Classes.Ord Tilia.Target.Kind
- Tilia.Target: instance GHC.Internal.Show.Show Tilia.Target.Component
- Tilia.Target: instance GHC.Internal.Show.Show Tilia.Target.Kind
- Tilia.Target: instance GHC.Internal.Show.Show Tilia.Target.Target
- Tilia.Target: instance GHC.Internal.Show.Show Tilia.Target.TargetProblem
- Tilia.Target: parseTarget :: String -> Either Text Target
+ Tilia.Cabal.Package: ComponentSection :: BuildInfo -> [(FilePath, FilePath)] -> [(FilePath, FilePath)] -> ComponentSection
+ Tilia.Cabal.Package: FileUnclaimed :: FilePath -> PackageProblem
+ Tilia.Cabal.Package: NoPackageFile :: PackageProblem
+ Tilia.Cabal.Package: PackageMalformed :: FilePath -> [Text] -> PackageProblem
+ Tilia.Cabal.Package: PackageUnreadable :: FilePath -> Text -> PackageProblem
+ Tilia.Cabal.Package: [sectionEntries] :: ComponentSection -> [(FilePath, FilePath)]
+ Tilia.Cabal.Package: [sectionInfo] :: ComponentSection -> BuildInfo
+ Tilia.Cabal.Package: [sectionModules] :: ComponentSection -> [(FilePath, FilePath)]
+ Tilia.Cabal.Package: addedSources :: BranchSections -> [(FilePath, ComponentSection)]
+ Tilia.Cabal.Package: benchmarkBranches :: CondTree v c Benchmark -> [BranchSections]
+ Tilia.Cabal.Package: data BranchSections
+ Tilia.Cabal.Package: data ComponentSection
+ Tilia.Cabal.Package: data PackageProblem
+ Tilia.Cabal.Package: describePackageProblem :: PackageProblem -> Text
+ Tilia.Cabal.Package: executableBranches :: CondTree v c Executable -> [BranchSections]
+ Tilia.Cabal.Package: instance GHC.Classes.Eq Tilia.Cabal.Package.PackageProblem
+ Tilia.Cabal.Package: instance GHC.Internal.Base.Monoid Tilia.Cabal.Package.ComponentSection
+ Tilia.Cabal.Package: instance GHC.Internal.Base.Semigroup Tilia.Cabal.Package.ComponentSection
+ Tilia.Cabal.Package: instance GHC.Internal.Show.Show Tilia.Cabal.Package.PackageProblem
+ Tilia.Cabal.Package: joined :: FilePath -> FilePath -> FilePath
+ Tilia.Cabal.Package: libraryBranches :: CondTree v c Library -> [BranchSections]
+ Tilia.Cabal.Package: newPackageReader :: IO PackageReader
+ Tilia.Cabal.Package: setupScript :: FilePath
+ Tilia.Cabal.Package: sourceExtensions :: [String]
+ Tilia.Cabal.Package: suiteBranches :: CondTree v c TestSuite -> [BranchSections]
+ Tilia.Cabal.Package: type PackageReader = FilePath -> IO Either PackageProblem [Extension]
+ Tilia.Cabal.Project: PackageFile :: FilePath -> Marker
+ Tilia.Cabal.Project: ProjectFile :: Marker
+ Tilia.Cabal.Project: ProjectRoot :: FilePath -> Marker -> ProjectRoot
+ Tilia.Cabal.Project: [prMarker] :: ProjectRoot -> Marker
+ Tilia.Cabal.Project: [prPath] :: ProjectRoot -> FilePath
+ Tilia.Cabal.Project: data Marker
+ Tilia.Cabal.Project: data ProjectRoot
+ Tilia.Cabal.Project: findProjectRoot :: FilePath -> IO (Maybe ProjectRoot)
+ Tilia.Cabal.Project: instance GHC.Classes.Eq Tilia.Cabal.Project.Marker
+ Tilia.Cabal.Project: instance GHC.Classes.Eq Tilia.Cabal.Project.ProjectRoot
+ Tilia.Cabal.Project: instance GHC.Internal.Show.Show Tilia.Cabal.Project.Marker
+ Tilia.Cabal.Project: instance GHC.Internal.Show.Show Tilia.Cabal.Project.ProjectRoot
+ Tilia.Cabal.Project: markerFile :: Marker -> FilePath
+ Tilia.Cabal.Target: Bench :: Kind
+ Tilia.Cabal.Target: Called :: Text -> Target
+ Tilia.Cabal.Target: Component :: Text -> Kind -> Text -> FilePath -> Map FilePath Wanted -> Component
+ Tilia.Cabal.Target: Everything :: Target
+ Tilia.Cabal.Target: Exe :: Kind
+ Tilia.Cabal.Target: Lib :: Kind
+ Tilia.Cabal.Target: NoPackages :: FilePath -> TargetProblem
+ Tilia.Cabal.Target: NoSuchTarget :: Text -> [Text] -> TargetProblem
+ Tilia.Cabal.Target: Qualified :: Maybe Text -> Kind -> Text -> Target
+ Tilia.Cabal.Target: Setup :: Kind
+ Tilia.Cabal.Target: Test :: Kind
+ Tilia.Cabal.Target: Unparseable :: FilePath -> [Text] -> TargetProblem
+ Tilia.Cabal.Target: Wanted :: Set FilePath -> Set FilePath -> Wanted
+ Tilia.Cabal.Target: [componentKind] :: Component -> Kind
+ Tilia.Cabal.Target: [componentName] :: Component -> Text
+ Tilia.Cabal.Target: [componentPackage] :: Component -> Text
+ Tilia.Cabal.Target: [componentRoot] :: Component -> FilePath
+ Tilia.Cabal.Target: [componentSources] :: Component -> Map FilePath Wanted
+ Tilia.Cabal.Target: [wantedEntries] :: Wanted -> Set FilePath
+ Tilia.Cabal.Target: [wantedModules] :: Wanted -> Set FilePath
+ Tilia.Cabal.Target: componentInPlan :: Component -> Maybe PlanComponent
+ Tilia.Cabal.Target: componentsOfTarget :: ProjectRoot -> Target -> IO (Either TargetProblem [Component])
+ Tilia.Cabal.Target: data Component
+ Tilia.Cabal.Target: data Kind
+ Tilia.Cabal.Target: data Target
+ Tilia.Cabal.Target: data TargetProblem
+ Tilia.Cabal.Target: data Wanted
+ Tilia.Cabal.Target: describeTargetProblem :: TargetProblem -> Text
+ Tilia.Cabal.Target: filesOfComponents :: ProjectRoot -> [Component] -> IO [FilePath]
+ Tilia.Cabal.Target: instance GHC.Classes.Eq Tilia.Cabal.Target.Component
+ Tilia.Cabal.Target: instance GHC.Classes.Eq Tilia.Cabal.Target.Kind
+ Tilia.Cabal.Target: instance GHC.Classes.Eq Tilia.Cabal.Target.Target
+ Tilia.Cabal.Target: instance GHC.Classes.Eq Tilia.Cabal.Target.TargetProblem
+ Tilia.Cabal.Target: instance GHC.Classes.Eq Tilia.Cabal.Target.Wanted
+ Tilia.Cabal.Target: instance GHC.Classes.Ord Tilia.Cabal.Target.Kind
+ Tilia.Cabal.Target: instance GHC.Internal.Base.Semigroup Tilia.Cabal.Target.Wanted
+ Tilia.Cabal.Target: instance GHC.Internal.Show.Show Tilia.Cabal.Target.Component
+ Tilia.Cabal.Target: instance GHC.Internal.Show.Show Tilia.Cabal.Target.Kind
+ Tilia.Cabal.Target: instance GHC.Internal.Show.Show Tilia.Cabal.Target.Target
+ Tilia.Cabal.Target: instance GHC.Internal.Show.Show Tilia.Cabal.Target.TargetProblem
+ Tilia.Cabal.Target: instance GHC.Internal.Show.Show Tilia.Cabal.Target.Wanted
+ Tilia.Cabal.Target: parseTarget :: String -> Either Text Target
+ Tilia.Comments.Place: claimPlaced :: Span -> Placements -> ([(Position, Comment)], Placements)
+ Tilia.Cpp: correspondingBranches :: Text -> Text -> Either CppError [(Maybe Text, Maybe Text)]
+ Tilia.Cpp.Directives: ConfigurationNotParsed :: [([Guard], Int)] -> ParseError -> CppError
+ Tilia.Cpp.Directives: Configurations :: [Guard] -> [Text] -> [[(Int, Int)]] -> Varied -> Configurations
+ Tilia.Cpp.Directives: Directive :: !Int -> !Text -> !Guard -> !Int -> Directive
+ Tilia.Cpp.Directives: DirectiveInQuotedText :: [([Guard], Int)] -> Text -> CppError
+ Tilia.Cpp.Directives: DirectiveUnplaceable :: [([Guard], Int)] -> Text -> CppError
+ Tilia.Cpp.Directives: GroupSpec :: [Guard] -> Bool -> [Int] -> [(Int, Int)] -> (Int, Int) -> GroupSpec
+ Tilia.Cpp.Directives: Guard :: Text -> Guard
+ Tilia.Cpp.Directives: Opaque :: Int -> Int -> Text -> Opaque
+ Tilia.Cpp.Directives: TooManyConfigurations :: CppError
+ Tilia.Cpp.Directives: UnhandledDirective :: Text -> CppError
+ Tilia.Cpp.Directives: UnsplittableConditional :: CppError
+ Tilia.Cpp.Directives: Varied :: [(Int, Int)] -> Varied
+ Tilia.Cpp.Directives: [cfgDropped] :: Configurations -> [[(Int, Int)]]
+ Tilia.Cpp.Directives: [cfgGuards] :: Configurations -> [Guard]
+ Tilia.Cpp.Directives: [cfgTexts] :: Configurations -> [Text]
+ Tilia.Cpp.Directives: [cfgWholes] :: Configurations -> Varied
+ Tilia.Cpp.Directives: [dGuard] :: Directive -> !Guard
+ Tilia.Cpp.Directives: [dKeyword] :: Directive -> !Text
+ Tilia.Cpp.Directives: [dLevel] :: Directive -> !Int
+ Tilia.Cpp.Directives: [dLine] :: Directive -> !Int
+ Tilia.Cpp.Directives: [gsBranches] :: GroupSpec -> [(Int, Int)]
+ Tilia.Cpp.Directives: [gsGuards] :: GroupSpec -> [Guard]
+ Tilia.Cpp.Directives: [gsHasElse] :: GroupSpec -> Bool
+ Tilia.Cpp.Directives: [gsOwnLines] :: GroupSpec -> [Int]
+ Tilia.Cpp.Directives: [gsWhole] :: GroupSpec -> (Int, Int)
+ Tilia.Cpp.Directives: [guardText] :: Guard -> Text
+ Tilia.Cpp.Directives: [opLastLine] :: Opaque -> Int
+ Tilia.Cpp.Directives: [opLine] :: Opaque -> Int
+ Tilia.Cpp.Directives: [opText] :: Opaque -> Text
+ Tilia.Cpp.Directives: [variedLines] :: Varied -> [(Int, Int)]
+ Tilia.Cpp.Directives: allGroups :: [Directive] -> [[Directive]]
+ Tilia.Cpp.Directives: answeredLeaves :: Text -> Either CppError [(Answers, Text)]
+ Tilia.Cpp.Directives: answeredLinearLeaves :: Text -> Either CppError [(Answers, Text)]
+ Tilia.Cpp.Directives: blankCpp :: Text -> Text
+ Tilia.Cpp.Directives: blanking :: [(Int, Int)] -> Text -> Text
+ Tilia.Cpp.Directives: blankingFor :: GroupSpec -> Int -> [(Int, Int)]
+ Tilia.Cpp.Directives: branchLeaves :: Text -> Either CppError [Text]
+ Tilia.Cpp.Directives: configurations :: Text -> Maybe Configurations
+ Tilia.Cpp.Directives: correspondingBranches :: Text -> Text -> Either CppError [(Maybe Text, Maybe Text)]
+ Tilia.Cpp.Directives: countLeaves :: Text -> Either CppError Integer
+ Tilia.Cpp.Directives: data Configurations
+ Tilia.Cpp.Directives: data CppError
+ Tilia.Cpp.Directives: data Directive
+ Tilia.Cpp.Directives: data GroupSpec
+ Tilia.Cpp.Directives: data Opaque
+ Tilia.Cpp.Directives: describeCppError :: CppError -> Text
+ Tilia.Cpp.Directives: droppedFor :: GroupSpec -> Int -> [(Int, Int)]
+ Tilia.Cpp.Directives: gapUnder :: Lines -> Opaque -> Bool
+ Tilia.Cpp.Directives: gapWritten :: Lines -> Int -> Int -> Bool
+ Tilia.Cpp.Directives: groupSpec :: [Directive] -> Maybe GroupSpec
+ Tilia.Cpp.Directives: groupsAtLevel :: Int -> [Directive] -> [[Directive]]
+ Tilia.Cpp.Directives: gsCount :: GroupSpec -> Int
+ Tilia.Cpp.Directives: instance GHC.Classes.Eq Tilia.Cpp.Directives.Configurations
+ Tilia.Cpp.Directives: instance GHC.Classes.Eq Tilia.Cpp.Directives.Directive
+ Tilia.Cpp.Directives: instance GHC.Classes.Eq Tilia.Cpp.Directives.Guard
+ Tilia.Cpp.Directives: instance GHC.Classes.Eq Tilia.Cpp.Directives.Opaque
+ Tilia.Cpp.Directives: instance GHC.Classes.Eq Tilia.Cpp.Directives.Varied
+ Tilia.Cpp.Directives: instance GHC.Classes.Ord Tilia.Cpp.Directives.Guard
+ Tilia.Cpp.Directives: instance GHC.Internal.Show.Show Tilia.Cpp.Directives.Configurations
+ Tilia.Cpp.Directives: instance GHC.Internal.Show.Show Tilia.Cpp.Directives.Directive
+ Tilia.Cpp.Directives: instance GHC.Internal.Show.Show Tilia.Cpp.Directives.Guard
+ Tilia.Cpp.Directives: instance GHC.Internal.Show.Show Tilia.Cpp.Directives.Opaque
+ Tilia.Cpp.Directives: instance GHC.Internal.Show.Show Tilia.Cpp.Directives.Varied
+ Tilia.Cpp.Directives: isDirective :: Text -> Bool
+ Tilia.Cpp.Directives: leaves :: Text -> Either CppError [Text]
+ Tilia.Cpp.Directives: linearLeaves :: Text -> Either CppError [Text]
+ Tilia.Cpp.Directives: newtype Guard
+ Tilia.Cpp.Directives: newtype Varied
+ Tilia.Cpp.Directives: opSpan :: Opaque -> Span
+ Tilia.Cpp.Directives: opaqueDirectives :: Text -> [Opaque]
+ Tilia.Cpp.Directives: resolved :: Text -> Either CppError Text
+ Tilia.Cpp.Directives: scanDirectives :: Text -> Maybe [Directive]
+ Tilia.Cpp.Directives: unconditionalErrors :: Text -> [Opaque]
+ Tilia.Cpp.Directives: unhandledIn :: Text -> Text
+ Tilia.Cpp.Directives: untouched :: Varied -> Span -> Bool
+ Tilia.Cpp.Directives: usesCpp :: [Extension] -> Text -> Bool
+ Tilia.Cpp.Directives: withoutOpaque :: Text -> Text
+ Tilia.Cpp.Directives: withoutRuledOut :: Macros -> Text -> Text
+ Tilia.Cpp.Macros: guardHolds :: Macros -> Text -> Maybe Bool
+ Tilia.Doc.Combinators: KeepWhitespace :: TrailingWhitespace
+ Tilia.Doc.Combinators: TrimWhitespace :: TrailingWhitespace
+ Tilia.Doc.Combinators: data LineStart
+ Tilia.Doc.Combinators: data TrailingWhitespace
+ Tilia.Doc.Internal: KeepWhitespace :: TrailingWhitespace
+ Tilia.Doc.Internal: TrimWhitespace :: TrailingWhitespace
+ Tilia.Doc.Internal: data LineStart
+ Tilia.Doc.Internal: data TrailingWhitespace
+ Tilia.Doc.Internal: instance GHC.Classes.Eq Tilia.Doc.Internal.LineStart
+ Tilia.Doc.Internal: instance GHC.Classes.Eq Tilia.Doc.Internal.TrailingWhitespace
+ Tilia.Doc.Internal: instance GHC.Internal.Show.Show Tilia.Doc.Internal.LineStart
+ Tilia.Doc.Internal: instance GHC.Internal.Show.Show Tilia.Doc.Internal.TrailingWhitespace
+ Tilia.Fixity: KnownModules :: (Text -> Maybe Fixities) -> (Text -> Map OpName (Set OpName)) -> (Text -> Maybe (Set OpName)) -> (Text -> [Text]) -> KnownModules
+ Tilia.Fixity: UnreadModule :: Import -> Maybe (Set OpName) -> Map OpName (Set OpName) -> [Text] -> UnreadModule
+ Tilia.Fixity: [unreadChain] :: UnreadModule -> [Text]
+ Tilia.Fixity: [unreadChildren] :: UnreadModule -> Map OpName (Set OpName)
+ Tilia.Fixity: [unreadExportNames] :: UnreadModule -> Maybe (Set OpName)
+ Tilia.Fixity: data KnownModules
+ Tilia.Fixity: data UnreadModule
+ Tilia.Fixity: instance GHC.Classes.Eq Tilia.Fixity.UnreadModule
+ Tilia.Fixity: instance GHC.Internal.Show.Show Tilia.Fixity.UnreadModule
+ Tilia.Fixity: noKnownModules :: KnownModules
+ Tilia.Fixity.HiFile: Avail :: HiName -> HiExport
+ Tilia.Fixity.HiFile: AvailTC :: HiName -> [HiName] -> HiExport
+ Tilia.Fixity.HiFile: HiFile :: Text -> [HiExport] -> [(Namespace, OpName, Fixity)] -> HiFile
+ Tilia.Fixity.HiFile: HiName :: Text -> Namespace -> OpName -> HiName
+ Tilia.Fixity.HiFile: KnownKey :: Word32 -> HiName
+ Tilia.Fixity.HiFile: [hiExports] :: HiFile -> [HiExport]
+ Tilia.Fixity.HiFile: [hiFixities] :: HiFile -> [(Namespace, OpName, Fixity)]
+ Tilia.Fixity.HiFile: [hiModule] :: HiFile -> Text
+ Tilia.Fixity.HiFile: data HiExport
+ Tilia.Fixity.HiFile: data HiFile
+ Tilia.Fixity.HiFile: data HiName
+ Tilia.Fixity.HiFile: decodeHiFile :: ByteString -> Either Text HiFile
+ Tilia.Fixity.HiFile: instance GHC.Classes.Eq Tilia.Fixity.HiFile.HiExport
+ Tilia.Fixity.HiFile: instance GHC.Classes.Eq Tilia.Fixity.HiFile.HiFile
+ Tilia.Fixity.HiFile: instance GHC.Classes.Eq Tilia.Fixity.HiFile.HiName
+ Tilia.Fixity.HiFile: instance GHC.Classes.Eq Tilia.Fixity.HiFile.Series
+ Tilia.Fixity.HiFile: instance GHC.Internal.Base.Applicative Tilia.Fixity.HiFile.Get
+ Tilia.Fixity.HiFile: instance GHC.Internal.Base.Functor Tilia.Fixity.HiFile.Get
+ Tilia.Fixity.HiFile: instance GHC.Internal.Base.Monad Tilia.Fixity.HiFile.Get
+ Tilia.Fixity.HiFile: instance GHC.Internal.Show.Show Tilia.Fixity.HiFile.HiExport
+ Tilia.Fixity.HiFile: instance GHC.Internal.Show.Show Tilia.Fixity.HiFile.HiFile
+ Tilia.Fixity.HiFile: instance GHC.Internal.Show.Show Tilia.Fixity.HiFile.HiName
+ Tilia.Fixity.Interface: [interfaceReexports] :: Interface -> [(Text, OpName)]
+ Tilia.Fixity.Interface: fromHiFile :: Text -> HiFile -> Either Text Interface
+ Tilia.Fixity.Plan: Futility :: IO Bool -> IO () -> IO [Text] -> ([Text] -> IO ()) -> Futility
+ Tilia.Fixity.Plan: data Futility
+ Tilia.Fixity.Plan: fetchUninstalled :: Choice "useCache" -> FilePath -> BuildPlan -> IO ()
+ Tilia.Fixity.Plan: instance GHC.Classes.Eq Tilia.Fixity.Plan.RepoProvenance
+ Tilia.Fixity.Plan: instance GHC.Internal.Show.Show Tilia.Fixity.Plan.RepoProvenance
+ Tilia.Fixity.Plan: readGivenPlan :: FilePath -> FilePath -> IO (Either Text BuildPlan)
+ Tilia.Fixity.Plan: tokenForBuildPlan :: BuildPlan -> IO PlanToken
+ Tilia.Fixity.Plan: tokenForEnvAndBuildPlan :: Text -> BuildPlan -> PlanToken
+ Tilia.Fixity.Plan: undiscoveredFutility :: Futility
+ Tilia.Format: GivenPlan :: FilePath -> PlanSource
+ Tilia.Format: PlanFromCabal :: [PlanComponent] -> PlanSource
+ Tilia.Format: data PlanSource
+ Tilia.Imports: instance GHC.Classes.Eq Tilia.Imports.ImportIdentity
+ Tilia.Imports: instance GHC.Classes.Eq Tilia.Imports.NameIdentity
+ Tilia.Imports: instance GHC.Classes.Ord Tilia.Imports.ImportIdentity
+ Tilia.Imports: instance GHC.Classes.Ord Tilia.Imports.NameIdentity
+ Tilia.Imports: instance GHC.Internal.Show.Show Tilia.Imports.ImportIdentity
+ Tilia.Imports: instance GHC.Internal.Show.Show Tilia.Imports.NameIdentity
+ Tilia.Run: failIfDeclined :: Outcome -> Outcome
+ Tilia.Source: directiveOnLine :: Text -> Maybe (Text, Text)
+ Tilia.Source: directivePresentOnLine :: Int -> Lines -> Bool
+ Tilia.Source.Lines: directiveOnLine :: Text -> Maybe (Text, Text)
+ Tilia.Source.Lines: directivePresentOnLine :: Int -> Lines -> Bool
+ Tilia.Utils: inParallel :: (a -> IO b) -> [a] -> IO [b]
+ Tilia.Utils: tshow :: Show a => a -> Text
- Tilia.Doc.Combinators: AtIndent :: Resume
+ Tilia.Doc.Combinators: AtIndent :: LineStart
- Tilia.Doc.Combinators: AtMargin :: Resume
+ Tilia.Doc.Combinators: AtMargin :: LineStart
- Tilia.Doc.Combinators: verbatimBreak :: Resume -> Doc
+ Tilia.Doc.Combinators: verbatimBreak :: LineStart -> TrailingWhitespace -> Doc
- Tilia.Doc.Internal: AtIndent :: Resume
+ Tilia.Doc.Internal: AtIndent :: LineStart
- Tilia.Doc.Internal: AtMargin :: Resume
+ Tilia.Doc.Internal: AtMargin :: LineStart
- Tilia.Doc.Internal: DVerbatimBreak :: !Resume -> Doc
+ Tilia.Doc.Internal: DVerbatimBreak :: !LineStart -> !TrailingWhitespace -> Doc
- Tilia.Fixity: Scope :: Reach -> Reach -> [Unread] -> Scope
+ Tilia.Fixity: Scope :: Reach -> Reach -> [UnreadModule] -> Scope
- Tilia.Fixity: [knownChain] :: Known -> Text -> [Text]
+ Tilia.Fixity: [knownChain] :: KnownModules -> Text -> [Text]
- Tilia.Fixity: [knownChildren] :: Known -> Text -> Map OpName (Set OpName)
+ Tilia.Fixity: [knownChildren] :: KnownModules -> Text -> Map OpName (Set OpName)
- Tilia.Fixity: [knownExportNames] :: Known -> Text -> Maybe (Set OpName)
+ Tilia.Fixity: [knownExportNames] :: KnownModules -> Text -> Maybe (Set OpName)
- Tilia.Fixity: [knownFixities] :: Known -> Text -> Maybe Fixities
+ Tilia.Fixity: [knownFixities] :: KnownModules -> Text -> Maybe Fixities
- Tilia.Fixity: [scopeUnread] :: Scope -> [Unread]
+ Tilia.Fixity: [scopeUnread] :: Scope -> [UnreadModule]
- Tilia.Fixity: [unreadImport] :: Unread -> Import
+ Tilia.Fixity: [unreadImport] :: UnreadModule -> Import
- Tilia.Fixity: resolveScope :: Choice "implicitPrelude" -> Known -> HsModule GhcPs -> Scope
+ Tilia.Fixity: resolveScope :: Choice "implicitPrelude" -> KnownModules -> HsModule GhcPs -> Scope
- Tilia.Fixity.Cache: openCache :: PlanToken -> IO (Maybe Cache)
+ Tilia.Fixity.Cache: openCache :: Choice "useCache" -> PlanToken -> IO (Maybe Cache)
- Tilia.Fixity.Plan: RepoPackage :: Maybe Text -> Repository -> PackageSource
+ Tilia.Fixity.Plan: RepoPackage :: Maybe Text -> RepoProvenance -> PackageSource
- Tilia.Fixity.Plan: [fetchWasFutileFor] :: Solves -> IO [Text]
+ Tilia.Fixity.Plan: [fetchWasFutileFor] :: Futility -> IO [Text]
- Tilia.Fixity.Plan: [rememberFutileFetch] :: Solves -> [Text] -> IO ()
+ Tilia.Fixity.Plan: [rememberFutileFetch] :: Futility -> [Text] -> IO ()
- Tilia.Fixity.Plan: [rememberFutileSolve] :: Solves -> IO ()
+ Tilia.Fixity.Plan: [rememberFutileSolve] :: Futility -> IO ()
- Tilia.Fixity.Plan: [solveWasFutile] :: Solves -> IO Bool
+ Tilia.Fixity.Plan: [solveWasFutile] :: Futility -> IO Bool
- Tilia.Fixity.Plan: checkReadiness :: [PlanComponent] -> FilePath -> IO Readiness
+ Tilia.Fixity.Plan: checkReadiness :: Choice "useCache" -> [PlanComponent] -> FilePath -> IO Readiness
- Tilia.Fixity.Plan: loadPlan :: [PlanComponent] -> FilePath -> IO (Either Text BuildPlan)
+ Tilia.Fixity.Plan: loadPlan :: Choice "useCache" -> Choice "download" -> [PlanComponent] -> FilePath -> IO (Either Text BuildPlan)
- Tilia.Fixity.Plan: newResolverVia :: [Route] -> BuildPlan -> IO Resolver
+ Tilia.Fixity.Plan: newResolverVia :: Choice "useCache" -> [Route] -> BuildPlan -> IO Resolver
- Tilia.Fixity.Plan: prepareWith :: ([String] -> IO (Either Text ())) -> Solves -> [PlanComponent] -> FilePath -> Readiness -> IO (Either Text ())
+ Tilia.Fixity.Plan: prepareWith :: Choice "useCache" -> Choice "download" -> ([String] -> IO (Either Text ())) -> Futility -> [PlanComponent] -> FilePath -> Readiness -> IO (Either Text ())
- Tilia.Format: newSession :: FilePath -> [PlanComponent] -> Choice "checkAst" -> Choice "checkIdempotence" -> Choice "debugFixity" -> IO (Either FormatError Session)
+ Tilia.Format: newSession :: FilePath -> PlanSource -> Choice "useCache" -> Choice "download" -> Choice "checkAst" -> Choice "checkIdempotence" -> Choice "debugFixity" -> IO (Either FormatError Session)
- Tilia.Render.Layout: itemsSepBy :: Bool -> Bracing -> [Doc] -> Doc
+ Tilia.Render.Layout: itemsSepBy :: Choice "semisWhenBroken" -> Bracing -> [Doc] -> Doc
- Tilia.Render.Name: defHead :: Bool -> Bool -> Doc -> [Doc] -> Doc
+ Tilia.Render.Name: defHead :: Choice "writtenInfix" -> Choice "indentArgs" -> Doc -> [Doc] -> Doc

Files

CHANGELOG.md view
@@ -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.
README.md view
@@ -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 
app/Main.hs view
@@ -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)
corpora/hackage/hackage.manifest view
@@ -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
corpora/hackage/hackage.report view
@@ -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
+ corpora/vendored/declaration/data/record-braces-out.hs view
@@ -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]+  }
+ corpora/vendored/declaration/data/record-braces.hs view
@@ -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] }
corpora/vendored/declaration/value/comment-on-record-wildcard-out.hs view
@@ -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
+ corpora/vendored/declaration/value/empty-case-out.hs view
@@ -0,0 +1,7 @@+f x = case x of+  {}++g x =+  case aScrutineeTooLongToKeepOnTheLineTheCaseOpensOn+    anotherArgumentThatPushesItFurtherStillOverTheEdge of+    {}
+ corpora/vendored/declaration/value/empty-case.hs view
@@ -0,0 +1,6 @@+f x = case x of+  {}++g x =+  case aScrutineeTooLongToKeepOnTheLineTheCaseOpensOn+    anotherArgumentThatPushesItFurtherStillOverTheEdge of {}
+ corpora/vendored/declaration/value/function/record-pattern-braces-out.hs view
@@ -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
+ corpora/vendored/declaration/value/function/record-pattern-braces.hs view
@@ -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
+ corpora/vendored/declaration/value/pattern-synonym-record-braces-out.hs view
@@ -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
+ corpora/vendored/declaration/value/pattern-synonym-record-braces.hs view
@@ -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
+ corpora/vendored/declaration/value/record-construction-braces-out.hs view
@@ -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+    }
+ corpora/vendored/declaration/value/record-construction-braces.hs view
@@ -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 }
+ corpora/vendored/declaration/value/record-update-braces-out.hs view
@@ -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"+    }
+ corpora/vendored/declaration/value/record-update-braces.hs view
@@ -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" }
+ corpora/vendored/declaration/value/specialise-without-a-head-variable-out.hs view
@@ -0,0 +1,4 @@+f :: (Ord a) => a -> a+f = f++{-# SPECIALIZE let x = 2 in f x #-}
+ corpora/vendored/declaration/value/specialise-without-a-head-variable.hs view
@@ -0,0 +1,4 @@+f :: (Ord a) => a -> a+f = f++{-# SPECIALISE let x = 2 in f x #-}
+ corpora/vendored/other/multiline-string-trailing-space-out.hs view
@@ -0,0 +1,9 @@+{-# LANGUAGE MultilineStrings #-}++script :: String+script =+  """+  (function (x) { +    log(x); +  })+  """
+ corpora/vendored/other/multiline-string-trailing-space.hs view
@@ -0,0 +1,9 @@+{-# LANGUAGE MultilineStrings #-}++script :: String+script =+  """+  (function (x) { +    log(x); +  })+  """
+ src/Tilia/Cabal/Package.hs view
@@ -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]]
+ src/Tilia/Cabal/Project.hs view
@@ -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)+          ]+        )
+ src/Tilia/Cabal/Target.hs view
@@ -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+              ]+        }
src/Tilia/Comments.hs view
@@ -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. --
src/Tilia/Comments/Attach.hs view
@@ -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
src/Tilia/Comments/Place.hs view
@@ -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)
src/Tilia/Cpp.hs view
@@ -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
+ src/Tilia/Cpp/Directives.hs view
@@ -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]
src/Tilia/Cpp/Macros.hs view
@@ -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 @<@.
src/Tilia/Diff.hs view
@@ -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.
src/Tilia/Doc.hs view
@@ -1,9 +1,6 @@ -- | Turning a printed document into source text. module Tilia.Doc-  ( -- * Documents-    Doc,--    -- * Rendering+  ( Doc,     RenderOptions (..),     defaultRenderOptions,     printDoc,
src/Tilia/Doc/Body.hs view
@@ -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)
src/Tilia/Doc/Combinators.hs view
@@ -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) 
src/Tilia/Doc/Internal.hs view
@@ -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.
src/Tilia/Equivalence.hs view
@@ -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)
src/Tilia/Fixity.hs view
@@ -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
src/Tilia/Fixity/ByHand.hs view
@@ -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),
src/Tilia/Fixity/Cabal.hs view
@@ -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
src/Tilia/Fixity/Cache.hs view
@@ -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"
src/Tilia/Fixity/Debug.hs view
@@ -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
+ src/Tilia/Fixity/HiFile.hs view
@@ -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')
src/Tilia/Fixity/Interface.hs view
@@ -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)
src/Tilia/Fixity/PackageDb.hs view
@@ -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
src/Tilia/Fixity/Plan.hs view
@@ -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))
src/Tilia/Format.hs view
@@ -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
src/Tilia/Imports.hs view
@@ -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
− src/Tilia/Package.hs
@@ -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]]
src/Tilia/Parser.hs view
@@ -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
src/Tilia/Pragma.hs view
@@ -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 
src/Tilia/Process.hs view
@@ -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
− src/Tilia/Project.hs
@@ -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)-          ]-        )
src/Tilia/Render.hs view
@@ -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)
src/Tilia/Render/Body.hs view
@@ -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
src/Tilia/Render/Class.hs view
@@ -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.
src/Tilia/Render/Context.hs view
@@ -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
src/Tilia/Render/Data.hs view
@@ -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
src/Tilia/Render/Declaration.hs view
@@ -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"
src/Tilia/Render/Expression.hs view
@@ -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)
src/Tilia/Render/Haddock.hs view
@@ -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
src/Tilia/Render/Header.hs view
@@ -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"
src/Tilia/Render/Layout.hs view
@@ -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
src/Tilia/Render/Literal.hs view
@@ -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, "")
src/Tilia/Render/Name.hs view
@@ -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
src/Tilia/Render/Operator.hs view
@@ -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
src/Tilia/Render/Pattern.hs view
@@ -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
src/Tilia/Render/Pragma.hs view
@@ -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))
src/Tilia/Render/Signature.hs view
@@ -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))
src/Tilia/Render/Type.hs view
@@ -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" 
src/Tilia/Run.hs view
@@ -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
src/Tilia/Source.hs view
@@ -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 =
src/Tilia/Source/Lines.hs view
@@ -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.
src/Tilia/Span.hs view
@@ -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 
− src/Tilia/Target.hs
@@ -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-        }
src/Tilia/Utils.hs view
@@ -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
tests/Main.hs view
@@ -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"   ]
+ tests/Tilia/Cabal/PackageSpec.hs view
@@ -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
+ tests/Tilia/Cabal/ProjectSpec.hs view
@@ -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
+ tests/Tilia/Cabal/TargetSpec.hs view
@@ -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"+    ]
tests/Tilia/Comments/PlaceSpec.hs view
@@ -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
tests/Tilia/CommentsSpec.hs view
@@ -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
tests/Tilia/Corpus.hs view
@@ -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"
tests/Tilia/Corpus/Manifest.hs view
@@ -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?
tests/Tilia/CorpusSpec.hs view
@@ -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)
tests/Tilia/Cpp/MacrosSpec.hs view
@@ -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
tests/Tilia/Cpp/PropertiesSpec.hs view
@@ -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
tests/Tilia/CppSpec.hs view
@@ -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
tests/Tilia/Doc/BodySpec.hs view
@@ -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" $
tests/Tilia/Doc/CombinatorsSpec.hs view
@@ -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" $
tests/Tilia/Fixity/CabalSpec.hs view
@@ -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",
tests/Tilia/Fixity/CacheSpec.hs view
@@ -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"
tests/Tilia/Fixity/DebugSpec.hs view
@@ -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
tests/Tilia/Fixity/DependenciesSpec.hs view
@@ -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)         )
+ tests/Tilia/Fixity/HiFileSpec.hs view
@@ -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
tests/Tilia/Fixity/InterfaceSpec.hs view
@@ -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" <>)
tests/Tilia/Fixity/PlanSpec.hs view
@@ -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
tests/Tilia/FixitySpec.hs view
@@ -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)]
tests/Tilia/Gen.hs view
@@ -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
tests/Tilia/NewlineSpec.hs view
@@ -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" $
− tests/Tilia/PackageSpec.hs
@@ -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
− tests/Tilia/ProjectSpec.hs
@@ -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
tests/Tilia/Render/OperatorSpec.hs view
@@ -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
tests/Tilia/RenderSpec.hs view
@@ -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 =
tests/Tilia/RunSpec.hs view
@@ -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
− tests/Tilia/TargetSpec.hs
@@ -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"-    ]
tests/Tilia/TestConfig.hs view
@@ -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),
+ tests/Tilia/WithProjectPlan.hs view
@@ -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
tilia.cabal view
@@ -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,