kb      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 objects Make 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")])!"# $%&'() !"#&'( !"# $%&'()None:Datatype for a semantic error*5Throw custom error given by string, within the parser+Throw  error within parser,-Throws error when a function is defined twice-Constant to start s. Convert a Text to a / for use with a pretty-printer0*big semantics checker that sequences stuff1fTake the head of the list, or throw the appropriate error given which functions we are trying to call.29Access argument, or throw error if the list is too short.3'checker to verify there is at most one :return or  :define key statement4 Checks that we have at most one  `:return` template in the file5+Checks that there are no instances of a key6Derived via our show instance;7 display a ! nicely with coloration & whatnot 8*9+,-.01:234567  801:2 8*9+,-.01:234567None9; ;Drop file Extension<"Get directory associated to a file=1Function to apply a value on both arguments, e.g. between .$ (char '"')>0Normalize pre-tokens/corresponding probabilities?-Helper function for creating a cdf from a pdf@Show as a T.TextAPretty-print a ParseErrorBStrip a pre-token's nameCRead a file in as a Text ;<=>?@ABDC ;<=>?@ABDC ;<=>?@ABDCNone  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 ,Same thing, but uses a catamorphism (slower)E5Helper function to compute the cdf when we have a pdfFAAnother helper function, this time for use with our catamorphism. EF  EFNoneGDraw as a syntax TreeHFunction to transform a 7 into a `Tree String` so that it can be pretty-printed. tokToTree 1.0 tokGIHGGIHNone J(A map with all the modifiers for MadlangKJumble the words in a stringLStrip file extensionMGet the :return valueN(Convert the stuff after the number to a O5Build token in tree structure, without concatenating.P2Build the token without concatenating, yielding a # suitable to be printed as a tree.Q+Given keys naming the tokens, and lists of  , build our RPSort the keys that we have parsed so that dependencies are in the correct placesS.Ordering on the keys to account for dependency JKLMNOPQRTUVSJKLMPQR JKLMNOPQRTUVS None W0Parse a lexeme, aka deal with whitespace nicely.X*space consumer with awareness for commentsY6parse a symbol, i.e. string plus surrouding whitespaceZParse a number/probability[Parse an integer\-Make sure definition blocks start un-indented]0Make contents of definition blocks are indented.^Parse between quotes_Parse a keyword` Parse a vara Parse the a keyword.b Parse the c keyword.d Parse the d keyword.e Parse the  `:return` keyword.f&Parse a template name (what follows a  `:define` or g block)hParse a modifieriParse template into a  of referents and stringsj*Parse a probability/corresponding templatekParse a function name for a  `:category` block.l Parse an dmParse a a blockcParse a c blocknParse a  `:library` declarationo Parse the  `:return` blockpParse 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)qParse text as token + contextr!Parse text as a list of functionss@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..tParse inclustions"WuXYZ[\]^_`abdefhijklmcnvopqrs!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 parseResulttrst"WuXYZ[\]^_`abdefhijklmcnvopqrst None:Parse a template file into the  data typew'Generate text from file with inclusions:Generate randomized text from a file containing a templatexRun n times.yRun in the appropriate folder-Run based on text input, with nothing linked.zGet file as contextBParse a template into a RandTok suitable to be displayed as a tree )variables to substitute into the templatefolderfilepath within folderparsed w{1List of variables to substitute into the templatePath to .mad file.Result|xyz| w{|xyz None/8I} for an EDSL, e.g. ydemoQQ :: 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 } or in spliced expressions.~ Convert a 6 containing to a `Q Exp` with the parsed syntax tree._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") 6Note that the embedded code cannot have any inclusions~~ 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[\]^_`abcde f g h i j k l m n o p q r s t uvwx y z { | } ~   vw           'madlang-3.1.1.21-LFCz5YDzOF6KyYI7ph4AAb Text.MadlibsText.Madlibs.Packaging.FetchText.Madlibs.Internal.TypesText.Madlibs.Cata.SemErrText.Madlibs.Internal.UtilsText.Madlibs.Cata.RunText.Madlibs.Cata.DisplayText.Madlibs.Ana.ParseUtilsText.Madlibs.Ana.ParseText.Madlibs.Ana.ResolveText.Madlibs.Generate.TH Paths_madlangText.Madlibs.Exec.MainContextRandTokListValueKey SemanticErrorNoReturnCircularFunctionCallsInsufficientArgsDoubleDefinition NoContextImportNotFoundrunrunCata parseTokMparseTok parseTree parseFilerunFilerunTextmakeTreemadlangmadFile runMadlang fetchGithubinvalidinstallVimPlugin fetchPackages cleanPackagesPreTokProb $fEqStateT$fMonoidRandTokNameapply $fEqPreTok $fShowPreTokRandTokFListFValueFD:R:BaseRandTok customErrornoReturndoubleDefinition semErrStarttext'-ansi-wl-pprint-0.6.8.1-AloTw2NbGBFHl1luttZjPa%Text.PrettyPrint.ANSI.Leijen.InternalDoccheckSemanticshead'accesscheckKeysingleInstance noInstance$fExceptionSemanticError$fShowSemanticErrorParsershowCustomError headNoReturn dropExtensiongetDir.$ normalizecdfshow'parseErrorPretty'unTok readFile' readLibFilemkCdf mkCdfCata displayTree tokToTree cleanTree modifierListjumblestrip takeTemplate concatTokbuildTok buildTreebuildsortKeys orderKeys orderHelper maybeListallDepslexeme spaceConsumersymbolfloatinteger nonIndented indentGuardquotekeywordvardefinecatcategoryincludemainnamebaseGHC.BasereturnmodifierpreStrpairfunction inclusions definition preLibraryfinalprogram parseTreeM parseTokF parseTreeFparseInclusions spaceOnlylibrarygetInclusionCtx runInFolderN runInFolderparseCtxpathSeprunFileNtemplate-haskellLanguage.Haskell.TH.Quote QuasiQuotertextToExpressionStringerrorgen $fMonadIOQcatchIOversionbindirlibdir dynlibdirdatadir libexecdir sysconfdir getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName SubcommandProgramorderstempsamplelintwrappertemplateDebugRunLintSampleGetInstall VimInstallinput_repclInputs_remotesubfetchdebug versionInfo