kwc5      NoneAs an example, `vmchale/some-library` would be valid input.None 23489;DRHState monad providing context, i.e. function we've already called before.datatype for a token returning a random string$Pretoken, aka token as first read in dataype for a key aka token name0datatype for a double representing a probability@Compare inside the state monad using only the underlying objectsMake N a monoid so we can append them together nicely (since they do generate text). d(Value "Hello") <> (List [(0.5," you"), (0.5, " me")]) (List [(0.5,"Hello you"), (0.5, "Hello me")]) !"#$%&'(  !"%&'  !"#$%&'(None9; )Drop file Extension*"Get directory associated to a file+1Function to apply a value on both arguments, e.g. between .$ (char '"'),Add a PR for this? Could be useful in Megaparsec idk Allows us to use monoidal addition on parsers instance (Monoid a) => Monoid (Parser a) where mempty = pure mempty mappend x y = mappend  $ x  * y0Normalize pre-tokens/corresponding probabilities--Helper function for creating a cdf from a pdf.Show as a T.Text/Pretty-print a ParseError0Strip a pre-token's name1Read a file in as a Text )*+,-./01 )*+,-./01 )*+,-./01None:Datatype for a semantic error25Throw custom error given by string, within the parser3Throw  error within parser4-Throws error when a function is defined twice5Constant to start s6 Convert a Text to a 7 for use with a pretty-printer8*big semantics checker that sequences stuff9fTake the head of the list, or throw the appropriate error given which functions we are trying to call.:9Access argument, or throw error if the list is too short.;'checker to verify there is at most one :return or  :define key statement< Checks that we have at most one  `:return` template in the file=+Checks that there are no instances of a key>Derived via our show instance;? display a ! nicely with coloration & whatnot @2A345689B:;<=>?  @89B: @2A345689B:;<=>?None  Generate randomized text from a  getText :: IO T.Text getText = do let exampleTok = List [(1.0,List [(0.5,Value "heads"),(0.5,Value "tails")])] run exampleTok C5Helper function to compute the cdf when we have a pdf C  CNoneDDraw as a syntax TreeEFunction to transform a 7 into a `Tree String` so that it can be pretty-printed. tokToTree 1.0 tokDFEDDFENone G(A map with all the modifiers for MadlangHJumble the words in a stringIStrip file extensionJGet the :return valueK(Convert the stuff after the number to a L5Build token in tree structure, without concatenating.M2Build the token without concatenating, yielding a # suitable to be printed as a tree.N+Given keys naming the tokens, and lists of  , build our OPSort the keys that we have parsed so that dependencies are in the correct placesP.Ordering on the keys to account for dependencyGHIJKLMNOQRSTPUGHIJMNOGHIJKLMNOQRSTPU NoneV0Parse a lexeme, aka deal with whitespace nicely.W*space consumer with awareness for commentsX6parse a symbol, i.e. string plus surrouding whitespaceYParse a number/probabilityZParse an integer[-Make sure definition blocks start un-indented\0Make contents of definition blocks are indented.]Parse between quotes^Parse a keyword_ Parse a var` Parse the ` keyword.a Parse the b keyword.c Parse the c keyword.d Parse the  `:return` keyword.e&Parse a template name (what follows a  `:define` or f block)gParse a modifierhParse template into a  of referents and stringsi*Parse a probability/corresponding templatejParse a function name for a  `:category` block.k Parse an clParse a ` blockbParse a b blockm Parse the  `:return` blocknParse the program in terms of  and the s to link them. QParse text as a token + context (aka a reader monad with all the other functions)oParse text as token + contextp!Parse text as a list of functionsq@Parse text as a list of tokens, suitable for printing as a tree. Parse text given a context }import qualified Data.Text.IO as TIO getParsed = do f <- TIO.readFile "template.mad" parseTok "filename.mad" [] [] f8Parse text as a token, suitable for printing as a tree..rParse inclustions VsWXYZ[\]^_`acdeghijklbmn opq !File name to use for parse errors2Context, i.e. other random data paired with a key.1list of variables to substitute into the templateActaul text to parseResultr pq r VsWXYZ[\]^_`acdeghijklbmn opq r None:Parse a template file into the  data typet'Generate text from file with inclusions:Generate randomized text from a file containing a templateuRun in the appropriate folder-Run based on text input, with nothing linked.vGet file as contextBParse a template into a RandTok suitable to be displayed as a tree)variables to substitute into the templatefolderfilepath within folderparsed t1List of variables to substitute into the templatePath to .mad file.Resultuvttuv Nonew for an EDSL, e.g. xdemoQQ :: T.Text demoQQ = run [madlang| :define something 1.0 "hello" 1.0 "goodbye" :return 1.0 something|] nNote that this is in general much faster than running interpreted code, though inclusions do not work in the w or in spliced expressions.x Convert a y6 containing to a `Q Exp` with the parsed syntax tree.z_Turn a parse error into an error that will be caught when Template Haskell compiles at runtime.Splice for embedding a '.mad' file, e.g. >demo :: IO T.Text demo = run $(madFile "twitter-bot.mad") 7Note that the embedded code cannot have any inclusions.xzxz Safe{|}~|{|}~ None datatype for the subcommandsdatatype for the program/Parser for command-line options for the programParser for the run subcommand Parser for the sample subcommandParser for the lint subcommandMain program actionExample Usage: -$ madlang run example.mad some text generatedWraps parser with help parser7given a parsed record perform the appropriate IO action None           ! " # $%&'()*+,-.*/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd e f g h i j k l m n o p q r s tuvw x y z { | } ~   uv           &madlang-3.1.0.2-4Axl5uhJDQe5c75Pt00U1L Text.MadlibsText.Madlibs.Packaging.FetchText.Madlibs.Internal.TypesText.Madlibs.Internal.UtilsText.Madlibs.Cata.SemErrText.Madlibs.Cata.RunText.Madlibs.Cata.DisplayText.Madlibs.Ana.ParseUtilsText.Madlibs.Ana.ParseText.Madlibs.Ana.ResolveText.Madlibs.Generate.TH Paths_madlangText.Madlibs.Exec.MainContextRandTokListValueKey SemanticErrorNoReturnCircularFunctionCallsInsufficientArgsDoubleDefinition NoContextrun parseTokMparseTok parseTree parseFilerunFilerunTextmakeTreemadlangmadEmbedmadFile runMadlang fetchGithubinvalidinstallVimPlugin fetchPackages cleanPackagesPreTokProb $fEqStateT$fMonoidRandTokNameapply $fEqPreTok $fShowPreTokRandTokFListFValueFD:R:BaseRandTok dropExtensiongetDir.$ normalizecdfshow'parseErrorPretty'unTok readFile' customErrornoReturndoubleDefinition semErrStarttext'-ansi-wl-pprint-0.6.8.1-AloTw2NbGBFHl1luttZjPa%Text.PrettyPrint.ANSI.Leijen.InternalDoccheckSemanticshead'accesscheckKeysingleInstance noInstance$fExceptionSemanticError$fShowSemanticErrorParsershowCustomError headNoReturnmkCdf displayTree tokToTree cleanTree modifierListjumblestrip takeTemplate concatTokbuildTok buildTreebuildsortKeys orderKeys orderHelper hasNoDeps maybeListallDepsflattenlexeme spaceConsumersymbolfloatinteger nonIndented indentGuardquotekeywordvardefinecatcategoryincludemainnamebaseGHC.BasereturnmodifierpreStrpairfunction inclusions definitionfinalprogram parseTreeM parseTokF parseTreeFparseInclusions spaceOnlygetInclusionCtx runInFolderparseCtxtemplate-haskellLanguage.Haskell.TH.Quote QuasiQuotertextToExpressionStringerrorgencatchIOversionbindirlibdir dynlibdirdatadir libexecdir sysconfdir getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName SubcommandProgramorderstempsamplelintwrappertemplateDebugRunLintSampleGetInstall VimInstallinput_repclInputs_remotesubfetchdebug versionInfo