h$>      !"#$%&' ( ) * + , - . / 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 [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x yz{|}~             !"#$%&'()*+,,,,,,,,,,,,,,,,,,-../////////000111222222222222222222222222222333334444444444455555666666666666666777777777777777777778888889;+Shared code for individual command handlers(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone Sheadroom Bootstraps RIO application using provided environment data and flag whether to run in debug mode.headroom#function returning environment dataheadroomwhether to run in debug modeheadroomRIO application to executeheadroomexecution result Extra functionality for coercion(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNoneheadroomAllows to map the coercible value. This might be useful for example to change the value within newtype6, without manually unwrapping and wrapping the value.import qualified RIO.Text as T*newtype Foo = Foo Text deriving (Eq, Show)inner T.toUpper (Foo "hello") Foo "HELLO"headroom function to modify coerced valueheadroomvalue to modifyheadroommodified value"Extra functionality for enum types(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone RheadroomEnum data type, capable to (de)serialize itself from/to string representation. Can be automatically derived by GHC using the DeriveAnyClass extension.headroom Returns list of all enum values.(:set -XDeriveAnyClass -XTypeApplicationsdata Test = Foo | Bar deriving (Bounded, Enum, EnumExtra, Eq, Ord, Show)allValues @Test [Foo,Bar]headroomReturns all values of enum as single string, individual values separated with comma.(:set -XDeriveAnyClass -XTypeApplicationsdata Test = Foo | Bar deriving (Bounded, Enum, EnumExtra, Eq, Ord, Show)allValuesToText @Test "Foo, Bar"headroom:Returns textual representation of enum value. Opposite to .:set -XDeriveAnyClassdata Test = Foo | Bar deriving (Bounded, Enum, EnumExtra, Eq, Ord, Show)enumToText Bar"Bar"headroomReturns enum value from its textual representation. Opposite to .:set -XDeriveAnyClassdata Test = Foo | Bar deriving (Bounded, Enum, EnumExtra, Eq, Ord, Show)"(textToEnum "Foo") :: (Maybe Test)Just FooSimplified variant of Data.Has(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone:headroomImplementation of the Has type class pattern.   Custom functionality related to lens(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNoneQ headroomA template haskell function to build lenses for a record type. This function differs from the :; function in that it does not require the record fields to be prefixed with underscores and it adds an L= suffix to lens names to make it clear that they are lenses.headroomSame as ,, but build lenses only for selected fields.  ,Various functions for data (de)serialization(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNoneheadroomCustom Aeson encoding options used for generic mapping between data records and JSON or YAML values. Expects the fields in input to be without the prefix and with words formated in  symbol case (example: record field  uUserName, JSON field  user-name).headroom"Drops prefix from camel-case text.dropFieldPrefix "xxHelloWorld" "helloWorld"headroom=Transforms camel-case text into text cased with given symbol.symbolCase '-' "fooBar" "foo-bar"headroomPretty prints given data as YAML.headroomword separator symbolheadroom input textheadroomprocessed textheadroomdata to pretty printheadroompretty printed YAML output-Simple enrichment of YAML configuration stubs(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone headroom#Represents type of the field value.headroomtype of YAML arrayheadroomtype of YAML stringheadroom6Simple wrapper representing single step of enrichment.headroom$takes input text and does enrichmentheadroom Generates YAML, array field from given list and field name.headroom Generates YAML- string from given text value and field name.headroomReplaces empty value of given field with actual generated value.headroominput list used as valueheadroom field nameheadroomgenerated fields as (valueType, generatedField)headroominput text valueheadroom field nameheadroomgenerated fields as (valueType, generatedField)headroom field nameheadroomfield value generator functionheadroomresulting enrichment step  *Additional utilities for text manipulation(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone ( headroom Similar to ?, but tries to find common prefix for all lines in given text.1commonLinesPrefix "-- first\n-- second\n-- third" Just "-- "!headroom Similar to <=4, but replaces only very first occurence of pattern. replaceFirst ":" "/" "a : b : c" "a / b : c""headroom) "foo zz\nbar""T: foo zz\nT: bar"#headroom Similar to "#, but the mapping function returns , which gives some more control over outcome. After mapping over all individual lines, results are folded and concatenated, which allows for example filtering out some lines.mapLinesF (\l -> if l == "bar" then Nothing else Just l) "foo\nbar""foo"$headroomSame as  , but takes  as input instead of .read "123" :: Maybe IntJust 123%headroom Similar to ", but does not automatically adds n at the end of the text. Advantage is that when used together with &, it doesn't ocassionaly change the newlines ad the end of input text: fromLines . toLines $ "foo\nbar" "foo\nbar""fromLines . toLines $ "foo\nbar\n" "foo\nbar\n"Other examples: fromLines []""fromLines ["foo"]"foo"fromLines ["first", "second"]"first\nsecond"!fromLines ["first", "second", ""]"first\nsecond\n"&headroom Similar to , but does not drop trailing newlines from output. Advantage is that when used together with %, it doesn't ocassionaly change the newlines ad the end of input text: fromLines . toLines $ "foo\nbar" "foo\nbar""fromLines . toLines $ "foo\nbar\n" "foo\nbar\n"Other examples: toLines ""[]toLines "first\nsecond"["first","second"]toLines "first\nsecond\n"["first","second",""] headroom lines of text to find prefix forheadroomfound longest common prefixs"headroom%function to map over individual linesheadroom input textheadroomresulting text#headroom$function to map over inividual linesheadroom input textheadroomresulting text$headroominput text to parseheadroom parsed value%headroom lines to joinheadroom!text joined from individual lines&headroomtext to break into linesheadroomlines of input text !"#$%&$ !"#%& 4Custom data specific to file support implementations(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone+H'headroom%Additional template data required by Haskell file support)headroom offsets for Haddock fields*headroom+Offsets for selected fields extracted from Haddock module header.,headroom offset for  Copyright field-headroom:Additional template data extracted from the template file..headroomadditional template data for Haskell/headroom$no additional template data provided '()*+,-./ -./*+,'() Data types for Headroom.FileType(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone:. 6headroom#Supported type of source code file.7headroom support for C programming language8headroom support for C++ programming language9headroom support for CSS:headroom support for Go programming language;headroom support for Haskell programming language<headroom support for HTML=headroom support for Java programming language>headroom support for  JavaScript programming language?headroom support for  PureScript programming language@headroom support for Rust programming languageAheadroom support for Scala programming languageBheadroom support for Shell 6BA@?>=<;:987 6BA@?>=<;:987 Data types for post-processing(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone2hIheadroomDefinition of post-processor6, i.e. function, that is applied to already rendered license header4, performs some logic and returns modified text of license header. Given that the  reader monad and ? transformer is used, any configuration is provided using the env& environment. When combined with the Headroom.Data.Has; monad, it provides powerful way how to combine different post-processors and environments.Structure of post-processor Text -> Reader env Text J J J JJ rendered text of license header J J JJ environment holding possible configuration J JJ modified license header text IJIJ 0Type safe representation of analyzed source code(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone&<; Mheadroom Represents analyzed source code.Oheadroom%Type alias for analyzed line of code.Pheadroom+Represents type of the line in source code.Qheadroom Line of codeRheadroomLine of commentSheadroom Converts  into M2 using the given function to analyze each line's P. The analyzing function can hold any state that is accumulated as the text is processed, for example to hold some info about already processed lines.TheadroomConverts analyzed M back into .UheadroomFinds very first line matching given predicate and optionally performs some operation over it.VheadroomFinds very last line matching given predicate and optionally performs some operation over it.Wheadroom3Strips empty lines at the beginning of source code.?stripStart $ SourceCode [(Code, ""), (Code, "foo"), (Code, "")]#SourceCode [(Code,"foo"),(Code,"")]Xheadroom-Strips empty lines at the end of source code.=stripEnd $ SourceCode [(Code, ""), (Code, "foo"), (Code, "")]#SourceCode [(Code,""),(Code,"foo")]YheadroomCuts snippet from the source code using the given start and end position.cut 1 3 $ SourceCode [(Code, "1"), (Code, "2"),(Code, "3"),(Code, "4")]"SourceCode [(Code,"2"),(Code,"3")]Sheadroom#initial state of analyzing functionheadroom/function that analyzes currently processed lineheadroomraw source code to analyzeheadroom analyzed MTheadroom)source code to convert back to plain textheadroomresulting plain textUheadroom"predicate (and transform) functionheadroomsource code to search inheadroomfirst matching line (if found)Vheadroom"predicate (and transform) functionheadroomsource code to search inheadroomlast matching line (if found)Wheadroomsource code to stripheadroomstripped source codeXheadroomsource code to stripheadroomstripped source codeYheadroom3index of first line to be included into the snippetheadroom)index of the first line after the snippetheadroomsource code to cutheadroom cut snippet MNOPRQSTUVWXY PRQOMNSTUVWXY Application data types(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone:? `headroom&Supported type of open source license.aheadroom support for  Apache-2.0 licensebheadroom support for  BSD-3-Clause licensecheadroom support for GNU GPL2 licensedheadroom support for GNU GPL3 licenseeheadroom support for MIT licensefheadroom support for MPL2 licensegheadroom Wraps the value of current year.iheadroomvalue of current yearjheadroomTop-level of the Headroom exception hierarchy.lheadroomWraps given exception into j.mheadroomUnwraps given exception from j.lheadroomexception to wrapheadroomwrapped exceptionmheadroomexception to unwrapheadroomunwrapped exception`abcdefghijklmjkmlghi`abcdefNetwork related IO operations(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNoneByheadroomPolymorphic record of functions performing network IO operations.{headroomdownloads remote content|headroom;Type of a function that returns content of remote resource.}headroomConstructs new y that performs real network IO operations.~headroom(Downloads content of remote resource as . Note that only http and https is supported at this moment.|headroomURI of remote resourceheadroomdownloaded content~headroomURI of remote resourceheadroomdownloaded contentyz{|}~|yz{}~(Helper functions for regular expressions(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone J headroomException specific to the Headroom.Data.Regex module.headroom"given input cannot be compiled as regexheadroomRepresents compiled regex), encapsulates the actual implementation.headroomCompiles given regex in runtime. If possible, prefer the  quasi quotation version that does the same at  compile time.headroomSame as , but works with  and uses no additional options.headroomSame as , but instead of returning matched text it only indicates whether the given text matches the pattern or not.headroomA QuasiQuoter for regular expressions that does a compile time check.headroom!Replaces all occurences of given regex.headroom'Replaces only first occurence of given regex.headroom.Searches the text for all occurences of given regex.headroomCompiles the given text into regex in runtime. Note that if the regex cannot be compiled, it will throw runtime error. Do not use this function unless you know what you're doing.headroomregex to compileheadroomcompiled regexheadroom3a PCRE regular expression value produced by compileheadroom!the subject text to match againstheadroomthe result valueheadroom3a PCRE regular expression value produced by compileheadroom!the subject text to match againstheadroomthe result valueheadroompattern to replaceheadroomreplacement function (as fullMatch -> [groups] -> result)headroomtext to replace inheadroomresulting textheadroompattern to replaceheadroomreplacement function (as fullMatch -> [groups] -> result)headroomtext to replace inheadroomresulting textheadroomregex to search forheadroom input textheadroomfound occurences (as [(fullMatch, [groups])])headroomregex to compileheadroom compiled regex or runtime exception  ,Representation of reference to template file(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone  #$&?P3headroom%Error related to template references.headroom$not a valid format for template nameheadroomURI protocol not supportedheadroom9Reference to the template (e.g. local file, URI address).headroom"template path on local file systemheadroomremote template URI adressheadroom Creates a  from given text. If the raw text appears to be valid URL with either http or https" as protocol, it considers it as , otherwise it creates .>mkTemplateRef "/path/to/haskell.mustache" :: Maybe TemplateRef3Just (LocalTemplateRef "/path/to/haskell.mustache")mkTemplateRef "https://foo.bar/haskell.mustache" :: Maybe TemplateRefJust (UriTemplateRef (URI {uriScheme = Just "https", uriAuthority = Right (Authority {authUserInfo = Nothing, authHost = "foo.bar", authPort = Nothing}), uriPath = Just (False,"haskell.mustache" :| []), uriQuery = [], uriFragment = Nothing}))headroomRenders given  into human-friendly text.headroom input textheadroomcreated  (or error)headroom to renderheadroom rendered text  Post-processor! for updating years in copyrights(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone ?Theadroom#Mode that changes behaviour of the  function.headroom+updates years in copyrights for all authorsheadroom5updates years in copyrights only for selected authorsheadroomNon-empty list of authors for which to update years in their copyrights.headroomPost-processor that updates years and year ranges in any present copyright statements.Reader Environment Parameters gvalue of the current year,mode specifying the behaviour of the updaterheadroom-Updates years and years ranges in given text.3updateYears (CurrentYear 2020) "Copyright (c) 2020""Copyright (c) 2020"3updateYears (CurrentYear 2020) "Copyright (c) 2019""Copyright (c) 2019-2020"8updateYears (CurrentYear 2020) "Copyright (c) 2018-2020""Copyright (c) 2018-2020"8updateYears (CurrentYear 2020) "Copyright (c) 2018-2019""Copyright (c) 2018-2020"headroom current yearheadroomtext to updateheadroomtext with updated years/Type safe representation of Haskell PVP version(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone YI headroomType safe representation of PVP version.headroomfirst major versionheadroomsecond major versionheadroom minor versionheadroompatch level versionheadroomParses  from given text.parseVersion "0.3.2.0"Just (Version {vMajor1 = 0, vMajor2 = 3, vMinor = 2, vPatch = 0})headroomPrints  in major1.major2.minor.patch format.printVersion (Version 0 3 2 0) "0.3.2.0"headroom Similar to , but adds the v( prefix in front of the version number.printVersionP (Version 0 3 2 0) "v0.3.2.0"headroomQuasiQuoter for defining  values checked at compile time.[pvp|1.2.3.4|]:Version {vMajor1 = 1, vMajor2 = 2, vMinor = 3, vPatch = 4}headroom input text to parse version fromheadroomparsed headroom to printheadroomtextual representation  $UI component for displaying progress(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone[5headroomProgress indication. First argument is current progress, second the maximum value.headroom'Zips given list with the progress info.zipWithProgress ["a", "b"]'[(Progress 1 2,"a"),(Progress 2 2,"b")]headroomlist to zip with progressheadroom zipped result> UI Components(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone["UI components for rendering tables(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone\headroom"Represents two columns wide table.Data types for Headroom.Variables(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone]headroomMap of static and dynamic variables. Use ?> function for more convenient construction of this data type.Extensible templating support(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone b headroom!Error during processing template.headroommissing variable valuesheadroomerror parsing raw template textheadroom Type class& representing supported template file.headroomReturns list of supported file extensions for this template type.headroom$Parses template from given raw text.headroomRenders parsed template and replaces all variables with actual values.headroomReturns the raw text of the template, same that has been parsed by  method.headroomReturns a reference to template source, from which this template was loaded.headroom(Returns empty template of selected type.headroom!list of supported file extensionsheadroomreference to template sourceheadroomraw template textheadroomparsed templateheadroomvalues of variables to replaceheadroomparsed template to renderheadroomrendered template textheadroom.template for which to return raw template textheadroomraw template textheadroom&template for which to return referenceheadroomtemplate reference  Support for template variables(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone hlheadroomConstructor function for  data type. mkVariables [("key1", "value1")](Variables (fromList [("key1","value1")])headroomDynamic variables& that are common for all parsed files. _current_year - current yearheadroom#Parses variables from raw input in  key=value format.parseVariables ["key1=value1"](Variables (fromList [("key1","value1")])headroomCompiles variable values that are itself mini-templates, where their variables will be substituted by other variable values (if possible). Note that recursive variable reference and/or cyclic references are not supported.:set -XTypeApplications,import Headroom.Template.Mustache (Mustache)let compiled = compileVariables @Mustache $ mkVariables [("name", "John"), ("msg", "Hello, {{ name }}")]let expected = mkVariables [("name", "John"), ("msg", "Hello, John")]compiled == Just expectedTrueheadroom pairs of  key-valueheadroomconstructed variablesheadroom current yearheadroommap of dynamic variablesheadroomlist of raw variablesheadroomparsed variablesheadroominput variables to compileheadroomcompiled variablesImplementation of Mustache template support(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone iheadroomThe Mustache template.headroom Support for Mustache templates.@ Safe-Inferredi)Application metadata (name, vendor, etc.)(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone m' headroom5Type of the template format used for license headers.headroom%Application version, as specified in headroom.cabal file.headroomList of versions that made breaking changes into YAML configuration and require some migration steps to be performed by end-user.headroom$Name of the YAML configuration file.headroomFull product description.headroom Product info.headroom Product name.headroom0Product documentation website for given version.headroom8Link to configuration documentation for current version.headroom*Product migration guide for given version.headroomProduct source code repository.  Data types for Headroom configuration(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone #$/28:<=>?rheadroomException specific to the Headroom.Configuration module.headroom>some of the required configuration keys has not been specifiedheadroomillegal configuration for headroom+Represents single key in the configuration.headroomno configuration for file-extensionsheadroom"no configuration for header syntaxheadroomno configuration for margin between header top and preceding codeheadroomno configuration for margin between header top and start of fileheadroomno configuration for margin between header bottom and following codeheadroomno configuration for margin between header bottom and end of fileheadroomno configuration for  put-afterheadroomno configuration for  put-beforeheadroomno configuration for run-modeheadroomno configuration for  source-pathsheadroomno configuration for excluded-pathsheadroomno configuration for exclude-ignored-pathsheadroom'no configuration for built in templatesheadroomno configuration for  variablesheadroomno configuration for enabledheadroomAlias for partial variant of .headroomAlias for complete variant of .headroom Group of ) configurations for supported file types.headroomconfiguration for C programming languageheadroomconfiguration for C++ programming languageheadroomconfiguration for CSSheadroomconfiguration for Goheadroomconfiguration for Haskell programming languageheadroomconfiguration for HTMLheadroomconfiguration for Java programming languageheadroomconfiguration for  JavaScript programming languageheadroomconfiguration for  PureScript programming languageheadroomconfiguration for Rust programming languageheadroomconfiguration for Scala programming languageheadroomconfiguration for ShellheadroomAlias for partial variant of .headroomAlias for complete variant of .headroom*Configuration for specific license header.headroom%list of file extensions (without dot)headroom9margin between header top and preceding code (if present)headroommargin between header top and start of file (if no code is between)headroomData type representing state of given configuration data type.headroompartial configuration, could be combined with another or validated to produce the complete configurationheadroomcomplete configuration, result of combining and validation of partial configuration`abcdef`abcdef Support for post-processors(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone #$/>?Eheadroom'Environemnt data type for the composed post-processor ().headroom current yearheadroomconfiguration of post-processorheadroommode used by the  post-processorheadroom Runs the post-processing function using the given  environment and text of rendered license header as input.headroomComposition of various post-processors!, which environment is based on YAML configuration and which can be enabled/disabled to fit end user's needs.headroomTakes already rendered license header7 and post-process it based on the given configuration.headroomConstructor function for ! data type. This function takes  as argument, because it performs template compilation on selected fields of .headroompost-processor to runheadroomenvironment valueheadroomtext of rendered license headerheadroomprocessed text of license headerheadroomconfiguration of post-processorsheadroom composed post-processorheadroom6configuration used to define post-processing behaviourheadroomrendered text of license headerheadroompost-processed text of license headerheadroom current yearheadroomtemplate variablesheadroomconfiguration for post-processorsheadroomenvironment data type  Data types for Headroom.Header(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone headroom/Represents info about concrete header template.headroomheader configurationheadroomextra template data extracted by the correcponding file type supportheadroom%type of the file this template is forheadroomparsed templateheadroom1Info extracted about the source code file header.headroomtype of the fileheadroom configuration for license headerheadroom#position of existing license headerheadroomadditional extracted variables  $Logic for sanitizing license headers(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone headroom2Tries to find comment prefix in given comment. By prefix it's meant either the line prefix used for block comment syntax (like *> at start of each line between opening and closing pattern - * *) or line comment syntax (just the syntax for comment itself - like // or --:). If such prefix is found, it's then added to the input .:set -XQuasiQuotesimport Headroom.Data.Regex (re)findPrefix (BlockComment [re|^\/\*|] [re|\*\/$|] Nothing) "/*\n * foo\n * bar\n */",BlockComment "^\\/\\*" "\\*\\/$" (Just " *")headroomSanitizes given header text to make sure that each comment line starts with appropriate prefix (if defined within given ). For block comments, this is to make it visually unified, but for line comments it's necessary in order not to break syntax of target source code file.:set -XQuasiQuotesimport Headroom.Data.Regex (re)sanitizeSyntax (LineComment [re|^--|] (Just "--")) "-- foo\nbar""-- foo\n-- bar"headroom&Strips comment syntax from given text.:set -XQuasiQuotesimport Headroom.Data.Regex (re)stripCommentSyntax (LineComment [re|^--|] (Just "--")) "-- a\n-- b""a\n b"headroom&describes comment syntax of the headerheadroomtext containint the commentheadroominput  with added prefix (if found)headroom0header syntax definition that may contain prefixheadroomheader to sanitizeheadroomsanitized headerheadroomcopyright header syntaxheadroom)input text from which to strip the syntaxheadroomprocessed text&Logic for handlig supported file types(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone#$headroomReturns 6 for given file extension (without dot), using configured values from the .headroom/Lists all recognized file extensions for given 6$, using configured values from the .headroomReturns the proper  for the given 6, selected from the .headroomlicense headers configurationheadroomfile extension (without dot)headroomfound 6headroomlicense headers configurationheadroom6 for which to list extensionsheadroom#list of appropriate file extensionsheadroomlicense headers configurationheadroom selected 6headroom appropriate !File system related IO operations(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone&XheadroomPolymorphic record composed of file system IO function types, allowing to abstract over concrete implementation. Whenever you need to use effectful functions from this module, consider using this record instead of using them directly, as it allows you to use different records for production code and for testing, which is not as easy if you wire some of the provided functions directly.headroomoffset (in number of black chars) for 2nd and subsequent linesheadroominput text to indentheadroomprocessed text  - Support for Haskell source code files(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone #$^headroomImplementation of  for Haskell..3Support for handling various source code file types(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone#$&!headroomReturns  for corresponding 6.headroom:Analyzes the raw source code of given type using provided .headroom! implementation used for analysisheadroomraw source code to analyzeheadroomanalyzed source code/)Operations with copyright/license headers(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone  #$?ҷ headroomExtracts info about the processed file to be later used by the header detection/manipulation functions.headroomConstructs new  from provided data.headroom/Adds given header at position specified by the 6. Does nothing if any header is already present, use  if you need to override it.headroom*Drops header at position specified by the  from the given source code. Does nothing if no header is present.headroom6Replaces existing header at position specified by the ( in the given text. Basically combines  with . If no header is present, then the given one is added to the text.headroomFinds header position in given text, where position is represented by line number of first and last line of the header (numbered from zero). Based on the  specified in given ., this function delegates its work to either  or .4:set -XFlexibleContexts -XTypeFamilies -XQuasiQuotesimport Headroom.Data.Regex (re)let hc = HeaderConfig ["hs"] 0 0 0 0 [] [] (BlockComment [re|^{-|] [re|(? syntax, which is delimited with starting and ending pattern.:set -XQuasiQuotesimport Headroom.Data.Regex (re)let sc = SourceCode [(Code, ""), (Comment, "{- HEADER -}"), (Code, ""), (Code,"")].findBlockHeader [re|^{-|] [re|(?"), (Code, "RESULT"), (Code, "<-"), (Code, "foo")]1splitSource [[re|->|]] [[re|<-|]] $ SourceCode ls(SourceCode [(Code,"text"),(Code,"->")],SourceCode [(Code,"RESULT")],SourceCode [(Code,"<-"),(Code,"foo")])let ls = [(Code, "text"), (Code, "->"), (Code, "RESULT"), (Code, "<-"), (Code, "foo")])splitSource [] [[re|<-|]] $ SourceCode ls(SourceCode [],SourceCode [(Code,"text"),(Code,"->"),(Code,"RESULT")],SourceCode [(Code,"<-"),(Code,"foo")]);splitSource [] [] $ SourceCode [(Code,"foo"), (Code,"bar")](SourceCode [],SourceCode [(Code,"foo"),(Code,"bar")],SourceCode [])headroom template infoheadroomtext used for detectionheadroomresulting file infoheadroom!configuration for license headersheadroom.type of source code files this template is forheadroomparsed templateheadroomresulting template infoheadroom additional info about the headerheadroomtext of the new headerheadroom#source code where to add the headerheadroom'resulting source code with added headerheadroom additional info about the headerheadroom.text of the file from which to drop the headerheadroom"resulting text with dropped headerheadroom additional info about the headerheadroomtext of the new headerheadroom,text of the file where to replace the headerheadroom#resulting text with replaced headerheadroom appropriate header configurationheadroom"text in which to detect the headerheadroomheader position (startLine, endLine)headroomstarting pattern (e.g. {- or /*)headroomending pattern (e.g. -} or */)headroom)source code in which to detect the headerheadroom/line number offset (adds to resulting position)headroomheader position &(startLine + offset, endLine + offset)headroomprefix pattern (e.g. -- or //)headroom)source code in which to detect the headerheadroom/line number offset (adds to resulting position)headroomheader position &(startLine + offset, endLine + offset)  0Template Haskell functions for Headroom.Embedded(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNoneheadroom.Embeds stub configuration file to source code.headroom1Embeds default configuration file to source code.headroomEmbeds  template file to the source code.headroom type of the licenseheadroomtype of the source code fileheadroomcontent of the appropriate template file1Embedded files(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNoneֲheadroomContent of dummy YAML( configuration file for the application.headroomDefault YAML configuration.headroom#License template for given license.headroom(license for which to return the templateheadroom(license for which to return the templateheadroom template text2Data types for Headroom.Command(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNoneFheadroomOptions for the run command.headroomused Run command modeheadroomsource code file pathsheadroomsource paths to excludeheadroom whether to exclude ignored pathsheadroom!whether to use built-in templatesheadroomtemplate referencesheadroom raw variablesheadroomwhether to run in debug modeheadroomwhether to perform dry runheadroomOptions for the init command.headroompaths to source code filesheadroom license typeheadroomOptions for the gen command.headroom selected modeheadroomApplication command.headroomrun commandheadroomgen commandheadroominit command3Custom readers for optparse-applicative library(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone ܏headroomReader for tuple of ` and 6.headroom Reader for `.headroom Reader for .headroom Reader for .headroomParses ` and 6& from the input string, formatted as licenseType:fileType.parseLicense "bsd3:haskell"Just (BSD3,Haskell)4+Compatibility checks for YAML configuration(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone #$headroomException specific to the Headroom.Configuration.Compat module.headroom7cannot parse version info from given YAML configurationheadroom-configuration has newer version than Headroomheadroom*given YAML configuration is not compatibleheadroomChecks whether the given not yet parsed YAML configuration is compatible, using list of versions that caused breaking changes into configuration.headroom7list of versions with breaking changes in configurationheadroomcurrent Headroom versionheadroom&raw, not yet parsed YAML configurationheadroom$detected compatible version or error55Configuration handling (loading, parsing, validating)(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone #$/]headroom6Loads and parses application configuration from given YAML file.headroom9Parses application configuration from given raw input in YAML format.headroom Makes full  from provided  (if valid).headroom Makes full  from provided  (if valid).headroom Makes full  from provided  (if valid).headroomraw input to parseheadroom parsed application configurationheadroomsource headroomfull headroomsource headroomfull headroom4determines for which file type this configuration isheadroomsource headroomfull 6Handler for the run command.(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone #$&>?headroom Handler for Run command.headroomLoads templates using given template references. If multiple sources define template for the same 60, then the preferred one (based on ordering of  is selected).headroomTakes path to the template file and returns detected type of the template.headroom%Performs post-processing on rendered license header, based on given configuration. Currently the main points are to: ,sanitize possibly corrupted comment syntax ()apply post-processors ()headroomRun command optionsheadroomexecution resultheadroomtemplate referencesheadroommap of templatesheadroompath to the template fileheadroomdetected template typeheadroom%syntax of the license header commentsheadroomtemplate variablesheadroomlicense header to post-processheadroompost-processed license header7Handler for the init command(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone #$>?cheadroom*Paths to various locations of file system.headroomRIO Environment for the init command.headroom Handler for init command.headroomRecursively scans provided source paths for known file types for which templates can be generated.headroom6Checks whether application config file already exists.headroominit command optionsheadroomexecution result  8Handler for the gen command.(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone ^headroomParses ( from combination of options from given .headroom Handler for  Generator command.headroom command from which to parse the headroomparsed headroom Generator command optionsheadroomexecution result9*Support for parsing command line arguments(c) 2019-2021 Vaclav Svejcar BSD-3-Clausevaclav.svejcar@gmail.com experimentalPOSIXNone 6headroomParses command line arguments.ABCDEFGHIJKLMNOPQRSTUVWXYYZ[\]^_`abcdefgh i i j k k l m n o p q r s t u v w x y z { | } ~                                                          =c?             !"#$%&'()*+,,,,,,,,,,,,,,,,,,-../////////000111222222222222222222222222222333334444444444455555666666666666666777777777777777777778888889X@@@@@@@@AA'headroom-0.4.2.0-9Ww0GjAa3s7G0conE0NpLCHeadroom.Data.CoerceHeadroom.Command.UtilsHeadroom.Data.EnumExtraHeadroom.Data.HasHeadroom.Data.LensHeadroom.Data.SerializationHeadroom.Configuration.EnrichHeadroom.Data.Text!Headroom.FileSupport.TemplateDataHeadroom.FileType.TypesHeadroom.PostProcess.TypesHeadroom.SourceCodeHeadroom.TypesHeadroom.IO.NetworkHeadroom.Data.RegexHeadroom.Template.TemplateRef$Headroom.PostProcess.UpdateCopyrightHeadroom.Meta.VersionHeadroom.UI.ProgressHeadroom.UI.TableHeadroom.Variables.TypesHeadroom.TemplateHeadroom.VariablesHeadroom.Template.Mustache Headroom.MetaHeadroom.Configuration.TypesHeadroom.PostProcessHeadroom.Header.TypesHeadroom.Header.SanitizeHeadroom.FileTypeHeadroom.IO.FileSystemHeadroom.FileSupport.TypesHeadroom.FileSupport.ShellHeadroom.FileSupport.ScalaHeadroom.FileSupport.RustHeadroom.FileSupport.PureScriptHeadroom.FileSupport.JavaHeadroom.FileSupport.JSHeadroom.FileSupport.HTMLHeadroom.FileSupport.GoHeadroom.FileSupport.CSSHeadroom.FileSupport.CPPHeadroom.FileSupport.C$Headroom.FileSupport.Haskell.HaddockHeadroom.FileSupport.HaskellHeadroom.FileSupportHeadroom.HeaderHeadroom.Embedded.THHeadroom.EmbeddedHeadroom.Command.TypesHeadroom.Command.ReadersHeadroom.Configuration.CompatHeadroom.ConfigurationHeadroom.Command.RunHeadroom.Command.InitHeadroom.Command.GenHeadroom.Command Control.Lens makeLensesTreplace Headroom.UI mkVariablesPaths_headroomghc-primGHC.Primcoerce bootstrapinner EnumExtra allValuesallValuesToText enumToText textToEnumHasgettermodifierhasLensviewL suffixLensessuffixLensesFor aesonOptionsdropFieldPrefix symbolCaseprettyPrintYAML ValueTypeArrayStringEnrichenrich withArraywithTextreplaceEmptyValue$fMonoidEnrich$fSemigroupEnrich $fEqValueType$fShowValueTypecommonLinesPrefix replaceFirstmapLines mapLinesFread fromLinestoLinesHaskellTemplateData'htdHaddockOffsetsHaddockOffsets hoCopyright TemplateDataHaskellTemplateDataNoTemplateData$fEqTemplateData$fShowTemplateData$fEqHaskellTemplateData'$fShowHaskellTemplateData'$fEqHaddockOffsets$fShowHaddockOffsetsFileTypeCCPPCSSGoHaskellHTMLJavaJS PureScriptRustScalaShell$fBoundedFileType$fEnumFileType$fEnumExtraFileType $fEqFileType $fOrdFileType$fShowFileType PostProcess$fMonoidPostProcess$fSemigroupPostProcess SourceCodeCodeLineLineTypeCodeCommentfromTexttoText firstMatching lastMatching stripStartstripEndcut$fEqSourceCode$fShowSourceCode$fSemigroupSourceCode$fMonoidSourceCode $fEqLineType$fShowLineType LicenseTypeApache2BSD3GPL2GPL3MITMPL2 CurrentYear unCurrentYear HeadroomErrortoHeadroomErrorfromHeadroomError$fExceptionHeadroomError$fShowHeadroomError$fFromJSONLicenseType$fBoundedLicenseType$fEnumLicenseType$fEnumExtraLicenseType$fEqLicenseType$fOrdLicenseType$fShowLicenseType$fEqCurrentYear$fShowCurrentYearNetworknDownloadContentDownloadContentFn mkNetworkdownloadContent$fExceptionNetworkError$fEqNetworkError$fShowNetworkError RegexErrorCompilationFailedRegexcompilematchisMatchrescan compileUnsafe$fFromJSONRegex $fShowRegex $fEqRegex$fExceptionRegexError$fShowRegexErrorTemplateRefErrorUnrecognizedTemplateNameUnsupportedUriProtocol TemplateRef InlineRefLocalTemplateRefUriTemplateRef BuiltInRef mkTemplateRef renderRef$fFromJSONTemplateRef$fExceptionTemplateRefError$fEqTemplateRefError$fShowTemplateRefError$fEqTemplateRef$fOrdTemplateRef$fShowTemplateRefUpdateCopyrightModeUpdateAllAuthorsUpdateSelectedAuthorsSelectedAuthorsupdateCopyright updateYears$fEqUpdateCopyrightMode$fShowUpdateCopyrightMode$fEqSelectedAuthors$fShowSelectedAuthorsVersionvMajor1vMajor2vMinorvPatch parseVersion printVersion printVersionPpvp$fFromJSONVersion $fOrdVersion $fEqVersion $fShowVersionProgresszipWithProgress$fDisplayProgress $fEqProgress$fShowProgressTable2$fDisplayTable2 $fEqTable2 $fShowTable2 Variables$fMonoidVariables$fSemigroupVariables $fEqVariables$fShowVariables TemplateErrorMissingVariables ParseErrorTemplatetemplateExtensions parseTemplaterenderTemplate rawTemplate templateRef emptyTemplate$fExceptionTemplateError$fEqTemplateError$fShowTemplateErrordynamicVariablesparseVariablescompileVariables$fExceptionVariablesError$fEqVariablesError$fShowVariablesErrorMustachemCompiledTemplate mRawTemplate mTemplateRef$fTemplateMustache $fEqMustache$fShowMustache TemplateType buildVersionconfigBreakingChangesconfigFileName productDesc productInfo productNamewebDocwebDocConfigCurrwebDocMigrationwebRepoConfigurationErrorMissingConfigurationMixedHeaderSyntaxConfigurationKeyCkFileExtensionsCkHeaderSyntaxCkMarginTopCodeCkMarginTopFileCkMarginBottomCodeCkMarginBottomFile CkPutAfter CkPutBefore CkRunMode CkSourcePathsCkExcludedPathsCkExcludeIgnoredPathsCkBuiltInTemplates CkVariables CkEnabledPtHeadersConfigCtHeadersConfig HeadersConfighscChscCpphscCsshscGo hscHaskellhscHtmlhscJavahscJs hscPureScripthscRusthscScalahscShellPtHeaderConfigCtHeaderConfig HeaderConfighcFileExtensionshcMarginTopCodehcMarginTopFilehcMarginBottomCodehcMarginBottomFile hcPutAfter hcPutBeforehcHeaderSyntaxPtConfigurationCtConfiguration ConfigurationcRunMode cSourcePathscExcludedPathscExcludeIgnoredPathscBuiltInTemplates cTemplateRefs cVariablescLicenseHeaderscPostProcessConfigsPtPostProcessConfigsCtPostProcessConfigsPostProcessConfigsppcsUpdateCopyrightPtPostProcessConfigCtPostProcessConfigPostProcessConfig ppcEnabled ppcConfigPtUpdateCopyrightConfigCtUpdateCopyrightConfigUpdateCopyrightConfiguccSelectedAuthorsGenMode GenConfigFile GenLicenseRunModeAddCheckDropReplace HeaderSyntax BlockComment LineComment:::PhasePartialComplete$fFromJSONBlockComment'$fFromJSONLineComment'$fFromJSONRunMode$fFromJSONUpdateCopyrightConfig$fFromJSONPostProcessConfig$fFromJSONPostProcessConfigs$fFromJSONConfiguration$fFromJSONHeadersConfig$fExceptionConfigurationError$fFromJSONHeaderConfig$fEqConfigurationError$fShowConfigurationError$fEqConfigurationKey$fShowConfigurationKey $fEqGenMode $fShowGenMode $fEqRunMode $fShowRunMode$fEqLineComment'$fGenericLineComment'$fShowLineComment'$fEqBlockComment'$fGenericBlockComment'$fShowBlockComment'$fEqHeaderSyntax$fShowHeaderSyntax$fMonoidHeadersConfig$fSemigroupHeadersConfig$fGenericHeadersConfig$fShowHeadersConfig$fShowHeadersConfig0$fEqHeadersConfig$fEqHeadersConfig0$fMonoidHeaderConfig$fSemigroupHeaderConfig$fGenericHeaderConfig$fShowHeaderConfig$fShowHeaderConfig0$fEqHeaderConfig$fEqHeaderConfig0$fMonoidConfiguration$fSemigroupConfiguration$fGenericConfiguration$fShowConfiguration$fShowConfiguration0$fEqConfiguration$fEqConfiguration0$fMonoidPostProcessConfigs$fSemigroupPostProcessConfigs$fGenericPostProcessConfigs$fShowPostProcessConfigs$fShowPostProcessConfigs0$fEqPostProcessConfigs$fEqPostProcessConfigs0$fMonoidPostProcessConfig$fSemigroupPostProcessConfig$fGenericPostProcessConfig$fShowPostProcessConfig$fShowPostProcessConfig0$fEqPostProcessConfig$fEqPostProcessConfig0$fMonoidUpdateCopyrightConfig $fSemigroupUpdateCopyrightConfig$fGenericUpdateCopyrightConfig$fShowUpdateCopyrightConfig$fShowUpdateCopyrightConfig0$fEqUpdateCopyrightConfig$fEqUpdateCopyrightConfig0 ConfiguredEnv ceCurrentYearcePostProcessConfigsceUpdateCopyrightMode postProcessconfiguredPostProcesspostProcessHeader$fEqConfiguredEnv$fShowConfiguredEnvmkConfiguredEnv%$fHasUpdateCopyrightModeConfiguredEnv$fHasCurrentYearConfiguredEnvHeaderTemplatehtConfightTemplateData htFileType htTemplate HeaderInfo hiFileTypehiHeaderConfig hiHeaderPos hiVariables$fEqHeaderTemplate$fShowHeaderTemplate$fEqHeaderInfo$fShowHeaderInfo findPrefixsanitizeSyntaxstripCommentSyntax fileTypeByExtlistExtensionsconfigByFileType FileSystemfsCreateDirectoryfsDoesFileExist fsFindFilesfsFindFilesByExtsfsFindFilesByTypesfsGetCurrentDirectory fsListFiles fsLoadFile LoadFileFn ListFilesFnGetCurrentDirectoryFnFindFilesByTypesFnFindFilesByExtsFn FindFilesFnDoesFileExistFnCreateDirectoryFn mkFileSystem findFilesfindFilesByExtsfindFilesByTypes listFiles fileExtensionloadFile excludePathsExtractVariablesFnExtractTemplateDataFnSyntaxAnalysissaIsCommentStartsaIsCommentEnd FileSupportfsSyntaxAnalysisfsExtractTemplateDatafsExtractVariables fsFileTypedefaultFileSupport fileSupportHaddockModuleHeader hmhCopyright hmhLicense hmhMaintainerhmhPortability hmhStability hmhShortDesc hmhLongDescextractOffsetsextractModuleHeader indentField$fAlternativeP$fMonadP$fApplicativeP $fFunctorP$fEqHaddockModuleHeader$fShowHaddockModuleHeaderanalyzeSourceCodeextractHeaderInfoextractHeaderTemplate addHeader dropHeader replaceHeader findHeaderfindBlockHeaderfindLineHeader splitSourceembedConfigFileembedDefaultConfig embedTemplateconfigFileStub defaultConfiglicenseTemplateCommandRunOptions croRunModecroSourcePathscroExcludedPathscroExcludeIgnoredPathscroBuiltInTemplatescroTemplateRefs croVariablescroDebug croDryRunCommandInitOptionscioSourcePathscioLicenseTypeCommandGenOptions cgoGenModeCommandRunGenInit$fEqCommandRunOptions$fShowCommandRunOptions$fShowCommandInitOptions$fShowCommandGenOptions $fShowCommand licenseReaderlicenseTypeReader regexReadertemplateRefReader parseLicense VersionErrorCannotParseVersionNewerVersionDetectedUnsupportedVersioncheckCompatibility$fFromJSONVersionObj$fExceptionVersionError$fEqVersionError$fShowVersionError$fEqVersionObj$fShowVersionObjloadConfigurationparseConfigurationmakeConfigurationmakeHeadersConfigmakeHeaderConfig commandRunloadTemplateRefstypeOfTemplatepostProcessHeader'$fHasFileSystemEnv$fHasNetworkEnv$fHasCurrentYearEnv$fHasCommandRunOptionsEnv $fHasCommandRunOptionsStartupEnv$fHasLogFuncEnv$fHasLogFuncStartupEnv$fHasStartupEnvEnv$fHasStartupEnvStartupEnv$fHasPostProcessConfigsEnv$fHasConfigurationEnvPaths pConfigFile pTemplatesDirEnv envLogFunc envFileSystemenvInitOptionsenvPaths commandInitfindSupportedFileTypesdoesAppConfigExist $fHasPathsEnv$fHasCommandInitOptionsEnv$fExceptionCommandInitError$fEqCommandInitError$fShowCommandInitError parseGenMode commandGen$fExceptionCommandGenError$fEqCommandGenError$fShowCommandGenError commandParser text-1.2.3.2 Data.TextcommonPrefixesbase Data.FoldableFoldable Text.Read readMaybeData.Text.InternalTextGHC.Baseunlineslinestransformers-0.5.6.2Control.Monad.Trans.ReaderReaderT)pcre-light-0.4.1.0-L5m9lsUJcz2BIYVXW3iRuGText.Regex.PCRE.Light.Char8version getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName GHC.TypesTrueFalse