U      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij k l m n o pqrstuvwxyz{|}~  &Regular expression wrapper for marvin.(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone %&<=DLR) A match to a *@. Index 0 is the full match, all other indexes are match groups.*@Abstract Wrapper for a reglar expression implementation. Has an < implementation, so literal strings can be used to create a *. Alternatively use ,# to create one with custom options.,Compile a regex with optionsNormally it is sufficient to just write the regex as a plain string and have it be converted automatically, but if you want certain match options you can use this function.-IMatch a regex against a string and return the first match found (if any).)*+,-./!  !"#$%&'()*+,-!*),-'&%$#"! ( +)*+,-./$Random numbers and utility functions(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone %&<=DLR02Generate a random value. For more information see 12Generate a random value frbounded by a range. See  for how the range works.2=Get a random value out of an integer indexed sequence, like (Vector , '[a]', Seq or Set) This uses the sequences 9 and therefore does not terminate for infinite sequences.(Uses the global random number generator.)Usable in all IO capable monads, such as  BotReacting and ScriptDefinition.012012012012Mutable references for marvin.(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXSafe %&<=DLR3'A mutable reference to a value of type v4'Create a new mutable reference of type v from an initial value.51Retrieve the value behind by a mutable reference.6)Set the value inside a mutable reference.7,Change the value behind a mutable reference.34567345673456734567 Working with json in marvin(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone %&<=DLRQ +Performing http/https requests from scripts(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXSafe %&<=DLR None%&9;<=?DILR>;Denotes a place from which we may access the configuration.RDuring script definition or when handling a request we can obtain the config with  getConfigVal or requireConfigVal.aA type, basically a String, which identifies an adapter to the config and the logging facilities.A_A type, basically a String, which identifies a script to the config and the logging facilities.#89:;<=>?@ABCDEFGHI  J   89:;<=>?@ABCDEIGFH  J  89:;<=>?@ABCDEFGHI  J   Common types in marvin.(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone %&<=DLR89:;<=>ABCDEIGFHJ:;89DEFGHIABCJ<==>&Logging facilities for marvin scripts.(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone %&<=DLR KLMNOPQRS KLMNOPQRS KLMNOPQRS KLMNOPQRSThe adapter interface(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone%&9;<=DLRTTUVWXYZ[\]^_`abcdefghiTUWYZVX[\]^_`abcdefghi^_]\UVWXYZ[T`abcdefghiTUVWXYZ[\]^_`abcdefghi None #%&<=DLR6 !jk"#$%&'()l*+,-./0123456789:;<=>?@ABCDmnll !jk"#$%&'()l*+,-./0123456789:;<=>?@ABCDmnNone%&9:;<=?DILORTFRead only data available to a handler when the bot reacts to an event.VPayload in the reaction Monad when triggered by a message. Contains a field for the D and a field for the ) from the *.,Both fields are accessible directly via the  and  functions or this data via .,An abstract type describing a marvin script.1This is basically a collection of event handlers.@Internal structure is exposed for people wanting to extend this.v<Monad for reacting in the bot. Allows use of functions like ,  and  as well as any arbitrary E action using .The type parameter dY is the accessible data provided by the trigger for this action and can be obtained with  or other custom functions like  and 8 which typically depend on a particular type of data in d. For message handlers like  and  this would be a regex ) and a D for instance.For completeness: a is the adapter type and r/ is the return type of the monadic computation.This is also a F instance, there you can inspect the entire state of this reaction. This is typically only used in internal or utility functions and not necessary for the user. To inspect particular pieces of this state refer to the *Lenses* section.{1Class which says that there is a way to get to a ) from this type m.}1Class which says that there is a way to get to a D from this type m.SInitializer for a script. This gets run by the server during startup and creates a !A monad for gradually defining a  using  and  as well as any E action.FWhenever any message matches the provided regex this handler gets run.#Equivalent to "robot.hear" in hubot8Runs the handler only if the bot was directly addressed.&Equivalent to "robot.respond" in hubotExtension point for the user8Allows you to handle the raw event yourself. Returning Ge from the trigger function means you dont want to react to the event. The value returned inside the H) is available in the handler later using .?Send a message to the channel the triggering message came from.#Equivalent to "robot.send" in hubot&Get the username of a registered user.)Get the human readable name of a channel.qSend a message to the channel the original message came from and address the user that sent the original message.$Equivalent to "robot.reply" in hubot%Send a message to a Channel (by name)Define a new script for marvinYou need to provide a ScriptId (which can simple be written as a non-empty string). This id is used as the key for the section in the bot config belonging to this script and in logging output.0Roughly equivalent to "module.exports" in hubot. Obtain the event reaction data. JThe type of this data depends on the reacion function used. For instance  and  will contain W. The actual contents comes from the event itself and was put together by the trigger.5Get the results from matching the regular expression.#Equivalent to "msg.match" in hubot.Get the message that triggered this action Includes sender, target channel, as well as the full, untruncated text of the original message'Get a value out of the config, returns G if the value didn't exist.This config is the config for this script. Ergo all config vars registered under the config section for the ScriptId of this script.The >d Constraint means this function can be used both during script definition and when a handler is run.WGet a value out of the config and fail with an error if the specified key is not found.This config is the config for this script. Ergo all config vars registered under the config section for the ScriptId of this script.The >d Constraint means this function can be used both during script definition and when a handler is run.Take a reaction and produce an IO action with the same effect. Useful for creating actions which can be scheduled to execute a certain time or asynchronous. The idea is that one can conveniently send messages from inside a schedulable action.Take an action and produce an IO action with the same effect. Useful for creating actions which can be scheduled to execute a certain time or asynchronous. The idea is that one can conveniently send messages from inside a schedulable action.KpqrstuIvJKLMNOPQwxyzRSTU{|}~VWXYZ[\]^_`abcdefghij@pqrstuvJKLMNOPQwxyzSTU{|}~VWXYZ[\]^_`a5pqrstuIvJKLMNOPQwxyzRSTU{|}~VWXYZ[\]^_`abcdefghij Running marvin.(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone#%&59:;<=?DLRTk"Create a wai compliant applicationlmnopqrstuvwxyz{|}k~UUlmnopqrstuvwxyz{|}k~Marvin the modular bot(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone %&<=DLR58:?@ADEIGFHUpqrstuvwxyz{|}~5AUDEFGHI:8v}~{|?@rstuwxyzpq4A collection of all modules useful for using marvin.(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone %&<=DLR  !"#$%&'()*+,-012345678:?@ADEIGFHKLMNOPQRSUpqrstuvwxyz{|}~   !" !# !$ !% !& !' !( !) !* !+ !, !- !. !/ !0 !1 !2 !3 !4 !5 !6 !7 !8 !9 !: !; !< !=>?@ABCDEFGHIJKL M M N N O P Q R S T T U V V W X Y Z [\]^_`abcdefghijklmnopq\]^_`abcd r s t u v wxyz{|}~jkh ?                            ! " #  $ % & ' ( ( ) * + + , - t . / 0 1 2 3 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E FGHIJKLMNO~PQQRSTUVWXYZ[\]l^_`abcdefghijk l m m n n o p q r s t u v w x y z { | }~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#marvin-0.0.4-2d8eUtoZDB96U88tL50X4PMarvinMarvin.PreludeMarvin.Util.RegexMarvin.Util.RandomMarvin.Util.Mutable Marvin.TypesMarvin.Util.LoggingMarvin.AdapterMarvin.Adapter.Slack Marvin.RunMarvin.Util.JSONMarvin.Util.HTTPMarvin.Internal.TypesMarvin.InternalBotActionStateMessageReactionDataScriptbaseControl.Monad.IO.ClassliftIOMonadIO Control.MonadunlessData.Traversablefor Data.Foldablefor_ Data.Maybe fromMaybeGHC.Basewhen)pcre-light-0.4.0.4-AoPPcWPoSh8CV8nUAbwYS0Text.Regex.PCRE.Light.Base exec_partialexec_no_utf8_check exec_notempty exec_noteol exec_notbolexec_newline_lfexec_newline_crlfexec_newline_cr exec_anchored no_utf8_checkutf8ungreedyno_auto_capture newline_lf newline_crlf newline_cr multiline firstlineextraextendeddupnamesdotalldollar_endonlycaseless auto_calloutanchored PCREOptionPCREExecOptionMatchRegex unwrapRegexrmatch$fIsStringRegex $fShowRegex randomValrandomValFromRange randomFromMutable newMutable readMutable writeMutable modifyMutableChannelUserIsScript getScriptIdHasConfigAccess HasScriptIdscriptIdScriptIdunwrapScriptIdMessagesenderchannelcontent timestampapplicationScriptIddebugMinfoMnoticeMwarningMerrorM criticalMalertM emergencyMlogMRunWithAdapter IsAdapter adapterIdmessageChannelrunWithAdapter getUsernamegetChannelNameresolveChannelInitEventHandler EventHandlerEvent MessageEvent adapterLog $fToJSONURI $fFromJSONURISlackRTMAdapter$fIsAdapterSlackRTMAdapter$fFromJSONRTMData$fToJSONRTMData HasVariablevariable HasConfigconfig HasAdapteradapter BotReactingHasMessageField messageField HasMatchField matchFieldHasMatch matchLens HasMessage messageLens ScriptInitScriptDefinition HasActionsactionshearrespond customTriggersendreply defineScriptgetDatagetMatch getMessage getConfigValrequireConfigValextractReaction extractActiondefaultConfigNamerequireFromAppConfiglookupFromAppConfig$fParseRecordCmdOptions$fGenericCmdOptions runMarvin$fHasRespondsHandlers[]$fHasHearsHandlers[]$fHasCustomsHandlers[] Data.StringIsString!random-1.1-54KmMHXjttlERYcr1mvsAe System.RandomrandomrandomRlength getStdRandom newStdGen getStdGen setStdGenmkStdGen RandomGensplitnextgenRangeStdGenRandomrandomRsrandoms randomRIOrandomIOreadJSON writeJSON%aeson-0.11.2.1-B4zJgvAhVvJC40pFgLElOf Data.Aeson.TH mkParseJSONderiveFromJSON mkToEncodingmkToJSON deriveToJSON deriveJSON Data.AesoneitherDecodeStrict' eitherDecode'eitherDecodeStrict eitherDecode decodeStrict'decode' decodeStrictdecodeData.Aeson.Types.Instances.!=.:!.:?.:fromJSONwithBoolwithScientific withNumber withArraywithText withObjectData.Aeson.Encode.FunctionspairsfoldableencodeData.Aeson.Types.ClassgenericParseJSONgenericToEncoding genericToJSONGToJSONgToJSON GToEncoding gToEncoding GFromJSON gParseJSONToJSONtoJSON toEncodingFromJSON parseJSONKeyValue.=Data.Aeson.Parser.Internaljson'jsonData.Aeson.Types.InternaldefaultTaggedObjectdefaultOptionsobjectResultErrorSuccessObjectArrayValueBoolStringNumberNullEncoding fromEncodingSeries DotNetTimefromDotNetTimeOptionsfieldLabelModifierconstructorTagModifierallNullaryToStringTagomitNothingFields sumEncodingunwrapUnaryRecords SumEncoding TaggedObjectObjectWithSingleField TwoElemArray tagFieldNamecontentsFieldName AdapterId$fFromJSONUsergetConfigInternalunwrapAdapterId TimeStampunwrapTimeStampverifyIdString prioMapping$fConfiguredPriority$fIsStringAdapterId$fIsStringScriptId$fToJSONTimeStamp$fFromJSONTimeStamp$fFromJSONChannel scriptLog APIResponse responseOkpayloadRTMDataokurl InternalType UnhandeledIgnoredcodemsgLimitedChannelInfolciIdlciNameUserInfo uiUsernameuiId sendMessage userConfig midTracker channelChache userInfoCache ChannelCacheccCache nameResolver eventParserrawBS helloParseruserInfoParserapiResponseParserrunConnectionLooprunHandlerLoop runnerImpl execAPIMethodnewMidmessageChannelImplgetUserInfoImpl lciParser lciListParserrefreshChannelsresolveChannelImplgetChannelNameImplghc-prim GHC.TypesIO mtl-2.2.1-6qsR1PHUy5lL47Hpoa4jCMControl.Monad.Reader.Class MonadReaderNothingJust$fHasVariableBotActionStated runReaction WrappedAction ActionDataHearRespondCustom+$fHasMessageFieldMessageReactionDataMessage AccessAdapterAdapterT getAdapter runScript getSubConfFor getConfig addReactionmessageChannel'runDefinitions getAppConfiggetAppConfigValrequireAppConfigVal$fAccessAdapterBotReacting$fAccessAdapterScriptDefinition$fIsScriptBotReacting$fIsScriptScriptDefinition$fHasConfigAccessBotReacting!$fHasConfigAccessScriptDefinition $fHasMatchm $fHasMessagem$fHasScriptIdScriptScriptId applicationHandlers CmdOptions configPathverbosedebugdefaultBotName HasRespondsrespondsHasHearshears HasCustomscustomsmkApp addActionrunMessageActiononScriptExcept prepareLogger Text.PrintferrorBadArgumenterrorMissingArgumenterrorShortFormaterrorBadFormatperrorformatRealFloat formatInteger formatInt formatString formatCharvFmthPrintfprintf PrintfType HPrintfType PrintfArg formatArg parseFormatIsChartoCharfromCharFormatAdjustment LeftAdjustZeroPad FormatSignSignPlus SignSpace FieldFormatfmtWidth fmtPrecision fmtAdjustfmtSign fmtAlternate fmtModifiersfmtChar FormatParse fpModifiersfpCharfpRestFieldFormatterModifierParser