!" <      !"#$%&'()*+,-./0123456789:;:None^<=>None i?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.AhlintFThis extension implies the following extensions are enabled/disabled.BhlintW(a, bs) means extension a implies all of bs. Uses GHC source at DynFlags.impliedXFlags?@ACNone% 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). DEFGHIJKNoneLhlintA comment as a string.Mhlint+The comment string with delimiters removed.LMNOPQRSNone=>?@AThlintLIs this item lexically requiring no bracketing ever i.e. is totally atomic.UhlintlIs the child safe free from brackets in the parent position. Err on the side of caution, True = don't know.VhlintAm I an HsApp such that having me in an infix doesn't require brackets. Before BlockArguments that was _all_ HsApps. Now, imagine:$(f x -> x) *> ... (f do x) *> ...WXYZT[\UNoneL]^None=>?HV_hlintAReturn the variables, erring on the side of more free variables.`hlintAReturn the variables, erring on the side of more free variables. a_b`cdefghi None$'jhlint 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), k 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.jl None%Mvmnopq NoneMrst None%=?@Ag <uvwxyz{|}~ Safe None Safe!=None_#AhlintHDon't crash in case ghc gives us a "fake" span, opting instead to show  -1 -1 -1 -1 coordinates.None %=>?@AHPV_&Phlint'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.ZT[\UNone&NoneESX'FNone%4>MPX*hlint(Unification, obeys the property that if  unify a b = s, then substitute s a = b.hlint[If we "throw away" the extra than we have no where to put it, and the substitution is wrongNone%g,hlint3The "Line'" thing is because there is already e.g. ZLMNOPQRSZT[\U]^a_b`cdefghijlmnopqrstuvwxyz{|}~NoneIhlintExtra 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"#T( 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 k+ for no replacement (e.g. on parse errors).hlint3Notes about the effect of applying the replacement.hlintHow to perform this idea$  None"#MUhlint$Returns the number of failing tests.None"#%XVhlint,First string may have stars in it (the want)None"#WA None"#Z hlint Print an  * with trailing null-terminator and newlineHThe trailing newline will be ignored, but makes the output more readable hlintConvert an hlint , to a datatype more easily serialized for CC  None%>uhlint Result of 2, 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 2.&hlint*How the file is preprocessed (defaults to ,).'hlint9Base language (e.g. Haskell98, Haskell2010), defaults to k.(hlintTList of extensions enabled for parsing, defaults to many non-conflicting extensions.)hlint7List of extensions disabled for parsing, usually empty.*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 $.0hlint: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.1hlint Create a  from GHC annotations and module tree. It is assumed the incoming parse module has not been adjusted to account for operator fixities (it uses the HLint default fixities).2hlintParse 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.!Note that certain programs, e.g.  main = doz successfully parse with GHC, but then fail with an error in the renamer. These programs will return a successful parse.hlintUGiven a line number, and some source code, put bird ticks around the appropriate bit. !"#$%&'()*+.,-/0 12None|3hlint0Functions 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.O   !"#$%&'()*+.,-/0 123None~6None~q ! None "#%HV_`~"!None%>C#"None%HV$#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%>_+hlint@Call with the name of the declaration, the nearest enclosing `do`M expression the nearest enclosing expression the expression of interest,hlintARewrite 'do ...; x <- return y; ...' as 'do ...; let x = y; ...'.-&None"#$%>P=.hlint7A list of root expressions, with their associated names/'None"#%0(None%>1)None%_2hlint>Squash lambdas and replace any repeated pattern variable with _3hlintWFor each pattern, if it does not contain wildcards, replace it with a variable pattern.The second component of the result is a list of substitution variables, which are guaranteed to not occur in the function name or patterns with wildcards. For example, given 'f (Foo a b _) = ...', f, a and b* are not usable as substitution variables.4*None"#_5+None$_A6hlint+Classes that can't require newtype deriving7hlint>Classes that can appear as stock, and can't appear as anyclass8,NoneHV9-None>Xe: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</None%>HVX=0None>hlintWA list of the builtin hints wired into HLint. This list is likely to grow over time.?hlint=A list of builtin hints, currently including entries such as "List" and  "Bracket".@hlintTransform a list of > or  into a 3.AhlintTransform a list of  into a 3. 3?@A1None"#%>MPBhlintRead 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 YAMLChlintBFailed when parsing some value, give an informative error message.DBE2NoneF3None"#$GhlintGiven 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.G4None%PwHhlint 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.HI5NoneJhlintDApply hints to a single file, you may have the contents of the file.KhlintAApply hints to multiple files, allowing cross-file hints to fire.Lhlint*Given a way of classifying results, and a 31, 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 L 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).MhlintbGiven a list of settings (a way to classify) and a list of hints, run them over a list of modules.NhlintbReturn either an idea (a parse error) or the module. In IO because might call the C pre processor.Ohlint,Find which hints a list of settings implies.PhlintIGiven some settings, make sure the severity field of the Idea is correct.JKL6None"#%QRST7None"#PĺUhlintVGenerate a summary of hints, including built-in hints and YAML-configured hints from data/hlint.yaml.VhlintIThe summary of built-in hints is generated by running the test cases in srcHint*.hsC. One entry per (hint name, severity, does it support refactoring).Whlint Render using  code' if it is single-line, otherwise using  pre.U8None2PXhlint.which files to run it on, nothing = none givenYhlintwhere to generate reportsZhlint)which settignsfiles were explicitly given[hlint)groups that are given on the command line\hlintuse git ls-files to find files]hlintcolor the result^hlint/Numbmer of threads to use, 0 = whatever GHC has_hlintthe hints to ignore`hlintdisplay all skipped itemsahlint extensionsbhlint#the extensions (may be prefixed by No)chlintRwork between source files, applies to hints such as duplicate code between modulesdhlint!source files to look for hints inehlintthe data directoryfhlintPrint a default file to stdoutghlintdisplay hint data as JSONhhlint(display hint data as Code Climate Issuesihlintdo not show the summary infojhlintspecify which hints explicitlykhlint%Display hints in serialisation formatlhlintRun the refactor* executable to automatically perform hintsmhlintOptions to pass to the refactor executable.nhlintPath to refactor toolohlint%Generate a summary of available hintsphlintWhen to colour terminal output.qhlint'Terminal output will never be coloured.rhlint(Terminal output will always be coloured.shlintJTerminal output will be coloured if $TERM and stdout appear to support it.thlintWhere 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 overrideuhlint(Determines whether to use colour or not.vhlintTemporary filehlint%File to resolve, may be "-" for stdin/+.,-wxyae\XYZ[]^_`bcdfz{|}~ghijklmnotuv9None"#:None"#$84hlintvThis 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.4None"#  5hlint1Get the Cabal configured data directory of HLint.6hlint'The function produces a tuple containg $ (for 2 ), and  and 3 for :C. It approximates the normal HLint configuration steps, roughly: Use 9 with 8+ to find and load the HLint settings files.Use 0 and  resolveHints to transform the outputs of 9.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.7hlint A version of 6 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.8hlintGiven a directory (or k to imply 5), 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.9hlint-Given a function to load a module (typically 8.), 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 resolution:hlint*Given a way of classifying results, and a 31, 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 : 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 documentation;hlint Unpack a " value. Useful to allow using the / information without adding a dependency on ghc or ghc-lib-parser. Unpacking gives: 4(filename, (startLine, startCol), (endLine, endCol))3Following the GHC API, he end column is the column afterA the end of the error. Lines and columns are 1-based. Returns k- if there is no helpful location information.<   !"#$%&'()*+.,-/0123456789:;<4:  ;56798321 !"#/$%&'()*+.,-0;<<=>?@ABCDEFAGHIJKLMNOPQRSTUVVWXYZZ[\]^_`abcdefgh:ijklmnopqrstuvwxyz{yz|yz}yz~ y                  y      !"#$%&'()*+,-./0123456789:;<=>?@ABCUDEFGHIyJKLMNhOPQRST U!V"W#X#Y#Z[\#]$^%_%`%a&b&c'd(e)f)g)h*i+j+k+l,m-n-o.p/q0r0s0t0u1v1w1x1y2z3{4|4}5~55o55556666777888888888888888888888888888888888888888888888889: hlint-3.2-9QuWINjFQKr8HsGkNfyDJzLanguage.Haskell.HLint EmbedData ExtensionFixityGHC.Util.ApiAnnotationGHC.Util.BracketsGHC.Util.DynFlagsGHC.Util.FreeVarsGHC.Util.HsDeclGHC.Util.ScopeGHC.Util.SrcLoc GHC.Util.ViewHsColourParallel Paths_hlintRefactGHC.Util.HsExprTimingUtilGHC.Util.UnifyGHC.Util Config.TypeIdea Test.UtilTest.InputOutputReportCCGHC.All Hint.Type Hint.Unsafe Hint.Smell Hint.Restrict Hint.Pragma Hint.Pattern Hint.NewType Hint.Naming Hint.Monad Hint.Match Hint.ListRec Hint.List Hint.Lambda Hint.ImportHint.Extensions Hint.ExportHint.Duplicate Hint.Comment Hint.BracketHint.All Config.Yaml Config.ReadConfig.ComputeConfig.HaskellApplyTest.AnnotationsSummaryCmdLineTest.AllHLint FixityInfoClassifyclassifySeverity classifyHintclassifyModule classifyDeclNoteIncreasesLazinessDecreasesLaziness RemovesError ValidInstanceRequiresExtensionSeverityIgnore SuggestionWarningError ideaModuleideaDecl ideaSeverityideaHintideaSpanideaFromideaToideaNoteideaRefactoringModuleEx ParseErrorparseErrorLocationparseErrorMessageparseErrorContents ParseFlagscppFlags baseLanguageenabledExtensionsdisabledExtensionsfixitiesCppFlagsNoCpp CppSimpleCpphsdefaultParseFlagsparseFlagsAddFixitiescreateModuleEx parseModuleExHinthlintgetHLintDataDir autoSettings argsSettingsreadSettingsFile findSettings applyHints unpackSrcSpan hlintYaml defaultYamlreportTemplatedefaultExtensionsconfigExtensionsextensionImpliesextensionImplicationsextensionImpliedEnabledBybase GHC.Generics AssociativityLeftAssociativeRightAssociativeNotAssociative fromFixitySigtoFixity toFixitySigdefaultFixitiescomment commentTextisCommentMultilinepragmasflagslanguagePragmasmkFlagsmkLanguagePragmasisAtom needBracket isAtomOrApp2ghc-lib-parser-ex-8.10.0.16-HhB8SnNIrpZ9VaDqiMEUND+Language.Haskell.GhclibParserEx.GHC.Hs.ExprisAnyAppisOpAppisAppBracketsremParenaddParen baseDynFlagsinitGlobalDynFlagsfreeVarsallVarsFreeVarsAllVarsVarsfreeboundvarsvarsspvarsdeclName GHC.MaybeNothingbindNameScope scopeCreate scopeMatch scopeMove possModulesSrcSpanD stripLocs LamConst1App2PApp_PVar_Var_RdrName_Viewview SimpleLambda fromParenhsColourConsole hsColourHTMLparallelversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNametoSS substVarstoRefactSrcSpan checkRefactor refactorPathrunRefactoringdotApplambdaparendotAppsuniverseParentExpappsfromApps universeAppstransformAppsM rebracket1 appsBracket simplifyExp niceLambdaallowRightSectionallowLeftSection niceLambdaRreplaceBranchesneedBracketOldtransformBracketOld fromParen1timedtimedIO startTimings printTimings forceList exitMessageexitMessageImpuregetContentsUTF8gzipuniverseParentBiunify'noExtraSubst fromSubst validSubst removeParens substituteunifyExpSrcSpan5ghc-lib-parser-8.10.2.20200808-1yGh9NazOlH8xYNIwuirq3SrcLocsrcSpanStartLine2Language.Haskell.GhclibParserEx.GHC.Driver.SessionparsePragmasIntoDynFlags srcFilenamesrcLine srcColumnsrcSpanFilenamesrcSpanStartLine'srcSpanStartColumnsrcSpanEndLine'srcSpanEndColumn fileToModule showSrcSpanSettingArgumentHintRulehintRuleSeverity hintRuleName hintRuleNotes hintRuleScope6Language.Haskell.GhclibParserEx.GHC.Hs.ExtendInstancesHsExtendInstancesGHC.ShowShow hintRuleLHS hintRuleRHS hintRuleSideSettingInfixSettingClassifySettingMatchExpSettingRestrict SettingSmellBuiltin SmellTypeSmellLongFunctionsSmellLongTypeListsSmellManyArgFunctionsSmellManyImportsRestrict restrictTyperestrictDefault restrictName restrictAsrestrictWithinrestrictBadIdentsrestrictMessage RestrictTypeRestrictModuleRestrictExtension RestrictFlagRestrictFunction getSeveritygetRestrictTypedefaultHintName isUnifyVar showNotes getSmellType showIdeasJsonshowANSIrawIdearawIdeaNidea ideaRemovesuggest suggestRemovewarnignoreNoSuggestionignoresuggestN withTestsTestprogresspassedfailed matchStartestInputOutput writeReport printIssueIssuefromIdea ghcCommentsghcFailOpParseModuleExcontextghcAnnotations ghcModuleparseFlagsSetLanguageparseExpGhcWithModeparseImportDeclGhcWithModeparseDeclGhcWithModeGHC.BaseMonoid hintModules hintModulehintDecl CrossHintModuHintDeclHint unsafeHintsmellModuleHint smellHint restrictHint pragmaHint patternHintsingleSimpleField simpleCons dropConsBangDataCon HsSrcBang newtypeHint namingHintmonadExpmonadLet monadHint findDecls readMatch listRecHintlistHint fromLambda mkOrigPats lambdaHint importHintnoDeriveNewtype deriveStockextensionsHint exportHintDupe duplicateHint commentHint bracketHint HintBuiltin builtinHints resolveHints hintRulesreadFileConfigYaml parseFail ConfigYamlsettingsFromConfigYamlreadFilesConfigcomputeSettings readPragma readComment applyHintFileapplyHintFiles executeHintsparseModuleApplyallHintsclassifyTestCasetestAnnotations parseTestFilegenerateSummarymkBuiltinSummaryhaskellcmdFiles cmdReports cmdGivenHints cmdWithGroupscmdGitcmdColor cmdThreads cmdIgnore cmdShowAll cmdExtension cmdLanguagecmdCross cmdFindHints cmdDataDir cmdDefaultcmdJsoncmdCC cmdNoSummarycmdOnly cmdSerialise cmdRefactorcmdRefactorOptionscmdWithRefactorcmdGenerateSummary ColorModeNeverAlwaysAuto cmdHintFiles cmdUseColour resolveFileCmdCmdMaincmdPath cmdCppDefine cmdCppInclude cmdCppFile cmdCppSimple cmdCppAnsi cmdNoExitCode cmdTiming cmdIgnoreGlobcmdTestgetCmd exitWithHelp cmdExtensionscmdCpptestreadAllSettings splitSettings_docs