! :      !"#$%&'()*+,-./0123456789?NoneD:;<None O=hlintUExtensions we turn on by default when parsing. Aim to parse as many files as we can.>hlintExtensions we turn on when reading config files, don't have to deal with the whole world of variations - in particular, we might require spaces in some places.?hlintFThis extension implies the following extensions are enabled/disabled.@hlintW(a, bs) means extension a implies all of bs. Uses GHC source at DynFlags.impliedXFlags=>?ANone% hlintA Fixity definition, comprising the name the fixity applies to, the direction and the precedence. As an example, a source file containing: infixr 3 `foo` would create ("foo", RightAssociative, 3). BCDEFGHINonezJhlintA comment as a string.Khlint+The comment string with delimiters removed.JKLMNOPQNone=>?@ARhlintLIs this item lexically requiring no bracketing ever i.e. is totally atomic.ShlintlIs the child safe free from brackets in the parent position. Err on the side of caution, True = don't know.TUVWRXYSNonelZ[None=>?HV'\hlintAReturn the variables, erring on the side of more free variables.]hlintAReturn the variables, erring on the side of more free variables. ^\_]`abcdef None$Gghlint declName xQ returns the "new name" that is created (for example a function declaration) by x. If xV isn't a declaration that creates a new name (for example an instance declaration), h is returned instead. This is useful because we don't want to tell users to rename binders that they aren't creating right now and therefore usually cannot change.gi Nonejk Nonel Nonemnop None%MWqrstNoneMuvwNone%=?@Agxyz{|}~SafeNoneSafeNone_!hlintHDon't crash in case ghc gives us a "fake" span, opting instead to show  -1 -1 -1 -1 coordinates.None %=>?@AHPV$hlint'dotApp a b' makes 'a . b'.hlintlambda [p0, p1..pn] body makes p1 p1 .. pn -> bodyhlint'paren e' wraps e in parens if e is non-atomic.WRXYSNone$NoneESX%None%4>MPX'hlint(Unification, obeys the property that if  unify a b = s, then substitute s a = b.None%g(Uhlint3The "Line'" thing is because there is already e.g. aJKLMNOPQWRXYSZ[^\_]`abcdefgijklmnopqrstuvwxyz{|}~None%>>^hlint Result of , representing a parsed module.hlintA parse error.hlintLocation of the error.hlint%Message about the cause of the error.hlint3Snippet of several lines (typically 5) including a >' character pointing at the faulty line.hlint Created with  , used by . hlint*How the file is preprocessed (defaults to ). hlint9Base language (e.g. Haskell98, Haskell2010), defaults to h. hlintTList of extensions enabled for parsing, defaults to many non-conflicting extensions. hlint>List of fixities to be aware of, defaults to those defined in base. hlint$What C pre processor should be used.hlintNo pre processing is done.hlintLines prefixed with # are stripped.hlintThe cpphs library is used.hlintDefault value for .hlint:Given some fixities, add them to the existing fixities in .hlint4Extract a list of all of a parsed module's comments.hlint6The error handler invoked when GHC parsing has failed.hlintParse a Haskell module. Applies the C pre processor, and uses best-guess fixity resolution if there are ambiguities. The filename - is treated as stdin. Requires some flags (often ;), the filename, and optionally the contents of that file.hlintUGiven a line number, and some source code, put bird ticks around the appropriate bit. NoneZhlintExtra command-line argumenthlintA  LHS ==> RHS style hint rule.hlintDefault severity for the hint.hlintName for the hint.hlint$Notes about application of the hint.hlintYModule scope in which the hint operates (GHC parse tree). We wrap these GHC elements in  in order that we may derive .hlintLHS (GHC parse tree).hlintRHS (GHC parse tree).hlint Side condition (GHC parse tree).hlintHow to classify an Idea. If any matching field is "" then it matches everything.hlintSeverity to set the Idea to.hlint Match on Idea field ideaHint.hlint Match on Idea field  ideaModule.hlint Match on Idea field ideaDecl.hlint0A note describing the impact of the replacement.hlint=The replacement is increases laziness, for example replacing reverse (reverse x) with x makes the code lazier.hlint=The replacement is decreases laziness, for example replacing (fst x, snd x) with x makes the code stricter.hlint6The replacement removes errors, for example replacing  foldr1 (+) with sum removes an error on [], and might contain the text "on []".hlintIThe replacement assumes standard type class lemmas, a hint with the note ValidInstance "Eq" "x" might only be valid if the x variable has a reflexive Eq instance.hlint8The replacement requires this extension to be available. hlintAn arbitrary note.!hlintHow severe an issue is."hlintGThe issue has been explicitly ignored and will usually be hidden (pass --show+ on the command line to see ignored ideas).#hlintTSuggestions are things that some people may consider improvements, but some may not.$hlintEWarnings are suggestions that are nearly always a good idea to apply.%hlintTAvailable as a setting for the user. Only parse errors have this setting by default.< !%"$#None\None"#e &hlintAn idea suggest by a Hint.(hlint1The modules the idea is for, usually a singleton.)hlintkThe declarations the idea is for, usually a singleton, typically the function name, but may be a type name.*hlintThe severity of the idea, e.g. $.+hlint3The name of the hint that generated the idea, e.g.  "Use reverse".,hlint$The source code the idea relates to.-hlint4The contents of the source code the idea relates to..hlintThe suggested replacement, or h+ for no replacement (e.g. on parse errors)./hlint3Notes about the effect of applying the replacement.0hlintHow to perform this idea% !%"$#&'/.+()*,-0     None"#MgDhlint$Returns the number of failing tests.NonehhlintBGiven a set of hints, do all the HintRule hints satisfy QuickCheckNone"#%Xihlint,First string may have stars in it (the want) None"#j=!Nonep1hlint0Functions to generate hints, combined using the  instance.hlintDGiven a list of modules (and their scope information) generate some &s.hlint>Given a single module and its scope information generate some &s. hlint<Given a declaration (with a module and scope) generate some &[s. This function will be partially applied with one module/scope, then used on multiple Decl values.N  !%"$#&'/.+()*,-0     1! "#$"Noner%#None%>ra&$None%HVr'%None$(hlintwGiven a declaration, returns the suggested "newtype"ized declaration following these guidelines: * Types ending in a "Q\" are __ignored__, because they are usually unboxed primitives - @data X = X Int * ExistentialQuantification stuff is ignored - data X = forall t. X t1 * Constructors with (nonempty) constraints are ignored - data X a = (Eq a) => X a- * Single field constructors get newtyped - data X = X Int -> newtype X = X Int4 * Single record field constructors get newtyped - data X = X {getX :: Int} -> Cnewtype X = X {getX :: Int}@ * All other declarations are ignored.)hlintGChecks whether its argument is a "simple constructor" (see criteria in singleSimpleFieldNew^) returning the type inside the constructor if it is. This is needed for strictness analysis.*hlintThe "Bang" here refers to +, which notably also includes UNPACK pragmas!,&None%>-'None%>_.hlintARewrite 'do ...; x <- return y; ...' as 'do ...; let x = y; ...'./(None"#%0)None%>,1*None%2hlint>Squash lambdas and replace any repeated pattern variable with _3hlintUReplaces all non-wildcard patterns with a variable pattern with the given identifier.4+None"#J5,None$_u6hlint+Classes that can't require newtype deriving7hlint>Classes that can appear as stock, and can't appear as anyclass8-NoneHV9.None>X:hlintThe position to return if we match at this point, and the map of where to go next If two runs have the same vals, always use the first pos you find;/None<0None%>HVXO=1None>?2None"#HV_` @3None"#$%>PnAhlint7A list of root expressions, with their associated namesB4NoneChlintWA list of the builtin hints wired into HLint. This list is likely to grow over time.Dhlint=A list of builtin hints, currently including entries such as "List" and  "Bracket".EhlintTransform a list of C or  into a 1.FhlintTransform a list of  into a 1. 1! #DEF5None"#%>MPGhlintRead a config file in YAML format. Takes a filename, and optionally the contents. Fails if the YAML doesn't parse or isn't valid HLint YAMLHhlintBFailed when parsing some value, give an informative error message.IGJ6NoneJK7None"#$#LhlintGiven a source file, guess some hints that might apply. Returns the text of the hints (if you want to save it down) along with the settings to be used.L8None"#Mhlint Print an N* with trailing null-terminator and newlineHThe trailing newline will be ignored, but makes the output more readableOhlintConvert an hlint &, to a datatype more easily serialized for CCMO9None%PMPhlint Read an {- ANN }-} pragma and determine if it is intended for HLint. Return Nothing if it is not an HLint pragma, otherwise what it means.PQ:NonemRhlintDApply hints to a single file, you may have the contents of the file.ShlintAApply hints to multiple files, allowing cross-file hints to fire.Thlint*Given a way of classifying results, and a 11, apply to a set of modules generating a list of & s. The && values will be ordered within a file.9Given a set of modules, it may be faster to pass each to T in a singleton list. When given multiple modules at once this function attempts to find hints between modules, which is slower and often pointless (by default HLint passes modules singularly, using --cross to pass all modules together).UhlintbGiven a list of settings (a way to classify) and a list of hints, run them over a list of modules.VhlintbReturn either an idea (a parse error) or the module. In IO because might call the C pre processor.Whlint,Find which hints a list of settings implies.XhlintIGiven some settings, make sure the severity field of the Idea is correct.RST;None"#%Y<NoneZ=None2Pȵ[hlint.which files to run it on, nothing = none given\hlintwhere to generate reports]hlint)which settignsfiles were explicitly given^hlint)groups that are given on the command line_hlintuse git ls-files to find files`hlintcolor the resultahlint/Numbmer of threads to use, 0 = whatever GHC hasbhlintthe hints to ignorechlintdisplay all skipped itemsdhlint extensionsehlint#the extensions (may be prefixed by No)fhlintRwork between source files, applies to hints such as duplicate code between modulesghlint!source files to look for hints inhhlintthe data directoryihlintPrint a default file to stdoutjhlintdisplay hint data as JSONkhlint(display hint data as Code Climate Issueslhlintdo not show the summary infomhlintspecify which hints explicitlynhlint%Display hints in serialisation formatohlintRun the refactor* executable to automatically perform hintsphlintOptions to pass to the refactor executable.qhlintPath to refactor toolrhlinta proof script to check againstshlint'temporary directory to put the files inthlintWhen to colour terminal output.uhlint'Terminal output will never be coloured.vhlint(Terminal output will always be coloured.whlintJTerminal output will be coloured if $TERM and stdout appear to support it.xhlintWhere should we find the configuration files? Either we use the implicit search, or we follow the cmdGivenHints We want more important hints to go last, since they overrideyhlint(Determines whether to use colour or not.zhlintTemporary filehlint%File to resolve, may be "-" for stdin4 {|}~dh_[\]^`abcefgijklmnopqrsxyz>None"#?None"#/2hlintvThis function takes a list of command line arguments, and returns the given hints. To see a list of arguments type  hlint --helpN at the console. This function writes to the stdout/stderr streams, unless --quiet is specified.As an example: ldo hints <- hlint ["src", "--ignore=Use map","--quiet"] when (length hints > 3) $ error "Too many hints!"Warning: The flags provided by HLint are relatively stable, but do not have the same API stability guarantees as the rest of the strongly-typed API. Do not run this function on your server with untrusted input.2None"# 3hlint1Get the Cabal configured data directory of HLint.4hlint'The function produces a tuple containg  (for  ), and  and 1 for 8C. It approximates the normal HLint configuration steps, roughly: Use 7 with 6+ to find and load the HLint settings files.Use  and  resolveHints to transform the outputs of 7.If you want to do anything custom (e.g. using a different data directory, storing intermediate outputs, loading hints from a database) you are expected to copy and paste this function, then change it to your needs.5hlint A version of 4 which respects some of the arguments supported by HLint. If arguments unrecognised by HLint are used it will result in an error. Arguments which have no representation in the return type are silently ignored.6hlintGiven a directory (or h to imply 3), and a module name (e.g.  HLint.Defaulto), find the settings file associated with it, returning the name of the file, and (optionally) the contents.9This function looks for all settings files starting with HLint.U in the directory argument, and all other files relative to the current directory.7hlint-Given a function to load a module (typically 6.), and a module to start from (defaults to  hlint.yaml/) find the information from all settings files.hlintSplit a list of 0 for separate use in parsing and hint resolution8hlint*Given a way of classifying results, and a 11, apply to a set of modules generating a list of & s. The && values will be ordered within a file.9Given a set of modules, it may be faster to pass each to 8 in a singleton list. When given multiple modules at once this function attempts to find hints between modules, which is slower and often pointless (by default HLint passes modules singularly, using --cross to pass all modules together).hlintISnippet from the documentation, if this changes, update the documentation9hlint Create a  from GHC annotations and module tree. It is assumed the incoming parse module has not been adjusted to account for operator fixities.:  !%"$#&'/.+()*,-0123456789:28&'/.+()*,-0!%"$# 3457619 @ABBCDEFFGHIJKLMNOPQRRSTUVWXYZ[\W]^_`abcdefghij!k?lmnopqrstuvwxyz{|}~|}|}|} |   A    | !"#$%&'())*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST U|VW!X!Y!Z!k![!\!]"^#_$`%a%b%cde%f&g'h'i(j)k*l*m*n+o,p,q,r-s.t.u/v0w1x1y2z3{3|4}4~4455556788899:::r::::;<====================================================>? hlint-3.0-18zBtpstwtTBoLvztZhA4TLanguage.Haskell.HLint EmbedData ExtensionFixityGHC.Util.ApiAnnotationGHC.Util.BracketsGHC.Util.DynFlagsGHC.Util.FreeVarsGHC.Util.HsDeclGHC.Util.ModuleGHC.Util.OutputableGHC.Util.RdrNameGHC.Util.ScopeGHC.Util.SrcLoc GHC.Util.ViewHsColourParallel Paths_hlintRefactGHC.Util.HsExprTimingUtilGHC.Util.UnifyGHC.UtilHSE.All Config.Type Test.ProofIdea Test.UtilTest.TranslateTest.InputOutputReport Hint.Type Hint.Unsafe Hint.Pragma Hint.Pattern Hint.NewType Hint.Naming Hint.Monad Hint.ListRec Hint.List Hint.Lambda Hint.ImportHint.Extensions Hint.ExportHint.Duplicate Hint.Comment Hint.Bracket Hint.Smell Hint.Restrict Hint.MatchHint.All Config.Yaml Config.ReadConfig.ComputeCCConfig.HaskellApplyTest.AnnotationsGrepCmdLineTest.AllHLint FixityInfoModuleEx ParseErrorparseErrorLocationparseErrorMessageparseErrorContents ParseFlagscppFlags baseLanguage extensionsfixitiesCppFlagsNoCpp CppSimpleCpphsdefaultParseFlagsparseFlagsAddFixities parseModuleExClassifyclassifySeverity classifyHintclassifyModule classifyDeclNoteIncreasesLazinessDecreasesLaziness RemovesError ValidInstanceRequiresExtensionSeverityIgnore SuggestionWarningError ideaModuleideaDecl ideaSeverityideaHintideaSpanideaFromideaToideaNoteideaRefactoringHinthlintgetHLintDataDir autoSettings argsSettingsreadSettingsFile findSettings applyHintscreateModuleEx hlintYaml defaultYamlreportTemplatedefaultExtensionsconfigExtensionsextensionImpliesextensionImplicationsextensionImpliedEnabledBybase GHC.Generics AssociativityLeftAssociativeRightAssociativeNotAssociative fromFixitySigtoFixity toFixitySigdefaultFixitiescomment commentTextisCommentMultilinepragmasflagslangExtsmkFlags mkLangExtsisAtom' needBracket'1ghc-lib-parser-ex-8.10.0.5-DyuaYky642GIbdHv8Orfyp+Language.Haskell.GhclibParserEx.GHC.Hs.ExprisAnyAppisOpAppisApp Brackets' remParen' addParen' baseDynFlagsinitGlobalDynFlags freeVars'allVars' FreeVars'AllVars'Vars'free'bound'vars'varss'pvars'declName GHC.MaybeNothingbindNamemodNamefromModuleName'unsafePrettyPrint rdrNameStr' isSpecial'unqual' fromQual'Scope scopeCreate scopeMatch scopeMoveSrcSpanD stripLocs' LamConst1'App2'PApp_'PVar_'Var_'View'view' SimpleLambda fromParen'hsColourConsole hsColourHTMLparallelversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName toSrcSpan'toRefactSrcSpan'toSS' checkRefactor refactorPathrunRefactoringdotApp'lambdaparen'dotApps'universeParentExp'apps' fromApps' universeApps'transformAppsM' rebracket1' appsBracket' simplifyExp' niceLambda'allowRightSectionallowLeftSection niceLambdaR'replaceBranches'needBracketOld'transformBracketOld' fromParen1'timedtimedIO startTimings printTimings forceList exitMessageexitMessageImpuregetContentsUTF8gzipuniverseParentBiunify'Subst' fromSubst' validSubst' removeParens substitute'unifyExpSrcSpan5ghc-lib-parser-8.10.1.20200412-GEvKrZ7aByV5xiS1SHOfZ1SrcLocsrcSpanStartLine2Language.Haskell.GhclibParserEx.GHC.Driver.SessionparsePragmasIntoDynFlags srcFilenamesrcLine srcColumnsrcSpanFilenamesrcSpanStartLine'srcSpanStartColumnsrcSpanEndLine'srcSpanEndColumnparseExpGhcLibparseImportGhcLibparseDeclGhcLibparseFileGhcLib showSrcSpan' ghcCommentsghcFailOpParseModuleExcontextghcAnnotations ghcModuleparseFlagsSetLanguageparseExpGhcWithModeparseImportDeclGhcWithModeparseDeclGhcWithModeSettingArgumentHintRulehintRuleSeverity hintRuleName hintRuleNotes hintRuleScope6Language.Haskell.GhclibParserEx.GHC.Hs.ExtendInstancesHsExtendInstancesGHC.ShowShow hintRuleLHS hintRuleRHS hintRuleSideSettingInfixSettingClassifySettingMatchExpSettingRestrict SettingSmellBuiltin SmellTypeSmellLongFunctionsSmellLongTypeListsSmellManyArgFunctionsSmellManyImportsRestrict restrictTyperestrictDefault restrictName restrictAsrestrictWithinrestrictBadIdentsrestrictMessage RestrictTypeRestrictModuleRestrictExtension RestrictFlagRestrictFunction getSeveritygetRestrictTypedefaultHintName isUnifyVar showNotes getSmellTypeproof showIdeasJsonshowANSIrawIdea'rawIdeaN rawIdeaN'idea'suggest' suggestRemovewarn' warnRemoveignoreNoSuggestion'ignore' suggestN' withTestsTestaddIdeasgetIdeasprogresspassedfailedtestQuickCheck testTypeCheck matchStartestInputOutput writeReportGHC.BaseMonoid hintModules hintModulehintDecl CrossHintModuHint DeclHint' unsafeHint pragmaHint patternHintsingleSimpleField simpleCons dropConsBangDataCon HsSrcBang newtypeHint namingHintmonadLet monadHint listRecHintlistHint fromLambdamunge lambdaHint importHintnoDeriveNewtype deriveStockextensionsHint exportHintDupe duplicateHint commentHint bracketHintsmellModuleHint smellHint restrictHint findDecls' readMatch' HintBuiltin builtinHints resolveHints hintRulesreadFileConfigYaml parseFail ConfigYamlsettingsFromConfigYamlreadFilesConfigcomputeSettings printIssueIssuefromIdea readPragma readComment applyHintFileapplyHintFiles executeHintsparseModuleApplyallHintsclassifytestAnnotationsrunGrepcmdFiles cmdReports cmdGivenHints cmdWithGroupscmdGitcmdColor cmdThreads cmdIgnore cmdShowAll cmdExtension cmdLanguagecmdCross cmdFindHints cmdDataDir cmdDefaultcmdJsoncmdCC cmdNoSummarycmdOnly cmdSerialise cmdRefactorcmdRefactorOptionscmdWithRefactorcmdProof cmdTempDir ColorModeNeverAlwaysAuto cmdHintFiles cmdUseColour resolveFileCmdCmdMainCmdGrepCmdTestcmdPath cmdCppDefine cmdCppInclude cmdCppFile cmdCppSimple cmdCppAnsi cmdNoExitCode cmdTiming cmdIgnoreGlob cmdPattern cmdQuickCheck cmdTypeCheckgetCmd exitWithHelp cmdExtensionscmdCpptestreadAllSettings splitSettings_docs