<T      !"#$%&'()*+,-./0123456789:;< = >?@ABCDEF G H I J K L M N O P Q R S TU V W X Y Z [\]^_`abcd efghi jkl mn o p q r s t u v w x y z { | } ~   &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 indices 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%&<=DLR["2Generate a random value. For more information see #2Generate a random value frbounded by a range. See  for how the range works.$=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."#$"#$"#$"#$Mutable references for marvin.(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone%&<=DLR[ %:A value that can be shared on multiple concurrent Threads.QThis value works like a channel. It can either be empty or full. If it is empty /6 fills it, otherwise the write blocks. If it is full -3 empties, otherwise it blocks until it is filled. +* does not empty it and also blocks if the % is empty.aShould you just use it as a thread safe mutable variable, mutations typically follow the pattern:  val <- takeSynchronized -- obtain the value and leave it empty to block concurrent reads mod <- modifyWithIO val -- modify the value, typically involves IO writeSynchronized mod -- write back the result Another use for this type is as a message channel, where we have a producer and a consumer, the producer tries to write values into the % (/") and the consumer waits for the %# to be filled and takes the value (-) for procesing.It works generally best if any %A is only used for one of these two applications at the same time.This type is the same as e, only renamed for readability. If you want a more in depth documentation, see the documentation for .&'A mutable reference to a value of type vThis is like a pointer in c, the value behind which can be mutated by several functions. So long as they retain this reference they are able to retrieve the updated value.''Create a new mutable reference of type v from an initial value.(1Retrieve the value behind by a mutable reference.))Set the value inside a mutable reference.*,Change the value behind a mutable reference.+#Read the vaue, but don't empty the %. Blocks if it is empty.,Non blocking version of + . Returns  if it was empty.-Read the value and empty the %, blocks if already empty..Non blocking version of - , returns  if it was empty./Fills the empty %$ with a value, blocks if it is full.0Non blocking version of / . Returns  if it was full.1 Query if the % is empty or full. %&'()*+,-./01 %&'()*+,-./01 &'()*%+,-./01 %&'()*+,-./01Working with json in marvin(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone%&<=DLR[2(Read a file containing JSON encoded data32Write some data to a file using JSON serialization23      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a232323+Performing http/https requests from scripts(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone%&<=DLR[None%&59;<=?DILR[#FRead only data available to a handler when the bot reacts to an event.,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.<aA type, basically a String, which identifies an adapter to the config and the logging facilities.For conversion please use l and =%. They will perform necessary checks.>_A type, basically a String, which identifies a script to the config and the logging facilities.For conversion please use k and ?%. They will perform necessary checks.@0Wrapping type for channels. Only used to enable g typeclass instances.C-Wrapping type for users. Only used to enable g typeclass instances.F+Basic functionality required of any adapterGhConcrete, adapter specific representation of a user. Could be an id string or a full object for instanceHkConcrete, adapter specific representation of a channel. Could be an id string or a full object for instanceI#Used for scoping config and loggingJAPost a message to a channel given the internal channel identifierKInitialize the adapter stateL Run the botM5Resolve a username given the internal user identifierNTResolve the human readable name for a channel given the internal channel identifierOEResolve to the internal channel structure given a human readable namePBResolve to the internal user structure given a human readable nameS%Monad in which adapter actions run inT.Basic monad which most internal actions run inU6Representation for the types of events which can occur[%A timestamp type. Supplied with most U types^"The contents of a recieved message_The topic in a channel`<Monad for reacting in the bot. Allows use of functions like ,  and  as well as any arbitrary b 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 completeness: a is the adapter type and r/ is the return type of the monadic computation.This is also a c 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.a;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.dINTERNAL USE WITH CARE"Obtain the entire config structureb Similar to e+, this class says that there is an adapter c, available from this type (usually a monad) m.RThe type of adapter depends on the monad itself. This class can be thought of as c specified to c.c-The concrete type of adapter accessible from m.e Similar to b, this class says there is a >+ reachable from the type (usually a monad) m.fRetrieve the script id out of m, ususally a monad.g/Class which says that there is a way to get to b from this type a.uThis typeclass is used to allow handlers with different types of payload to share common accessor functions such as  and .]The instances specify for each type of payload which pieces of data can be extracted and how.iSInitializer for a script. This gets run by the server during startup and creates a j!A monad for gradually defining a  using  and  as well as any b action.k#Attempt to create a script id from Textl%Attempt to create an adapter id from Text}efgh45ijklmnopqrstuvwxyz6789{|:;<}=>~?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`adbcdefghijkl_efgh45ijklmnopqrstuvwxyz6789{|:;<}=>~?@ABCDEFHGMNPOJIKLQRSTUVWXYZ[\]^_`adbcdefghijklGefgh45ijklmnopqrstuvwxyz6789{|:;<}=>~?@ABCDEF GHIJKLMNOPQRSTUVWXYZ[\]^_`adbcdefghijklNone%&<=DLR[m Script id sed for the bot itselfmmmCommon types in marvin.(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone%&<=DLR[(456789:;>?@ABCDEGHTUVWXYZ[\]^abcefghkm(^>?k?meffa[\]bcCDE@ABghUVWXYZT:;896745None%&<=DLR[ The adapter interface(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone%&9:;<=DLRT[nopqrstu <=FHGMNPOJIKLQRSUVWXYZdlnopqrstu!QRFGHIJKLMNOP<=l=SUVWXYZtupqrsodnnopqrstu #Adapter for communicating with IRC.(c) Justus Adam, 2017BSD3dev@justus.science experimentalPOSIXNone#$%&<=DLORT[vwBot nameTarget of messageThe actual message textxvwvw vwx .Adapter for communicating with a shell prompt.(c) Justus Adam, 2017BSD3dev@justus.science experimentalPOSIXNone#%&<=DLR[yAdapter for a shell promptyzyyyzNone%&9;<=?DILR[{EIdentifier for a channel (internal and not equal to the channel name)|>Identifier for a user (internal and not equal to the username)}\Adapter for interacting with Slack API's. Polymorphic over the method for retrieving events.>{|}7{|}{|} None#%&9;<=DLRT[~!Class to enable polymorphism for }/ over the method used for retrieving updates. (RTM or  EventsAPI)~   ~  ~   EAdapter for communicating with Slack via the webhook based Events API(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone#%&<=DLR[+Recieve events as a server via HTTP webhook  {|}~}|{~  DAdapter for communicating with Slack via its real time messaging API(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone#%&<=DLR[DRecieve events by opening a websocket to the Real Time Messaging API{|}~}|{~None%&9:;<=?DLRT[9A user object as contained in the telegram update objects7A telegram chat object as contained in telegram updates(Chat type as defined by the telegram api?The telegram adapter type for a particular update type. Either Push or Poll7Class to enable polymorphism over update mechanics for 4 !"#$%&'()*+,-./- !"#$%&'() !"#$%&'()*+,-./>Adapter for communicating with Telegram via its http poll API.(c) Justus Adam, 2017BSD3dev@justus.science experimentalPOSIXNone%&<=DLR[1Use the telegram API by fetching updates via HTTP0123401234GAdapter for communicating with Telegram via its webhook based push API.(c) Justus Adam, 2017BSD3dev@justus.science experimentalPOSIXNone#%&<=DLR[AUse the telegram API by recieving updates as a server via webhook]Note: The initialization for this adapter _includes_ registering or clearing its own webhook.55 None%&9:;<=?DILORT[!6*Get the config part for the currect scriptFWhenever 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 hubot)This handler runs whenever a user enters  any channel! (which the bot is subscribed to)IThe payload contains the entering user and the channel which was entered.(This handler runs whenever a user exits  any channel! (which the bot is subscribed to)GThe payload contains the exiting user and the channel which was exited.)This handler runs whenever a user enters the specified channel.8The argument is the human readable name for the channel.'The payload contains the entering user.(This handler runs whenever a user exits the specified channel<, provided the bot is subscribed to the channel in question.8The argument is the human readable name for the channel.%The payload contains the exting user.$This handler runs when the topic in  any channel" the bot is subscribed to changes.GThe payload contains the new topic and the channel in which it was set.$This handler runs when the topic in the specified channelG is changed, provided the bot is subscribed to the channel in question.0The argument is the human readable channel name.Extension point for the user8Allows you to handle the raw event yourself. Returning e from the trigger function means you dont want to react to the event. The value returned inside the 7) is available in the handler later using .?Send a message to the channel the triggering message came from.#Equivalent to "robot.send" in hubotpGet the username of a registered user. The type signature is so large to allow this function to be used both in ` and j.Try to get the channel with a particular human readable name. The type signature is so large to allow this function to be used both in ` and j.sGet the human readable name of a channel. The type signature is so large to allow this function to be used both in ` and j.yTry to get the user with a particular username. The type signature is so large to allow this function to be used both in ` and j.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)ASend a message to a channel (by adapter dependent channel object)Define a new script for marvinVYou need to provide a ScriptId (which can be written as a non-empty string, needs the OverloadedStrings language extension). 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.KThe type of this data depends on the reaction function used. For instance  and  will contain MessageReactionDataW. 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 messageGet the the new topic.3Get the stored channel in which something happened.4Get the user which was part of the triggered action.'Get a value out of the config, returns  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 ad 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 ad Constraint means this function can be used both during script definition and when a handler is run.8INTERNAL, USE WITH CARE=Get the configuration for the bot (should be "bot" subconfig)9INTERNAL, USE WITH CARE;Get a value from the bot config (should be "bot" subconfig):INTERNAL, USE WITH CARE;Get a value from the bot config (should be "bot" subconfig)#Get the configured name of the bot.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.';6<=>?@89:Nefgh45ijklmnopqrstuvwxyz>~?_`dbcdghij6@9:';6<=>?@89: Running marvin.(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone#%&9:;<=?DLORT[ Default name for the config filepRetrieve a value from the application config, given the whole config structure. Fails if value not parseable as a or not present.XRetrieve a value from the application config, given the whole config structure. Returns  if value not parseable as a or not present.;Runs the marvin bot using whatever method the adapter uses.ABCDEFGHIJKFiiF ABCDEFGHIJKMarvin the modular bot(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone%&<=DLR['>FHG^_`ij'i>jFGH`^_4A collection of all modules useful for using marvin.(c) Justus Adam, 2016BSD3dev@justus.science experimentalPOSIXNone%&<=DLR[7      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a LMN OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"#$%&'()*+,-./0123>FHG^_`ij   !"##$$%&'%&(%)*%+,%-.%/0%12345367389:;<:;=:;>:;?:;@:;A:;B:;C:;D:;E:;FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkllmnnopqrstuvwxyz{|}~          v x w y       %H%-%%1      !"#$%&'()*+,-./012345678797:7;<=<><?<@<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<[<\<]<^<_<`<abcbdefeghihjhkhlhmhnhohphqhrhohphshthuhvhvhwhxhxhyhzh{h|h}h~hhhhhhh!"hj|              m         nm!"#$%&'( )*   +,-./0112345 6%17 8 9 : ; < = > ? @ @ A B C D E F G H IJKLJKMJKNOPQOPROPSOPTOPUOPVOPWOPXOPYOPZOP[OP\OP]OP^OP_OP`OPaOPbOPcOPdOPeOPfOPgOPhOPiOPjOPkOPlOPmOPnOPoOPpOPqOPrOPsOPtOPuOPvOPwOPxOPyOPzOP{OP|OP}OP~OPOPOPOPOPOPOPOPOPOPOPOP#marvin-0.2.4-5FYcvnw5OM25lerX7Nj0Wq Marvin.TypesMarvinMarvin.Adapter.Telegram.PollMarvin.PreludeMarvin.Util.RegexMarvin.Util.RandomMarvin.Util.MutableMarvin.Util.JSONMarvin.Adapter Marvin.RunMarvin.Adapter.IRCMarvin.Adapter.ShellMarvin.Adapter.Slack.EventsAPIMarvin.Adapter.Slack.RTMMarvin.Adapter.Telegram.PushMarvin.Util.HTTPMarvin.Internal.TypessendreplymessageChannelgetData getMessagegetMatchgetUserrespondhearMarvin.Internal.ValuesUtilMarvin.Adapter.Slack.TypesMarvin.Adapter.Slack.CommonMarvin.Adapter.Telegram.CommonMarvin.InternalBotActionStateScript TelegramUser TelegramChatbaseControl.Monad.IO.ClassliftIOMonadIO Control.MonadunlessData.Traversablefor Data.Foldablefor_ Data.Maybe fromMaybeGHC.Basewhen/marvin-interpolate-1.1.2-I7Kl4HYtOskDITki3HqIMVMarvin.Interpolate.Text.LazyisLMarvin.Interpolate.TextisTMarvin.Interpolate.StringisS'text-icu-0.7.0.1-AhSXREBooSgJCmlwm1m7QZData.Text.ICU.Regex.Internal StackLimit WorkLimitErrorOnUnknownEscapes UnicodeWord HaskellLines MultilineLiteralDotAllCommentsCaseInsensitive MatchOptionMatchRegexrmatch$fIsStringRegex $fShowRegex $fNFDataRegex randomValrandomValFromRange randomFrom SynchronizedMutable newMutable readMutable writeMutable modifyMutablereadSynchronizedtryReadSynchronizedtakeSynchronizedtryTakeSynchronizedwriteSynchronizedtryWriteSynchronizedisEmptySynchronizedreadJSON writeJSON HasActionsactions HasPayloadpayload HasAdapteradapter HasScriptIdscriptId AdapterIdunwrapAdapterIdScriptIdunwrapScriptIdChannel'unwrapChannel'User' unwrapUser' IsAdapterUserChannel adapterId initAdapterrunWithAdapter getUsernamegetChannelNameresolveChannel resolveUserRunWithAdapter EventHandlerAdapterMRunnerMEvent MessageEvent CommandEventChannelJoinEventChannelLeaveEventTopicChangeEvent TimeStampunwrapTimeStampMessageTopic BotReactingHasConfigAccess AccessAdapterAdapterT getAdapterIsScript getScriptIdGetgetLens ScriptInitScriptDefinition mkScriptId mkAdapterIdapplicationScriptIdliftAdapterAction getAppConfiglookupFromAppConfigrequireFromAppConfig getBotnamegetAdapterConfiglookupFromAdapterConfigrequireFromAdapterConfig IRCAdapter IRCChannel$fIsAdapterIRCAdapter ShellAdapter$fIsAdapterShellAdapterSlackChannelId SlackUserId SlackAdapterMkSlack EventsAPI$fMkSlackEventsAPIRTM $fMkSlackRTMHasType_type_ HasFirstName firstNameHasId_id_ HasLastNamelastName HasUsernameusernameChatType PrivateChat GroupChatSupergroupChat ChannelChatTelegramAdapter MkTelegramPoll$fMkTelegramPoll$fFromJSONUpdateWithIdPush$fMkTelegramPushenterexitenterInexitFromtopictopicIn customTriggermessageChannel' defineScriptgetTopic getChannel getConfigValrequireConfigVal getBotNameextractReaction extractActiondefaultConfigName runMarvin Data.StringIsString unwrapRegex!random-1.1-9tceXaeYIMZ4JrKq20Egog System.RandomrandomrandomRlength getStdRandom newStdGen getStdGen setStdGenmkStdGen RandomGennextsplitgenRangeStdGenRandomrandomRsrandoms randomRIOrandomIOGHC.MVarMVarNothingghc-prim GHC.TypesFalse$aeson-1.1.2.0-3GaKdgzbnBMD7fb2r7uzu0 Data.Aeson.THmkLiftParseJSON2mkLiftParseJSON mkParseJSONderiveFromJSON2deriveFromJSON1deriveFromJSONmkLiftToEncoding2mkLiftToEncoding mkToEncoding mkLiftToJSON2 mkLiftToJSONmkToJSON deriveToJSON2 deriveToJSON1 deriveToJSON deriveJSON2 deriveJSON1 deriveJSON Data.AesoneitherDecodeStrict' eitherDecode'eitherDecodeStrict eitherDecode decodeStrict'decode' decodeStrictdecodeencodeData.Aeson.TypesfoldableData.Aeson.Types.ToJSON toEncoding2toJSON2 toEncoding1toJSON1genericLiftToEncodinggenericToEncodinggenericLiftToJSON genericToJSONGToJSONgToJSON GToEncoding gToEncodingToArgsNoToArgsTo1ArgsToJSONtoJSON toEncoding toJSONListtoEncodingListKeyValue.= ToJSONKey toJSONKey toJSONKeyListToJSONKeyFunction ToJSONKeyTextToJSONKeyValueToJSON1 liftToJSONliftToJSONListliftToEncodingliftToEncodingListToJSON2 liftToJSON2liftToJSONList2liftToEncoding2liftToEncodingList2Data.Aeson.Encoding.Internalpairs fromEncodingEncodingSeriesData.Aeson.Types.FromJSON.!=.:!.:?.:fromJSONwithBoolwithScientific withNumber withArraywithText withObject parseJSON2 parseJSON1genericLiftParseJSONgenericParseJSON GFromJSON gParseJSONFromArgs NoFromArgs From1ArgsFromJSON parseJSON parseJSONList FromJSONKey fromJSONKeyfromJSONKeyListFromJSONKeyFunctionFromJSONKeyCoerceFromJSONKeyTextFromJSONKeyTextParserFromJSONKeyValue FromJSON1 liftParseJSONliftParseJSONList FromJSON2liftParseJSON2liftParseJSONList2Data.Aeson.Parser.Internaljson'jsonData.Aeson.Types.GenericZeroOneData.Aeson.Types.InternaldefaultTaggedObjectdefaultOptionsobjectResultErrorSuccessObjectArrayValueBoolStringNumberNull DotNetTimefromDotNetTimeOptionsfieldLabelModifierconstructorTagModifierallNullaryToStringTagomitNothingFields sumEncodingunwrapUnaryRecords SumEncoding TaggedObject UntaggedValueObjectWithSingleField TwoElemArray tagFieldNamecontentsFieldNameIO mtl-2.2.1-BLKBelFsPB3BoFeSWSOYj6Control.Monad.Reader.Class MonadReadergetConfigInternalHandlers HasCustomscustomsHasHearshearsHasJoinsjoins HasJoinsInjoinsIn HasLeavesleaves HasLeavesFrom leavesFrom HasRespondsrespondsHasTopicChange topicChangeHasTopicChangeIn topicChangeIn HasConfigconfigrunAdapterAction#$fHasScriptIdBotActionStateScriptId runReaction$fMonoidHandlers$fNFDataHandlers Rep_Handlers LoggingFn runScriptverifyIdString$fConfiguredLogLevel$fIsStringAdapterId$fIsStringScriptId$fShowTAdapterId$fShowTScriptId$fAccessAdapterAdapterM$fAccessAdapterBotReacting$fAccessAdapterScriptDefinition$fIsScriptBotReacting$fIsScriptScriptDefinition$fHasConfigAccessBotReacting!$fHasConfigAccessScriptDefinition$fGet(,,,)Text$fGet(,,,,)Text $fGet(,,,,)[]$fGet(,,,,)TimeStamp$fGet(,,,)TimeStamp$fGet(,,)TimeStamp$fGet(,,,,)Channel'$fGet(,,,)Channel'$fGet(,,)Channel'$fGet(,,,,)User'$fGet(,,,)User'$fGet(,,)User'$fMonadBaseControlIOAdapterM$fHasScriptIdScriptScriptIddefaultBotNamescriptConfigKeyadapterConfigKeynotImplemented addPrefixadaptLoggingSourceloggingAddSourcePrefixtimestampFromNumber msgOutChan RealChannelDirectchanName MarvinIRCMsgproducerconsumer processor isMentionsetUpoutputhelpLimitedChannelInfoUserInfo ChannelCache UserCache APIResponseRTMDataokurl jsonParseURI$fFromJSONSlackUserId HasInfoCache infoCacheHasNameResolver nameResolver HasIdValueidValueHasNamenameHasTopic$fFromJSONSlackChannelId $fHasTopicLimitedChannelInfoText$fHasUsernameUserInfoText$$fHasNameResolverChannelCacheHashMap channelCache userInfoCache outChannel InternalType SlackEvent UnhandeledIgnoredChannelArchiveStatusChangeChannelCreatedChannelDeleted ChannelRename UserChangeOkResponseEventcodemsgrawBS helloParseruserInfoParseruserInfoListParserapiResponseParser lciParser lciListParser$fFromJSONRTMData!$fHasNameResolverUserCacheHashMapinitIOConnections messageParser eventParserstripWhiteSpaceMayrunHandlerLoop runnerImpl execAPIMethodmessageChannelImplgetUserInfoImplrefreshSingleUserInforefreshChannelsrefreshSingleChannelInforesolveChannelImplrefreshUserInforesolveUserImplgetChannelNameImpl putChannel deleteChannel renameChannel$fIsAdapterSlackAdaptereventAPIeventParserrunEventReceiversendMessageLooprunConnectionLoop senderLoopTelegramUpdateEv descriptionresult errorCodeerrDescription$fHasUsernameTelegramUserMaybe mkEventGettertelegramSupportedUpdates msgParserexecAPIMethodWithgetUsernameImpl$fIsAdapterTelegramAdapter$fFromJSONTelegramUpdate$fFromJSONTelegramChat$fFromJSONTelegramUser$fFromJSONChatType$fHasUsernameTelegramChatMaybe UpdateWithIdupdateId updateContentpollEventGetterpushEventGetter getConfigJustgetAppConfigValrequireAppConfigVal getSubConfFor runBotAction prepareActiononScriptExcept alterHelperrunDefinitions CmdOptions configPathverbosedebug vcatMaybesdefaultLoggingLevelrunWAdamkApp applicationsetLoggingLevelIn)fast-logger-2.4.10-EZEsmtT64vd90y2WPJGK1sSystem.Log.FastLogger.LogStrLogStrToLogStrtoLogStr+monad-logger-0.3.25.1-I9LbNt3XxN6JYmoXXFneXControl.Monad.Logger logOtherCS logErrorCS logWarnCS logInfoCS logDebugCS logOtherNS logErrorNS logWarnNS logInfoNS logDebugNS logOtherN logErrorNlogWarnNlogInfoN logDebugN logWithoutLoc defaultLoc filterLoggerwithChannelLoggerunChanLoggingTrunChanLoggingTrunStdoutLoggingTrunStderrLoggingTrunFileLoggingT defaultLogStr logOtherS logErrorSlogWarnSlogInfoS logDebugSliftLoc logOtherSH logErrorSH logWarnSH logInfoSH logDebugSHlogOtherlogErrorlogWarnlogInfologDebugLogLevel LevelDebug LevelInfo LevelWarn LevelError LevelOther LogSource MonadLoggermonadLoggerLog MonadLoggerIO askLoggerIO NoLoggingT runNoLoggingTLoggingT runLoggingTtemplate-haskellLanguage.Haskell.TH.SyntaxLocloc_end loc_start loc_module loc_package loc_filename