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 +46/−0
- README.md +159/−6
- app/Main.hs +92/−30
- corpora/hackage/hackage.manifest +5195/−5195
- corpora/hackage/hackage.report +56/−5
- corpora/vendored/declaration/data/record-braces-out.hs +24/−0
- corpora/vendored/declaration/data/record-braces.hs +23/−0
- corpora/vendored/declaration/value/comment-on-record-wildcard-out.hs +1/−1
- corpora/vendored/declaration/value/empty-case-out.hs +7/−0
- corpora/vendored/declaration/value/empty-case.hs +6/−0
- corpora/vendored/declaration/value/function/record-pattern-braces-out.hs +23/−0
- corpora/vendored/declaration/value/function/record-pattern-braces.hs +21/−0
- corpora/vendored/declaration/value/pattern-synonym-record-braces-out.hs +16/−0
- corpora/vendored/declaration/value/pattern-synonym-record-braces.hs +14/−0
- corpora/vendored/declaration/value/record-construction-braces-out.hs +26/−0
- corpora/vendored/declaration/value/record-construction-braces.hs +24/−0
- corpora/vendored/declaration/value/record-update-braces-out.hs +22/−0
- corpora/vendored/declaration/value/record-update-braces.hs +20/−0
- corpora/vendored/declaration/value/specialise-without-a-head-variable-out.hs +4/−0
- corpora/vendored/declaration/value/specialise-without-a-head-variable.hs +4/−0
- corpora/vendored/other/multiline-string-trailing-space-out.hs +9/−0
- corpora/vendored/other/multiline-string-trailing-space.hs +9/−0
- src/Tilia/Cabal/Package.hs +415/−0
- src/Tilia/Cabal/Project.hs +69/−0
- src/Tilia/Cabal/Target.hs +441/−0
- src/Tilia/Comments.hs +8/−30
- src/Tilia/Comments/Attach.hs +38/−47
- src/Tilia/Comments/Place.hs +14/−18
- src/Tilia/Cpp.hs +201/−667
- src/Tilia/Cpp/Directives.hs +636/−0
- src/Tilia/Cpp/Macros.hs +45/−64
- src/Tilia/Diff.hs +15/−14
- src/Tilia/Doc.hs +1/−4
- src/Tilia/Doc/Body.hs +1/−5
- src/Tilia/Doc/Combinators.hs +59/−80
- src/Tilia/Doc/Internal.hs +78/−155
- src/Tilia/Equivalence.hs +27/−144
- src/Tilia/Fixity.hs +260/−374
- src/Tilia/Fixity/ByHand.hs +4/−46
- src/Tilia/Fixity/Cabal.hs +13/−29
- src/Tilia/Fixity/Cache.hs +85/−132
- src/Tilia/Fixity/Debug.hs +13/−14
- src/Tilia/Fixity/HiFile.hs +352/−0
- src/Tilia/Fixity/Interface.hs +70/−45
- src/Tilia/Fixity/PackageDb.hs +11/−38
- src/Tilia/Fixity/Plan.hs +284/−336
- src/Tilia/Format.hs +103/−94
- src/Tilia/Imports.hs +182/−137
- src/Tilia/Package.hs +0/−230
- src/Tilia/Parser.hs +15/−30
- src/Tilia/Pragma.hs +2/−2
- src/Tilia/Process.hs +6/−10
- src/Tilia/Project.hs +0/−93
- src/Tilia/Render.hs +10/−12
- src/Tilia/Render/Body.hs +6/−40
- src/Tilia/Render/Class.hs +36/−60
- src/Tilia/Render/Context.hs +63/−151
- src/Tilia/Render/Data.hs +62/−83
- src/Tilia/Render/Declaration.hs +20/−62
- src/Tilia/Render/Expression.hs +305/−444
- src/Tilia/Render/Haddock.hs +14/−73
- src/Tilia/Render/Header.hs +32/−74
- src/Tilia/Render/Layout.hs +10/−29
- src/Tilia/Render/Literal.hs +16/−18
- src/Tilia/Render/Name.hs +28/−46
- src/Tilia/Render/Operator.hs +16/−13
- src/Tilia/Render/Pattern.hs +47/−31
- src/Tilia/Render/Pragma.hs +10/−46
- src/Tilia/Render/Signature.hs +43/−50
- src/Tilia/Render/Type.hs +74/−117
- src/Tilia/Run.hs +39/−45
- src/Tilia/Source.hs +4/−10
- src/Tilia/Source/Lines.hs +20/−20
- src/Tilia/Span.hs +5/−33
- src/Tilia/Target.hs +0/−352
- src/Tilia/Utils.hs +46/−5
- tests/Main.hs +2/−1
- tests/Tilia/Cabal/PackageSpec.hs +294/−0
- tests/Tilia/Cabal/ProjectSpec.hs +124/−0
- tests/Tilia/Cabal/TargetSpec.hs +517/−0
- tests/Tilia/Comments/PlaceSpec.hs +4/−4
- tests/Tilia/CommentsSpec.hs +4/−4
- tests/Tilia/Corpus.hs +44/−4
- tests/Tilia/Corpus/Manifest.hs +3/−3
- tests/Tilia/CorpusSpec.hs +1/−1
- tests/Tilia/Cpp/MacrosSpec.hs +13/−13
- tests/Tilia/Cpp/PropertiesSpec.hs +7/−5
- tests/Tilia/CppSpec.hs +54/−14
- tests/Tilia/Doc/BodySpec.hs +1/−8
- tests/Tilia/Doc/CombinatorsSpec.hs +0/−3
- tests/Tilia/Fixity/CabalSpec.hs +1/−1
- tests/Tilia/Fixity/CacheSpec.hs +14/−2
- tests/Tilia/Fixity/DebugSpec.hs +8/−8
- tests/Tilia/Fixity/DependenciesSpec.hs +22/−84
- tests/Tilia/Fixity/HiFileSpec.hs +99/−0
- tests/Tilia/Fixity/InterfaceSpec.hs +23/−4
- tests/Tilia/Fixity/PlanSpec.hs +185/−47
- tests/Tilia/FixitySpec.hs +14/−45
- tests/Tilia/Gen.hs +6/−6
- tests/Tilia/NewlineSpec.hs +3/−3
- tests/Tilia/PackageSpec.hs +0/−218
- tests/Tilia/ProjectSpec.hs +0/−130
- tests/Tilia/Render/OperatorSpec.hs +1/−1
- tests/Tilia/RenderSpec.hs +2/−2
- tests/Tilia/RunSpec.hs +17/−13
- tests/Tilia/TargetSpec.hs +0/−307
- tests/Tilia/TestConfig.hs +3/−3
- tests/Tilia/WithProjectPlan.hs +163/−0
- tilia.cabal +15/−10
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,