4{/)      !"#$%&'(None -024BM)*+,-./0123456789:;<None -024BM =Maps response types to the name of the key in the Slack API For example, the "users.list" command returns the list of users in a key labeled "members">-Represents the response the Slack API returnsThe Slack monad. It executes commands with the context of possible failure (malformed requests, Slack is down, etc...), and some internal state?!Internal state for slack commands@Slack API tokenA]The users in this team. This is maintained as state to be able to reference user IDs to users A Slack UserBA Slack Web API token5Gets the list of users associated with the Slack teamCRParses a record from a JSON object by stripping the given prefix off of each fieldDRConstructs an API request URL given the API token, command names, and command argsE>Takes a API command name and the args and executes the requestF)Same as request with no command argumentsG=H>IJKLMN?O@ABPCDEFQRS=H>IJKLMN?O@ABPCEFG=H>IJKLMN?O@ABPCDEFQRSNone -024BMRConverts a user ID to a user object, signaling an error if there's no such user ID VConverts a user name to a user object, signaling an error if there's no such user name    None -024BM $A more useable version of ChannelRawTRepresents a response from the "channels.list" command. This contains a list of user IDs instead of user objects. This should be converted to a Channel object-List of all channels associated with the team1Retrieves the Channel with the corresponding name TUVWXYZ    TUVWXYZNone -024BM CA nicer version of MessageRaw, with the user id converted to a UserA message sent on a channel. Message can also mean things like user joined or a message was edited TODO: Make this into a sum type of different message types, instead of using Maybe6Fixed point number with 12 decimal places of precision BConverts a TimeStamp to the timestamp format the Slack API expects!$Converts a MessageRaw into a Message"PList of the past n messages in the given channel n must be no greater than 1000#2Gets the n messages occuring before the given time$$Retrieves the entire channel history%FRetrieves a list of the most recent messages within the last n seconds&(Retrieves the messages by the given user'lPosts a message as the given user to the given channel. Returns the timestamp of the message, if successful !"#$%&'[\]^ !"#$%&'! "#$%&' !"#$%&'[\]^None -024BM(OGiven an API token and a Slack command, it executes the command in the IO monad_=Constructs an initial internal state from the given API token`iInternal setup. Currently it just fetches the list of users so that it can associated user ids with names(_`)  !"#$%&'(((_`a       !"#$%&'()*+,*-./012342562782792:;2:<2:=2:>2:?2:@2:A*BC*DEFGHIJKLMN/OPQRSTUVWXYZ[\R]^_`aSbcdeffghidjdklmnop slack-0.1.0.0 Network.SlackNetwork.Slack.UserNetwork.Slack.ChannelNetwork.Slack.MessageNetwork.Slack.PreludeNetwork.Slack.TypesSlackrunSlackInternalUseruserIduserNameusers userFromId userFromNameChannel channelId channelNamechannelMemberschannelschannelFromNameMessage messageType messageUser messageTextmessageTimeStamp MessageRaw _messageType _messageUser _messageText _messageTs TimeStamputcTimetimeStampToStringconvertRawMessagechannelHistorychannelHistoryBeforechannelHistoryAllchannelHistoryRecentmessagesByUser postMessagerunSlackbaseControl.Applicative<*> GHC.GenericsGeneric text-1.2.0.3Data.Text.InternalText aeson-0.8.0.2 Data.Aeson eitherDecodeData.Aeson.Types.Instances.:Data.Aeson.Types.Class parseJSONFromJSONData.Aeson.Types.InternalObjectArrayStringNumberBoolNullValue Text.Printfprintf Data.Functor<$>either-4.3.2.1Control.Monad.Trans.Either hoistEithertransformers-0.4.2.0Control.Monad.IO.ClassliftIO mtl-2.2.1Control.Monad.State.Classget Data.TextunpackSlackResponseName SlackResponse SlackState_token_usersTokenparseStrippedPrefixbuildURLrequestrequest'URLslackResponseNameresponse CommandArgs CommandNameArgValueArgName SlackError$fFromJSONSlackResponse$fSlackResponseName[]$fFromJSONUser ChannelRaw _channelId _channelName_channelMembers$fFromJSONChannelRaw$fFromJSONMessageRaw$fSlackResponseNameTimeStamp$fFromJSONTimeStamp slackAuth slackInit