iKad      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 ParseError+Strip a pre-token's name,Read a file in as a Text $%&'()*+, $%&'()*+, $%&'()*+,None-./-./-./None:Datatype for a semantic error05Throw custom error given by string, within the parser1Throw  error within parser2-Throws error when a function is defined twice3Constant to start s4 Convert a Text to a 5 for use with a pretty-printer6*big semantics checker that sequences stuff7fTake the head of the list, or throw the appropriate error given which functions we are trying to call.89Access argument, or throw error if the list is too short.9'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 >0?123467@89:;<=  >67@8 >0?123467@89:;<=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 A5Helper function to compute the cdf when we have a pdf A  ANoneBDraw as a syntax TreeCFunction to transform a 7 into a `Tree String` so that it can be pretty-printed. tokToTree 1.0 tokBDCBBDCNone E(A map with all the modifiers for MadlangFJumble the words in a stringGStrip file extensionHGet the :return valueI(Convert the stuff after the number to a J5Build token in tree structure, without concatenating.K2Build the token without concatenating, yielding a # suitable to be printed as a tree.L+Given keys naming the tokens, and lists of  , build our MPSort the keys that we have parsed so that dependencies are in the correct placesN.Ordering on the keys to account for dependencyEFGHIJKLMOPQRNSEFGHKLMEFGHIJKLMOPQRNS NoneT0Parse a lexeme, aka deal with whitespace nicely.U*space consumer with awareness for commentsV6parse a symbol, i.e. string plus surrouding whitespaceWParse a number/probabilityXParse an integerY-Make sure definition blocks start un-indentedZ0Make contents of definition blocks are indented.[Parse between quotes\Parse a keyword] Parse a var^ Parse the ^ keyword._ Parse the ` keyword.a Parse the a keyword.b Parse the  `:return` keyword.c&Parse a template name (what follows a  `:define` or d block)eParse a modifierfParse template into a  of referents and stringsg*Parse a probability/corresponding templatehParse a function name for a  `:category` block.i Parse an ajParse a ^ block`Parse a ` blockk Parse the  `:return` blocklParse 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)mParse text as token + contextn!Parse text as a list of functionso@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..pParse inclustions TqUVWXYZ[\]^_abcefghij`kl mno !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 parseResultp no p TqUVWXYZ[\]^_abcefghij`kl mno p None:Parse a template file into the  data typer'Generate text from file with inclusions:Generate randomized text from a file containing a templatesRun in the appropriate folder-Run based on text input, with nothing linked.tGet file as contextBParse a template into a RandTok suitable to be displayed as a tree)variables to substitute into the templatefolderfilepath within folderparsed r1List of variables to substitute into the templatePath to .mad file.Resultstrrst Noneu 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 u or in spliced expressions.v Convert a w6 containing to a `Q Exp` with the parsed syntax tree.x_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.vxvx Safeyz{|}~zyz{|}~ Nonedatatype for the subcommandsdatatype for the program/Parser for command-line options for the programParser for the run 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[\]^_`ab c d e f g h i j k l m n o p q rstu v w x y z { | } ~   st         &madlang-3.0.0.4-F7NUnsqA0kc1LZlwy4eU13 Text.MadlibsText.Madlibs.Internal.TypesText.Madlibs.Internal.UtilsText.Madlibs.Exec.HelpersText.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 runMadlangPreTokProb $fEqStateT$fMonoidRandTokNameapply $fEqPreTok $fShowPreTokRandTokFListFValueFD:R:BaseRandTok dropExtensiongetDir.$ normalizecdfshow'parseErrorPretty'unTok readFile'installVimPlugin fetchPackages cleanPackages 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 SubcommandProgramorderstemplintwrappertemplateDebugRunLintInstall VimInstallinput_repclInputssubdebug versionInfo