# [      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                   !!!!!!!!!!!!!!!!!!! ! ! ! ! !!!!!!!!!!!!!!!!!!! !!!""#"$"%"&"'"(")"*"+","-".#/#0#1#2#3#4#5#6#7#8#9#:#;#<#=#>#?#@#A#B#C#D#E#F#G#H#I#J#K#L#M#N$O$P$Q$R$S$T$U%V&W'X'Y'Z(*)None"#%,/17;HMPX_km[\]^_`ab(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k$}stanIOpen a given file in a browser. The function has the following algorithm: Check the BROWSER environment variable5If it's not set, try to guess browser depending on OS!If unsuccsessful, print a messagecstan!Execute a command with arguments.}}(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k- ~stanA type of the inspection.stanShow ~ in a human-friendly format.stanList category of Stan inspections.stanPartial category of Stan inspections.stanInfinite category of Stan inspections.stan AntiPattern category of Stan inspections.stan SpaceLeak category of Stan inspections.stanSyntax/ category of Stan inspections. Usually used in * inspections.stanUnsafe category of Stan inspections.stanThe list of all available Stan ~s. ~ ~(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,./17;HMPUVX_k5tstanJA type alias for the situations when we don't care about the parameter of , but don't want to deal with type variables.stanqA wrapper around the textual value to safely represent IDs for different structures by using a phantom parameter.stanUnsafe cast of ?. Implementation uses smart trick to enforce usage always with TypeApplications.(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k@WstanUChecks that two lists have the same length and that a given binary predicate returns d( on each corresponding pair of elements.checkWith (==) [] []TruecheckWith (==) [1, 2] [1, 2]TruecheckWith (==) [1, 2] [2, 1]FalsecheckWith (==) [1, 2] [1]Falsestan@Returns list all element pairs without the following properties:No element with itself: (x, x) Only one of (x, y) and (y, x) will be in the resultIn other words, it's like taking the cross product of the list with itself and then keeping only the half of that without the diagonal. foo [1..3][(1, 2), (1, 3), (2, 3)](c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kA+(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_gkC(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kEJ7NMLKJRQPOSIHGTFEXUWV[ZY`_^]\abcdefghlkjponmqrstvuywxz{|7yzhwgx|cebdafvqrtsuXUWV[ZY{`_^]\SIHGRQPONMLKJTFElkjponm(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kJstan#Wrapper around Haskell module name.stanConvert ,- to .stanExtract  from ,..(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kKF  "! '&%$#(,+*)76543210/.-<;:98DCBA@?>=iF76543210/.-"!  <;:98(,+*)'&%$# DCBA@?>=i (c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kWpstanGets the list of .cabal* file paths that were used in the project.stan%From a given path to cabal files and  ds create the map from modules (that are in .cabal file) to the resulting parsed extensions for each.estanRecursively find all .cabalM files in the current directory and its subdirectories. It returns maximum 1 .cabal file from each directory.fstanFind a .cabalC file in the given directory. TODO: better error handling in stan.stanDo print into terminal?stan.cabal files (c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k^tstan*Data from different environment resources:Environment variablesUsed TOML configuration filesCommand Line argumentsstan Contains all stan System informationstanstan version information.stanCurrent stan version information.stanColourful pretty  representation used in the CLI.stanAll system info for the project (c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_koq stan%Meta information about function/type.stan Pretty show  in the following format: package/module/name.stan Check if  is identical to |.stanCheck whether HIE ( with details is a given .stanCheck if the given "' node is identifier equal to the given .stanCreate  for a function from the base package and a given  . module.stanCreate  for a function from the base package and the GHC.List module.stanCreate  for a function from the base package and the  Data.OldList module.stanCreate  for a function from the base package and the  Data.Foldable module.stanCreate  for a function from the unordered-containers package and a given  module.stanCreate  for a function from the text package and a given  module.stanCreate  for a function from the ghc-prim package and a given  module.stan for primitive types.stanName meta infostanHIE identifier8888 (c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kq (c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kystanCommon interface for gq-like parts of patterns. Allows to write composable and reusable complex pattern definitions from smaller pieces.1Laws (in terms of matching functions that return g):  "a d   "a h   x "a x   "a d   x "a x   "a xstan(Anything. Matching should always return d.stan Negation. Inverses the argument.stanOr-pattern. Choice.stanAnd-pattern. Both.23(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k#stan.Query pattern used to search types in HIE AST.stanArgument, type or constructor: a  !PatternName (NameMeta ... "a") []  [a]  *PatternName (NameMeta ... "[]") [aPattern]  Either Int String  ?PatternName (NameMeta ... "Either") [intPattern, stringPattern] stanFunction pattern.stan Type wildcard, matches anything.stan5Choice between patterns. Should match either of them.stan-Union of patterns. Should match both of them.stanANegation of pattern. Should match everything except this pattern.stanShort operator alias for  PatternFun.stanShort operator alias for .stan for list [a] or i.stan for j.stan for [a] -> _ or  String -> _.stan for k.stan for l.stan for i. stan for m. stanList of types for  STAN-0207.nstan for opstan for qrstan for pair (,). stanType patterns for the s= typeclass methods. Represented as a non-empty list of pairs: Method name1Function from type to pattern (where things like o, q should be)      45(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k$"stanQuery pattern used to search AST nodes in HIE AST. This data type tries to mirror HIE AST to each future matching, so it's quite low-level, but helper functions are provided.stanInteger constant in code.stan3Name of a specific function, variable or data type.stanVariable name.stanSet of context info (pairs of tags) | AST node with tags for current node and children patterns. This pattern should match the node exactly.stan5Choice between patterns. Should match either of them.stan-Union of patterns. Should match both of them.stanANegation of pattern. Should match everything except this pattern.stan5AST node with the specified Identifier details (only D) stanFunction that creates ( from the given non-empty list of pairs  and .If the list contains only one  then it is simple  . Else it is  of all such s.!stanLike   but doesn't care about types."stanapp f x' is a pattern for function application f x.#stan opApp x op y' is a pattern for operator application x op y.$stan range a b is a pattern for [a .. b]%stan% is a pattern for case' expression (not considering branches).&stan& is a pattern for  case EXP of' expression (not considering branches).'stan1Pattern to represent one pattern matching branch.(stan Pattern for _ in pattern matching.Note: presents on GHC >=8.10 only.)stan)Pattern for literals in pattern matching.Note: presents on GHC >=8.10 only.*stan4Pattern to represent one pattern matching branch on _.+stan>Pattern to represent right side of the pattern matching, e.g. -> "foo".,stan-Pattern for the top-level fixity declaration: infixr 7 ***, +++, ??? -stan4Pattern for the function type signature declaration: foo :: Some -> Type .stan$Pattern for the function definition: foo x y = ... /standata or newtype declaration.0stanoConstructor of a plain data type or newtype. Children of node that matches this pattern are constructor fields.1stan Constructor name Identifier info2stan*Lazy data type field. Comes in two shapes: Record field, like:  foo :: Text Simple type: InttstanGPattern for any occurrence of a plain type. Covers the following cases:Simple type: Int, Bool, a.Higher-kinded type: Maybe Int, Either String aType in parenthesis: (Int)Tuples: (Int, Bool)List type: [Int]Function type: Int -> Boolustan8Pattern for the field without the explicit bang pattern: someField :: Int 3stanPattern for tuples:,Type signatures: foo :: (Int, Int, Int, Int) Literals: (True, 0, [], Nothing)4stanPattern for a single guard branch:  | x < y = ... 5stan:Pattern for the right-hand-side. Usually an equality sign.  foo = baz 6stan)Annotations for constants: 0, "foo", etc.stan#Set of context info (pairs of tags)stan0Node children | AST wildcard, matches anything.( !"#$%&'()*+,-./0123456( !"#01/,.42$53-&%'+*)(6(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kț<stanReturns contents of all .hie files recursively in the given hie directory.=stan9Get the number of lines of code in the file by analising  .>stan.Take sub-bytestring according to a given span.'When the given source is empty returns v.1TODO: currently works only with single-line spans?stanICompare two AST nodes on equality. This is a more relaxed version of the w instance for " because it doesn't compare source locations. This function is useful if you want to check whether two AST nodes represent the same AST.)This function needs to take the original  % because constants are not stored in "B and to compare constants we need to compare parts of source code.<=>?<=?>(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k͇@stan?Matching function that searches the array of types recursively.@stanArray of all types in HIE filestanOur search querystan$Index of the current expression typestanIf matched type is found@@(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k&AstanEMatching function that matches current AST node with a given pattern.AstanHIE filestanCurrent AST node to matchstanPattern to match againststand if pattern matches AST nodeAA(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMOPX_kBB(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kנCstan@Boolean for showing/hiding solution information of observations.IstanSettings for produced report.NstanIs the toggle option set to D? CDEFGHIJKLMN IJKLFGHMCDEN(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k0 Qstan!Severity level of the inspection. Severity 5 Example  R  Missing infix, or type signature in where  S  Usage of /0, /1  T Some common user errors: [0 .. length xs]  U  Partial functions, like 23  V  Usage of x in code Rstan$Code style issues. Usually harmless.Sstan<Serious defects that could cause slowness and space leaking.TstanHuman errors in code.Ustan(Potential runtime errors on some inputs.VstanDangerous behaviour.WstanDescription of each Q level.Xstan%Get the colour of the severity level.YstanShow Q in a human-friendly format. QVRUSTWXY QVRUSTWXY(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k astan0Data type that represents all possible types of stan inspections in a uniformed way.bstanIFind the specific part of the Haskell AST (including specific functions).cstan$Find all operators without matching  infix[r|l]dstan&Check if the data type has lazy fieldsestanUsage of tuples with size >= 4fstanPattern matching on _ for sum types.gstan,Replace multiple comparison operations with yhstanType alias for the z$ that contains pairs of inspections s and corresponding is.istan:Data type that represents a check/test, or how we call it  inspection# that is provided by the Stan tool.wstanSort i by xstanShow i in a human-friendly format.ystanShow the short view of a given i.zstansCreate the MarkDown text for all inspections. The generated MD has a ToC and separate sections for each inspection.=This is used to keep the Wiki page of the project up to date.acbdefghijklmnopqrstuvwxyzijklmnopqtrsuvacbdefghwxyz(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kYstanAll anti-pattern i s map from s.stani  missing fixity declaration  STAN-0301.stani  to big tuples  STAN-0302.(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k stan All partial is.{stan,Smart constructor to create generic partial i with a given Pattern.|stan,Smart constructor to create generic partial i with PatternAnything.}stan$Smart constructor to create partial i$ for functions that work with lists.~stan$Smart constructor to create partial i/ for functions that work with enumerable types.stani  partial 23  STAN-0001.stani  partial 24  STAN-0002.stani  partial 25  STAN-0003.stani  partial 26  STAN-0004.stani  partial 27  STAN-0005.stani  partial 28  STAN-0006.stani  partial 9:  STAN-0007.stani  partial ;<  STAN-0008.stani  partial =>  STAN-0009.stani  partial ?@  STAN-0010.stani  partial ?A  STAN-0011.stani  partial ?B  STAN-0012.stani  partial /C  STAN-0013.stani  partial /D  STAN-0014.stani  partial /E  STAN-0015.stani  partial /F  STAN-0016.stani  partial /G  STAN-0017.stani#  partial 'Data.Foldable.foldl1''  STAN-0018.stani  partial /H  STAN-0019.stani  partial IJ  STAN-0020.stani  partial KL  STAN-0021.{stan Type name|stan Type name(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kstan All infinite i s map from s.stan%Smart constructor to create infinite i.stani for   infinite   STAN-0101.stani for   infinite 9M  STAN-0102.stani for   infinite /N | 9N  STAN-0103.stani for   infinite 9O  STAN-0104.stani for   infinite /0  STAN-0105.stani for   infinite /P  STAN-0106.(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k"CstanAll anti-pattern i s map from s.stan)Smart constructor to create anti-pattern i.stani  [0 .. length xs]  STAN-0201.stani  foldl  STAN-0202.stani  QR  STAN-0203.stani  slow ST and   STAN-0204.stani  slow ST  STAN-0205.stani"  missing strictness declaration  STAN-0206.stani  s, methods on possibly error-prone structures  STAN-0207.stani  slow  for UV  STAN-0208.stani  slow nub for lists  STAN-0209.stani  slow  and  for ranges  STAN-0210.stani   / on URLs  STAN-0211.stani  usage of unsafe* functions  STAN-0212.stani  Pattent matching on _ for sum types   STAN-0213.stani  use y  STAN-0214.stani  Slashes in paths  STAN-0215.(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k'HstanAll i s map from s.stanList of all inspections.stanSet of all inspection s.stanLook up i by the given inspection .stanGet the i by the given known inspection .(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k7stan!Type alias for the sized list of s.stan:Data type to represent discovered by Stan vulnerabilities.stanSmart constructor for s from  s.stanShow  in a human-friendly format.stanShow v in the following format: filename.ext(11:12-13:14) stanaCheckes the predicate on colourfulness and returns an empty text when the colouroing is disabled.stanCreate a stable   in a such way that: 2 doesn't depend on other inspections in this file. uniquely identifies  location.Vs are guaranteed to be the same if the module content didn't change between different stan runs.The   should look like this: OBS-STAN-XXXX- module-name-hash-10:42 stan-Hash module name to a short string of length 6%. Hashing algorithm is the following: First, run SHA-1.Then, encode with base64.Last, take first 6 characters.stanCorresponding is .stan Position.stan Use colouringstanIgnored ^ Unknown(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k;stanFile specific information.stan-Return the list of pretty-printed extensions.stan-Check whether the given extension is disabled  (c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k]stan/Either top-level operator or fixity declarationstan0Operator name with its position to display laterstanCreate analysing function for i by pattern-matching over a.stan:Check for occurrences of the specified function given via .stan9Check for big tuples (size >= 4) in the following places:,Type signatures: foo :: (Int, Int, Int, Int) Literals: (True, 0, [], Nothing)stan?Find usages of multiple comparison operators and suggest using y). Currently, handles the following cases:GuardscThe algorithm is to find all guards, filter them by usage of comparison operators and find matches.stan?Check for occurrences lazy fields in all constructors. Ignores newtypeGs. Currently HIE Ast doesn't have information whether the data type is newtypet or not. So the algorithm ignores all data types with a single constructor and single field inside that constructor.stan-Check for occurrences of pattern matching on _! for sum types (except literals).stanMAnalyse HIE AST to find all operators which lack explicit fixity declaration.The algorithm is the following: 6Traverse AST and discover all top-level operators and infix declarations in a single pass.9Compare two resulting sets to find out operators without infix declaration.stan<Partition a foldable of operator declarations into two maps: Fixity declarations (mapped to ()).;Top-level operator names (mapped to their source positions.$ is used to be able to use the nice merge function.stan2Analyses the whole AST starting from the very top.stan6Recursively match AST nodes starting from a given AST.stanLike ' but returns source spans of AST nodes.stan-Create a non-recursive matching function for : that returns sized list of nodes that match this pattern.If the pattern matches ! , return itOtherwise return empty liststan^Function to match AST node to some arbitrary type and return a sized list of matched elementsstan^Function to match AST node to some arbitrary type and return a sized list of matched elements(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kh,stanGThis data type stores all information collected during static analysis.stanIncrease the total loc (0) by the given number of analised lines of code.stan Add set of i s to the existing set.stan Add list of 's to the beginning of the existing liststan Add list of 's to the beginning of the existing liststan#Collect all unique used extensions.stanUpdate  for the given .stan!Perform static analysis of given  .stan#List of to-be-ignored Observations.stan#List of to-be-ignored Observations.stan#List of to-be-ignored Observations.   (c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kmstan:Enum to describe project health depending on the value of .stan:Shows analysed output of Stan work. This functions groups s by  they are found in.stan;Show project health as pretty text with 2 digits after dot.stan Calculate .!(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,./017;=>?HMPUVX_ek stan7Where to apply the rule for controlling inspection set.stan$Criterion for inspections filtering.stan1Rule to control the set of inspections per scope.stanType of :  or  is. stan3Main configuration type for the following purposes:PFiltering inspections (including or ignoring) per scope (file, directory, all)stanConvert TOML configuration to the equivalent CLI command that can be copy-pasted to get the same results as using the TOML config. G $ Reading Configurations from /home/vrom911/Kowainik/stan/.stan.toml ... stan check --exclude --directory=test/ \ check --include \ check --exclude --inspectionId=STAN-0002 \ check --exclude --inspectionId=STAN-0001 --file=src/MyFile.hs remove --file=src/Secret.hs ignore --id="STAN0001-asdfgh42:42" stan[Apply configuration to the given list of files to get the set of inspections for each file.The algorithm: "Remove all files specified by the remove option.Run  on the remaining files.stanConvert the list of s from , to data structure that allows filtering of is for given files.stanModify existing (s for each file using the given list of s.stanPaths to project filesstanStan runtime configurationstan*Resulting set of inspections for each filestanPaths to project filesstan List of rulesstan*Resulting set of inspections for each filestan(Initial set of inspections for each filestan List of rulesstan*Resulting set of inspections for each file          "(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kL "#$%&'()*+ "#$%&'()+*#(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/017;HMPX_k.stanOptions used for the stan cli-to-toml command.2stanOptions used for the stan toml-to-cli command.5stanOptions used for the stan inspection command.:stanOpen HTML report in a browser;stanOptions used for the main stan command.=stanDirectory with HIE files>stanPath to .cabal files.?stan#Settings for output terminal report@stanHTML report settingsAstan Use default  .stan.toml fileBstan%Path to a custom configurations file.Dstan:Output the machine-readable output in JSON format instead.EstanCommands used in Stan CLI.FstanJust stan with its options.Gstanstan inspection.Hstan stan toml-to-cliIstan stan cli-to-tomlJstan stan inspections-to-mdKstanRun main parser of the stan command line tool.Lstan To turn on some special options.stan@Stan tool parser. It either uses the named commands or the main stan command.stanstan command parser.stanstan inspection command parser.stanJThe solution is shown by default and gets hidden when option is specified.stanThe G is shown juicy by default and gets shortened when option is specified.stan Parser of an ?. Receives a string to specify in Help what kind of ID is this.stanShow the version of the tool. ./0123456789:;<=>?@ABCDEFGHIJKLM EFGHIJ;<=>?@ABCD89:567234./01KLM$(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_k{ stanCount of each inspectionstanCount of each categorystan Count of observations per modulestanHighest severityNstanShort info about analysis.PstanThe most popular iQstanThe most popular ~Rstan.Module with the biggest number of observationsSstan The highest QTstan Assemble N after analysis. Returns v when there's no  Observations]. Otherwise, there's at least one observation, which means that we can find the most popular i, ~ and the highest Q.stanFast, strict maximumNOPQRSTNOPQRST%(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kDUU&(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kVstan'Warnings during Trial config selectionsstanEnvironment informationstanProject related InformationVV'(c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/017;HMPX_kWstankBased on the incoming settings returns the TOML configuration files that were used to get the final config.stanHelper  for the hardcoded string "all".WXYXYW((c) 2020 KowainikMPL-2.0Kowainik <xrom.xkov@gmail.com>None"#%,/17;HMPX_kwZZWXYWXZWX[W\]W\\W^_W^`W^aW^bW^cW^dW^eW^eW^fW^gW^hW^iW^jW^kW^lW^mW^nW^oW^pW^qW^rW^rW^sW^tW^tW^uW^vW^wW^xW^yW^zW^{W^|W^}W^}W^~W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^W^WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.W.WWWWWWWWWWWWWWW.W.W..W.-WW--                                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~*      !"#$%&'( ) * + , - . . / 0 1 2 3 4 5 6 7 8 9 :!;!<!=!>!?!@!A!B!C!D!D!E!F!G!H!I!J!K!L!M!M!N!O!P!Q!R!S!T!U!V!W!X!Y!Z![!\!]!^!_!`!a!b!c!d"e"f"g"h"i"j"k"l"m"n"o"p#q#q#r#s#t#t#u#v#v#w#x#x#y#z#z#{#|#}#~######(#######$$$$$$$%&'''())))))))  V/2/N//#######$$$$$'stan-0.0.1.0-inplaceStan.Hie.CompatStan.Ghc.Compat Stan.Browse Stan.Category Stan.Core.IdStan.Core.List Stan.EnvVarsStan.Core.ModuleName Stan.Cabal Stan.Info Stan.NameMetaStan.Hie.DebugStan.Pattern.EdslStan.Pattern.TypeStan.Pattern.AstStan.HieStan.Hie.MatchTypeStan.Hie.MatchAstStan.Report.CssStan.Report.Settings Stan.SeverityStan.InspectionStan.Inspection.StyleStan.Inspection.PartialStan.Inspection.InfiniteStan.Inspection.AntiPatternStan.Inspection.AllStan.Observation Stan.FileInfoStan.Analysis.Analyser Stan.AnalysisStan.Analysis.Pretty Stan.ConfigStan.Config.PrettyStan.CliStan.Analysis.SummaryStan.Report.Html Stan.Report Stan.TomlStan Paths_stanStyle Stan.ExampleGHC ModuleNameModule Data.FoldablesumfoldlGHC.Listheadtailinitlast!!cycle Data.OldList genericIndex Data.MaybefromJust Text.ReadreadGHC.EnumsuccpredtoEnummaximumminimum maximumBy minimumByfoldl1foldr1GHC.ExtsfromListGHC.Num fromInteger isSuffixOflength genericLengthproductData.ByteString.Char8packData.HashMap.StrictsizeDataTextghcHieBin readHieFilehie_file_result HieFileResult NameCache initNameCacheHieTypes hie_hs_src hie_exportshie_asts hie_types hie_module hie_hs_fileHieFile TypeIndex HCoercionTyHCastTyHLitTyHQualTyHFunTy HForAllTy HTyConAppHAppTyHTyVarTyHieType HieTypeFlatHieArgsgetAstsHieASTs nodeChildrennodeSpannodeInfoNodeHieASTnodeIdentifiersnodeTypenodeAnnotationsNodeInfo Identifier identInfo identTypeIdentifierDetailsRecField TyVarBindDecl ClassTyDecl PatternBindValBindTyDeclIEThing MatchBindUse ContextInfoExport ImportHidingImportAsImportIETypeInstDecClassDec PatSynDecConDecDataDecSynDecFamDecDeclType IfaceType IfaceStrTyLit IfaceNumTyLitifaceTyConInfoifaceTyConName IfaceTyConIfaceEqualityTyCon IfaceSumTyConIfaceTupleTyConIfaceNormalTyConIfaceTyConSortifaceTyConSortifaceTyConIsPromotedIfaceTyConInfo IfaceTyLitVarRequired SpecifiedInferredArgFlagAvailAvailTC AvailInfo FieldLabel flSelectorflIsOverloadedflLabelFieldLblNamenameStableString nameModuleisExternalName nameOccNameOccNameisSymOcc occNameStringmoduleStableStringmoduleNameString UniqSupplymkSplitUniqSupply BasicTypes IsPromoted NotPromoted PromotionFlagConstraintTuple UnboxedTuple BoxedTuple TupleSortSrcLoc srcSpanEndColsrcSpanStartColsrcSpanEndLinesrcSpanStartLine srcSpanFile RealSrcSpan moduleName moduleUnitId FastString openBrowserCategory unCategoryprettyShowCategorylistpartialinfinite antiPattern spaceLeaksyntaxunsafestanCategories$fShowCategory $fEqCategory$fHashableCategory$fToJSONCategoryAnyIdIdunIdcastId$fShowId$fEqId$fOrdId $fHashableId $fToJSONId checkWithnonRepeatingPairsEnvVarsenvVarsUseDefaultConfigFile getEnvVars envVarsToText unModuleNamefromGhcModuleName fromGhcModule$fShowModuleName$fEqModuleName$fHashableModuleName$fIsStringModuleName$fToJSONModuleNameusedCabalFilescreateCabalExtensionsMapmergeParsedExtensions ProjectInfopiName piCabalFilespiHieDir piFileNumberStanEnv seEnvVars seTomlFiles seCliArgs StanSystemssOsssArch ssCompilerssCompilerVersion StanVersion svVersion svGitRevision svCommitDate stanVersionprettyStanVersion stanSystem$fShowStanVersion$fEqStanVersion$fShowStanSystem$fEqStanSystem $fShowStanEnv $fEqStanEnv$fShowProjectInfo$fEqProjectInfoNameMetanameMetaPackagenameMetaModuleName nameMetaNameprettyShowNameMeta compareNameshieMatchNameMetahieFindIdentifier baseNameFrommkBaseListMetamkBaseOldListMetamkBaseFoldableMetaunorderedNameFrom textNameFromghcPrimNameFrom primTypeMeta$fShowNameMeta $fEqNameMeta debugHieFile $fShowName $fShowModule$fShowFieldLbl$fShowAvailInfo $fShowArgFlag$fShowTupleSort$fShowPromotionFlag$fShowIfaceTyLit$fShowIfaceTyConSort$fShowIfaceTyConInfo$fShowIfaceTyCon$fShowIdentifierDetails$fShowNodeInfo $fShowHieArgs $fShowHieASTs $fShowHieAST $fShowHieType $fShowHieFile PatternBool?neg|||&&& PatternTypePatternTypeNamePatternTypeFunPatternTypeAnything PatternTypeOrPatternTypeAndPatternTypeNeg|->|:: listPatternnonEmptyPatternlistFunPatternintegerPatternnaturalPattern charPattern stringPattern textPatternfoldableTypesPatternsfoldableMethodsPatterns$fPatternBoolPatternType$fShowPatternType$fEqPatternTypeLiteralExactNumExactStr PrefixStr ContainStr AnyLiteral PatternAstPatternAstConstantPatternAstNamePatternAstVarNamePatternAstNodePatternAstNodeExactPatternAstAnything PatternAstOr PatternAstAnd PatternAstNegPatternAstIdentifierDetailsDeclnamesToPatternAstanyNamesToPatternAstappopApprange lambdaCasecase'patternMatchBranchwildPat literalPat patternMatch_patternMatchArrowfixitytypeSigfundataDecl constructorconstructorNameIdentifier lazyFieldtuple guardBranchrhs literalAnns$fPatternBoolPatternAst $fShowLiteral $fEqLiteral$fShowPatternAst$fEqPatternAst readHieFilescountLinesOfCodesliceeqAsthieMatchPatternTypehieMatchPatternAststanCssToggleSolution HideSolution ShowSolution VerbosityVerbose NonVerboseOutputSettingsoutputSettingsVerbosityoutputSettingsSolutionVerbosity isVerboseisHidden$fShowVerbosity$fShowToggleSolutionSeverity Performance PotentialBugWarningErrorseverityDescriptionseverityColourprettyShowSeverity$fToJSONSeverity$fShowSeverity$fReadSeverity $fEqSeverity $fOrdSeverity$fEnumSeverity$fBoundedSeverityInspectionAnalysisFindAstInfix LazyField BigTuplesPatternMatchOn_ UseCompareInspectionsMap Inspection inspectionIdinspectionNameinspectionDescriptioninspectionSolutioninspectionCategoryinspectionSeverityinspectionAnalysis descriptionL solutionL categoryL severityL analysisLsortByIdprettyShowInspectionprettyShowInspectionShort inspectionsMd$fToJSONInspection$fShowInspectionAnalysis$fEqInspectionAnalysis$fShowInspection$fEqInspectionstyleInspectionsMapstan0301stan0302partialInspectionsMapstan0001stan0002stan0003stan0004stan0005stan0006stan0007stan0008stan0009stan0010stan0011stan0012stan0013stan0014stan0015stan0016stan0017stan0018stan0019stan0020stan0021infiniteInspectionsMapstan0101stan0102stan0103stan0104stan0105stan0106antiPatternInspectionsMapstan0201stan0202stan0203stan0204stan0205stan0206stan0207stan0208stan0209stan0210stan0211stan0212stan0213stan0214stan0215inspectionsMap inspectionsinspectionsIdslookupInspectionByIdgetInspectionById Observations Observation observationIdobservationInspectionIdobservationSrcSpanobservationFileobservationModuleNameobservationFileContent mkObservationprettyShowObservationprettyObservationSourceignoredObservationsprettyShowIgnoredObservationsmkObservationId$fToJSONObservation$fShowObservation$fEqObservationFileMapFileInfo fileInfoPathfileInfoModuleName fileInfoLocfileInfoCabalExtensionsfileInfoExtensionsfileInfoMergedExtensionsfileInfoObservationsextensionsToTextisExtensionDisabled$fToJSONFileInfo$fShowFileInfo $fEqFileInfoanalysisByInspectionAnalysisanalysisModulesNumanalysisLinesOfCodeanalysisUsedExtensionsanalysisInspectionsanalysisObservationsanalysisIgnoredObservationsanalysisFileMap runAnalysis$fToJSONAnalysis$fShowAnalysis ProjectHealth Unhealthy LowHealth MediumHealthHealthyAnalysisNumbers anModulesanLocanExts anSafeExtsanIns anFoundObs anIgnoredObsanHealthprettyShowAnalysisanalysisToNumbers prettyHealthtoProjectHealthScope ScopeFileScopeDirectoryScopeAll CheckFilterCheckInspection CheckSeverity CheckCategoryCheckAllCheck checkType checkFilter checkScope CheckTypeIncludeExclude PartialConfigConfigConfigP configChecks configRemoved configIgnored defaultConfigfinaliseConfigconfigToCliCommandmkDefaultChecks applyConfig applyChecksapplyChecksFor$fSemigroupConfigP$fShowCheckType $fEqCheckType$fEnumCheckType$fBoundedCheckType$fShowCheckFilter$fEqCheckFilter $fShowScope $fEqScope $fShowCheck $fEqCheck $fEqConfigP $fShowConfigP ConfigAction RemoveAction IncludeAction ExcludeAction IgnoreActionprettyConfigActionconfigActionClassconfigActionColourconfigToTriplesprettyConfigCli$fShowConfigAction$fEqConfigAction CliToTomlArgscliToTomlArgsFilePathcliToTomlArgsConfig TomlToCliArgstomlToCliArgsFilePathInspectionArgsinspectionArgsId ReportArgsreportArgsBrowseStanArgsstanArgsHiedirstanArgsCabalFilePathstanArgsOutputSettingsstanArgsReportstanArgsUseDefaultConfigFilestanArgsConfigFilestanArgsConfigstanArgsJsonOut StanCommandStanInspection StanTomlToCli StanCliToTomlStanInspectionsToMd runStanClistanParserPrefs stanCliParserSummarysummaryInspectionIdsummaryCategory summaryModulesummarySeverity createSummarystanHtmlgenerateReport usedTomlFiles getTomlConfig configCodecrunversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName runCommandghc-prim GHC.TypesTruefindCabalFilesfindCabalFileDirBoolFalsebaseGHC.BaseStringNonEmptyinteger-wired-inGHC.Integer.TypeInteger GHC.NaturalNatural text-1.2.4.0Data.Text.Internal maybePattern GHC.MaybeMaybe eitherPattern Data.EitherEither pairPatternFoldabletype_lazyRecordFieldNothing GHC.ClassesEqOrelude-0.7.0.0-7ceaf357749ced580975b41f886062d3302379356cd89e2cf960ee6430cadb41 Relude.Debug undefinedcompare^unordered-containers-0.2.11.0-be8dc2916d88fe0346eb65964f3199a8f8b1887ea45ba518a421980d409ff9ecData.HashMap.BaseHashMapmkPartialInspectionPatternmkPartialInspectionmkPartialInspectionListmkPartialInspectionEnummkInfiniteInspectionreversemkAntiPatternInspectionfor_forM_showSpan whenColourhashModuleName OperatorDeclOperator analyseAstanalyseBigTuplesanalyseCompareanalyseLazyFieldsanalysePatternMatch_ analyseInfixpartitionDeclscontainers-0.6.2.1Data.Map.InternalMapanalyseAstWith matchAstWith createMatchcreateMatchAstincLinesOfCodeaddInspectionsaddObservationsaddIgnoredObservations addExtensions updateFileMapGHC.IOFilePathanalyseanalyseHieFilestanstanPstanInspectionPtoggleSolutionP verbosityPidPversionP sdInspections sdCategories sdModules sdSeverity maximumOn1_AllPtomland-1.3.0.0-10dfdba74d15a0244c8b1f573f8c9d61f608c792eee689dbff6eabb98a49a40aToml.Codec.BiMapBiMap