J<K      !"#$%&'() * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&&&'(()*+,-./ 0!1"2#2$2%2&2'2(2)2*2+2,2-3.4/5061728394:5;6<7=8>9?:@;A<B=C>D?E@FAGBHCIDJEKFLGMHNIOJPcQ Safe-Inferred>KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ KLMNPOQ0~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRR Safe-InferredDS Safe-Inferred T Safe-InferredU Safe-Inferred               None Parse a string as an  or a 0, apply the given generic transformation to it,  and re-render it back to text. (Render haskell code in a compact format     VNone- !"#$%&'()*+,-./0123456789:;<=>a?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv !"#$%&'()*+,-./012356789;<! "$#%&'()*+,-./0123456789:;<=>WNonewxyz{|}~wxyz{|}~XNone Does a name occur in a pattern? ;How often does the given name occur free in an expression? )Does a name occur free in an expression? #The subset of ds that d depends on DConvert recursive lets to lambdas with tuple patterns and fix calls 4Rename all variables to (locally) unqiue fresh ones It'>s a pity we still need that for the pointless transformation.  Otherwise a newly created idconst... could be bound by a lambda  e.g. transform' (id x -> x) ==> transform' (id -> id) ==> id Make an expression points free Transform patterns to:  fst/snd for tuple patterns  head/tail for cons patterns  idconstflip/. for variable paterns  YNoneExpressions with holes M No MLambda here because we only consider closed Terms (no alpha-renaming!). 6 Has to be in this module, otherwise we get recursion Hole/+argument where another expression could go  Application <<9ZNone-An expression with holes to match or replace Expression with holes Number of holes &Apply the rule only in the first pass >Apply the second rule only if the first rule has some results :Optionally apply the rewrite rule, Opt x == Or [identity,x] :Apply the first rule, apply the second rule to the result 4Try the first rule, if it fails use the second rule Use all rules CApply the first rule, then try the second rule on the first result 5 if it fails, returns the result of the first rule 'Like Up, but applied to subexpressions 6Haskell function as a rule, applied to subexpressions A ' rule, rewrite the first to the second  s can contain s Fill in the holes in a  %Create an array, only if the keys in lst are unique and all keys [0..n-1] are given )Try to match a Rewrite to an expression, = if there is a match, returns the expressions in the holes Fill in the holes in a  GMatch an Expr to a MExpr template, return the values used in the holes &Yet another pointless transformation: F Bring an MExpr to (more pointless) form by seeing it as a function  h ole_n -> ... & and writing that in pointless form &Is there a (Hole n) in an expression? 8Variants of a rewrite rule: fill in (some of) the holes  haddock doesn'%t like n+k patterns, so rewrite them 8Variants of a rewrite rule: fill in (some of) the holes  haddock doesn'%t like n+k patterns, so rewrite them DUse this rewrite rule and rewrite rules derived from it by iterated  pointless transformation  Construct a  rewrite rule  Construct a  rewrite rule  Construct a  rewrite rule  Construct a  rewrite rule  Apply Down/Up repeatedly  Apply Down/Up repeatedly ' [ Safe-Inferred               \ Safe-Inferred !"#$%&'()*+,-.. !"#$%&'()*+,-.]None/0123456789:;<=>?@/56789 /0132456789:;<=>?@NoneABCABC TrustworthyDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-InferredNoneRelease all signal handlers 3Register signal handlers to catch external signals    ^ Safe-Inferred              None#Default  `instance' for a Serial $ Serializes a 2 type if both the key and the value are instances F of Read and Show. The serialization is done by converting the map to E and from lists. Results are saved line-wise, for better editing and  revison control. %%4 behaves like read, but catches failure in a monad. ( this allocates a 20-30 M on startup... "An instance for Map Packed [Packed]  uses gzip compression  !"#$%&'( !"#$%&'( !#$&('%" !"#$%&'(_None Expression with syntactic sugar  !"#$%&'()*+,-.  "! #$%&'()*+,-.`None/0123456789:;<=>?@AB </0123456789:;<=>?@ABaNoneCThe size# of an expression, lower is better 1This seems to be a better size for our purposes,  despite being a little- slower because of the wasteful uglyprinting DOptimize an expression EApply all rewrite rules once FApply a single rewrite rule G&Apply a rewrite rule to an expression  in a deep- position, i.e. from inside a RR,CRR or Down HIJCDEFKGD HIJCDEFKG None+Wrapping ClockTime (which doesn'"t provide a Read instance!) seems = easier than talking care of the serialization of UserStatus  ourselves. -Retrieve the current clocktime .Difference of two clock times // d t adds a time difference d and a -- clock  time t to yield a new clock time. 0FPretty-print a TimeDiff. Both positive and negative Timediffs produce  the same output. 14d 17h 8m 53s )*+L,MNO-./0PQRSTUVW)*+,-./0+-./0)*,)*+L,MNO-./0PQRSTUVWbNoneXYZ[\]^XYZ[\]XZY[\]^ None6BDefine a new configuration key with the specified name, type and  default value AYou should probably also provide an explicit export list for any D module that defines config keys, because the definition introduces C a few extra types that will clutter up the export list otherwise. 7Like 6%, but also allowing you to specify a " merge rule" A that will be used to combine multiple bindings of the same key. For example, in Lambdabot.Config.Core,  onStartupCmds is C defined as a list of commands to execute on startup. Its default  value is [ offlinerc]-, so if a user invokes the default lambdabot D executable without arguments, they will get a REPL. Each instance  of -e1 on the command-line adds a binding of the form:   onStartupCmds :=> [command] So if they give one -e(, it replaces the default (note that it C is _not_ merged with the default - the default is discarded), and @ if they give more than one they are merged using the specified  operation (in this case, `(++)`). 123_`4567abcde12345673451267 123_`4567abcde None8Break a String into it'3s first word, and the rest of the string. Example: 5 split_first_word "A fine day" ===> ("A", "fine day) 9CTruncate a string to the specified length, putting ellipses at the  end if necessary. ::Form a list of terms using a single conjunction. Example: 3 listToStr "and" ["a", "b", "c"] ===> "a, b and c" ;#Pick a random element of the list. <<4 takes as input a String and strips spaces from the 8 prefix as well as the suffix of the String. Example: ! dropSpace " abc " ===> "abc" =&Drop space from the end of the string >+show a list without heavyweight formatting , NB: assumes show instance outputs a quoted f. 1 under that assumption, strips the outer quotes. @untab an string 8String to be broken 9:;<=>?@ABCDE89:;<=>?@ABCDE<=?89:>@BCA;DE89:;<=>?@ABCDE NoneF/The type of nicknames isolated from a message. H&The tag of the server this nick is on I*The server-specific nickname of this nick JHFormat a nickname for display. This will automatically omit the server @ field if it is the same as the server of the provided message. KDParse a nickname received in a message. If the server field is not ; provided, it defaults to the same as that of the message. FGHIgJKhiFGHIJKFGHIJKFGHIgJKhi NoneN5For now, this just checks for duplicate empty lines. Owrap long lines. jbreak into lines PDon'#t send any output to alleged bots. LMNOjPLMNOPLMNOPLMNOjPNoneQRSklTmnQRSTQRSTQRSklTmnNoneUThe type of nicknames VHPack a nickname into a ByteString. Note that the resulting strings are / not optimally formatted for human consumtion. WUnpack a nickname packed by V. UopVWUVWUVWUopVWcNone qq1 keeps track of the status of a given Nick name. r(The user changed nick to something new. s;The bot parted a channel where the user was. The Clocktime > records the time and Channel the channel this happened in. < We also save the reliablility of our information and the & time we last heard the user speak. tCThe nick is not present and was last seen at ClockTime in Channel. * The second argument records how much we' ve missed. u@Records when the nick last spoke and that the nick is currently  in [Channel]. vEWe last heard the user speak at ClockTime; since then we have missed + TimeDiff of him because we were absent. wThe type of channels x4Update the user status when a user joins a channel. yHUpdate a user who is not present. We just convert absolute missing time & into relative time (i.e. start the watch). qrstuvwx-If the bot joined the channel, the time that  happened, i.e. now. The channels the user joined. The old status The new status # The user was present before, so he's present now. yz qrstuvwxyqutsrvwxyzNoneZ;extracts the tag of the server involved in a given message [3extracts the nickname involved in a given message. \\: extracts the full user name involved in a given message. ]]- extracts the channels a Message operate on. YZ[\]^YZ[\]^YZ[\]^YZ[\]^None _`a{bcdefghi| _`abcdefghi  _`abcdefghi _`a{bcdefghi|NoneV}~jklmnopqrstuvwxyz{|}~jklmnopqrstuvwxyz{|}~jklmno}~pqrstuvwxyz{|A}~jklmnopqrstuvwxyz{|}~NoneJAn IRC message is a server, a prefix, a command and a list of parameters. G creates a new message from a server, a cmd, and a list of parameters. 5 creates a private message to the person designated. > creates a server QUIT message. The input string given is the B quit message, given to other parties when leaving the network. Server Command  Parameters Returns: The created message &Who should recieve the message (nick) What is the message? Constructed message  None&None CThis transformer encodes the additional information a module might ) need to access its name or its state. The Module type class. @If the module wants its state to be saved, this function should  return a Serial. ,The default implementation returns Nothing. GIf the module maintains state, this method specifies the default state % (for example in case the state can't be read from a state). EThe default implementation returns an error and assumes the state is  never accessed. AIs the module sticky? Sticky modules (as well as static ones) can't be 1 unloaded. By default, modules are not sticky. %The commands the module listenes to. @Initialize the module. The default implementation does nothing. >Finalize the module. The default implementation does nothing. 3Process contextual input. A plugin that implements  : is able to respond to text not part of a normal command. Ebind an action to the current module so it can be run from the plain  X monad.  variant of % for monad actions with one argument  variant of & for monad actions with two arguments  NoneNone XBThe IRC Monad. The reader transformer holds information about the ! connection to the IRC server. :instances Monad, Functor, MonadIO, MonadState, MonadError  Global read/ write state. maps channel names to topics +Output filters, invoked from right to left Global read-only state. Default ro state Default rw state "run a computation in the LB monad 4Interpret an expression in the context of a module. ! Arguments are which map to use ( ircModules and  ircCommands are : the only sensible arguments here), the name of the module/ command, A action for the case that the lookup fails, action if the lookup  succeeds. 3Interpret a function in the context of all modules 0X$2X$X2X None Constants. *For a given file, look locally under State/. That is, suppose one is 0 running out of a Lambdabot darcs repository in homecale/lambdabot. Then 9 lookLocally "fact" ~> "/home/cale/lambdabot/State/fact" LFor a given file, look at the home directory. By default, we stash files in  ~/<.lambdabot. So, running Lambdabot normally would let us do:  6 lookHome "fact" ~> "/home/cale/lambdabot/State/fact" +(Note that for convenience we preserve the  State/foo address pattern.) Do ~.lambdabot & ~ .lambdabot/ State exist? Create ~.lambdabot and ~ .lambdabot/State >Ask Cabal for the read-only copy of a file, and copy it into ~ .lambdabotState.  if there isn'*t a read-only copy, create an empty file. 5Try to find a pre-existing file, searching first in ./State and then in  ~ .lambdabotState KComplicated. If a file exists locally, we return that. If a file exists in  ~ lambdabot0State, we return that. If neither the file nor ~ lambdabotState O exist, we create the directories and then copy the file into it if a template 1 exists, or create an empty file if it does not. N Note that the return type is simple so we can just do a binding and stuff it E into the conventional functions easily; unfortunately, this removes ) error-checking, as an error is now just "". nn None@This datatype allows modules to conviently maintain both global  (i.e. for all clients they'(re interacting with) and private state. % It is implemented on top of readMS/withMS. KThis simple implementation is linear in the number of private states used. Update the module's private state. K This is the preferred way of changing the state. The state will be locked F until the body returns. The function is exception-safe, i.e. even if I an error occurs or the thread is killed (e.g. because it deadlocked and M therefore exceeded its time limit), the state from the last write operation M will be restored. If the writer escapes, calling it will have no observable  effect.  withMSD is not composable, in the sense that a readMS from within the body L will cause a dead-lock. However, all other possibilies to access the state M that came to my mind had even more serious deficiencies such as being prone - to race conditions or semantic obscurities. %Thread-safe modification of an MVar. Read the module's private state. Modify the module's private state. Write the module',s private state. Try to use withMS instead.  Creates a  GlobalPrivate1 given the value of the global state. No private & state for clients will be created. 4Writes private state. For now, it locks everything. Reads private state. EReads private state, executes one of the actions success and failure . which take an MVar and an action producing a Nothing MVar, respectively. &Writes global state. Locks everything Reads global state. flush state of modules 'Peristence: write the global state out  Read it in  The target Just x writes x in the user's private state, Nothing removes it. NoneBDetermine if a nick matches a polynick. The state is read at the  point of binding. Parse a read polynick. Format a polynick. ,Convert a regular mononick into a polynick. 7Lookup (using a polynick) in a map keyed on mononicks. None5Run a browser action with some standardized settings ?Limit the maximum title length to prevent jokers from spamming 0 the channel with specially crafted HTML pages. ;Fetches a page title suitable for display. Ideally, other A plugins should make use of this function if the result is to be B displayed in an IRC channel because it ensures that a consistent ? look is used (and also lets the URL plugin effectively ignore @ contextual URLs that might be generated by another instance of & lambdabot; the URL plugin matches on urlTitlePrompt). BFetches a page title for the specified URL. This function should C only be used by other plugins if and only if the result is not to / be displayed in an IRC channel. Instead, use . >Given a server response (list of Strings), return the text in 3 between the title HTML element, only if it is text/html content. 6 Now supports all(?) HTML entities thanks to TagSoup. None#Register a module in the irc state Unregister a module's entry in the irc state GChecks if the given user has admin permissions and excecute the action  only in this case. +Checks if the given user is being ignored.  Privileged users can't be ignored. Send a message to a channel/+user. If the message is too long, the rest . of it is saved in the (global) more-state.  The channel/user.  The message.    NoneThe Lambdabot entry point. > Initialise plugins, connect, and run the bot in the LB monad EAlso, handle any fatal exceptions (such as non-recoverable signals), G (i.e. print a message and exit). Non-fatal exceptions should be dealt ' with in the mainLoop or further down. % 3jklmnopqrstuvwxyz{|}~3  NoneLconvenience, similar to ios but also cut output to channel to 80 characters  usage: 'process _ _ to _ s = ios80 to (plugs s) z !"#$%&'(123456789:;<=>?@ABCDEFGHIXjklmnopqrstuvwxyz{|}~XFGHINoneNone             None     NoneCompose two plugin functions  Lookup the  method we')re after, and apply it to the dummy args 8Parse a command invocation that can contain parentheses X The Int indicates how many brackets must be closed to end the current argument, or 0 K The Bool indicates if this is a valid location for a character constant  %Does xs start with a command prefix?               !None"NoneConfiguration. Print out help. ABreak a string into dictionary-query terms, handling quoting and 2 escaping along the way. (This is ugly, and I don't particularly A like it.) Given a string like the following, we want to do the < right thing, which is to break it into five query strings: firefly  c'est la vie ' pound cake' 'rock n' roll' et al  firefly  (2)  c'est la vie  (3) ' pound cake'  (4) 'rock n' roll'  (5) et al #None-We can accumulate an interesting environment  Extract the default environment Call the binary:  !"#$%&'()*+, !"#$%&'()*+,$None -./01234 -./01234%None567567&None 89:;<=89:;<='None>?>?(None@ABCDE@ABCDE)None*NoneFGHFGH+NoneIJKLIJKL,None-NoneMNMN.NoneOActually run the hoogle binary POPO/NoneQHNice little combinator used to throw away error messages from an Either D and just keep a Maybe indicating the success of the computation. R.Parse an instance declaration. Sample inputs:  instance Monad [] ) instance (Monoid w) => Monad (Writer w)  instance (State s) S!Wrapper for the instance parser. TESplit the input into a list of the instances, then run each instance * through the parser. Collect successes. U*The standard modules we ask GHCi to load. VMain processing function for @"instances. Takes a class name and G return a list of lines to output (which will actually only be one). WMain processing function for @+instances-importing. Takes the args, which  are words'@d. The all but the last argument are taken to be the modules to K import, and the last is the typeclass whose instances we want to print. XJInterface with GHCi to get the input for the parser, then send it through  the parser. YZ[QRSTUVWX YZ[QRSTUVWX0None\\0 takes a message and converts it to a function. G giving this function a string will attach the string to the message J and output a string containing IRC protocol commands ready for writing " on the outgoing stream socket. ]]2 Takes an input line from the IRC protocol stream G and decodes it into a message. TODO: this has too many parameters. ^ \]_`ab  ^ \]_`ab1Nonecd!efgh!!cd!efgh2None "#$%&'()*+, "#$%&'()*+, "#$%&'()*+,"#$%&'()*+,3None----4Noneij.klmno..ij.klmno5Nonep#Convert a string to pointfree form qrst/upvw// qrst/upvw6None0xyz{|}~000xyz{|}~7None11118None calculates desired4 indentation and return pretty-printed declarations E the indentation calculations are still pretty much rough guesswork.  i'Cll have to figure out a way to do some _reliable_ pretty-printing! 22229None 333 3:None 444 4;NoneThe possesive form of a name, x's 5555<None6666=NoneGFind the first misspelled word in the input line, and return plausible  output. /Return a list of possible spellings for a word  f% is a word to check the spelling of. 7777>None8888?None 6The state. A map of (times we last told this nick they've got messages, the  messages themselves) ,The Note datatype. Fields self-explanatory. Was it tell or #ask that was the original command? 2Take a note and the current time, then display it ;Is it less than a day since we last reminded this nick they've got messages? Add a note to the NoticeBoard  Return a user's notes, or Nothing if they don' t have any  Clear a user' s messages. Give a user their messages  Execute a tell or  ask command. 'Remind a user that they have messages. 9999@None>Fetch a page via HTTP and return its body as a list of lines. )Return a list of comma-separated values.  Quotes allowed in CSV if it'"s the first character of a field. Read a value from a string. ::::ANonePrint todo list Pretty print todo list Add new entry to list Delete an entry from the list ;;;;BNone is like % except that it ditches the Maybe in 4 favor of just yelling at the user when things don't work out as planned. <<< <CNoneD is a smart constructor that inserts parens when the first argument  is an infix application. =     == =     DNone>>>>ENone? !"#$%&'()*+??? !"#$%&'()*+FNone ,4The string that I prepend to the quoted page title. -&Fetch the title of the specified URL. . base url for fetching tiny urls /&Fetch the title of the specified URL. 0%Tries to find the start of a tinyurl 1?List of strings that, if present in a contextual message, will B prevent the looking up of titles. This list can be used to stop B responses to lisppaste for example. Another important use is to @ another lambdabot looking up a url title that contains another B url in it (infinite loop). Ideally, this list could be added to . by an admin via a privileged command (TODO). 2>Suffixes that should be stripped off when identifying URLs in ? contextual messages. These strings may be punctuation in the > current sentence vs part of a URL. Included here is the NUL  character as well. 37Searches a string for an embeddded URL and returns it. 4=Utility function to remove potential suffixes from a string. E Note, once a suffix is found, it is stripped and returned, no other * suffixes are searched for at that point. 5AUtility function to check of any of the Strings in the specified $ list are substrings of the String. @6,-./012345@@ @6,-./012345GNoneAAAAHNone 789:B;<=>BB78:9B;<=>INone?@ACBCDECC?@ACBCDEJNoneFGDHIJDDFGDHIJKNoneKWhat does the bot respond to? LMENOPQRSTUVWXYZK[\EELMENOPQRSTUVWXYZK[\LNone]F^_FF]F^_MNone`HShow a number, padded to the left with zeroes up to the specified width aShow a DateStamp. b UTCTime -> DateStamp conversion c*Cleans up after the module (closes files) d.Fetch a channel from the internal map. Uses LB's fail if not found. e&Put a DateStamp and a Handle. Used by f and  g. f!Open a file to write the log to. g4Close and re-open a log file, and update the state. h8Initialise the channel state (if it not already inited) i2Ensure that the log is correctly initialised etc. j&Log a string. Main logging workhorse. kWhen somebody joins. lWhen somebody quits. mWhen somebody changes his/ her name. K TODO: We should only do this for channels that the user is currently on. nWhen somebody speaks. !opqrstuvwxyz{G`Width to fill to Number to show Padded string |abcd}~efghijklmnGGosrqptuvwxyz{G`|abcd}~efghijklmnNNoneHHHHONone ?extract channels from message as packed, lower cased, strings. JCallback for when somebody joins. If it is not the bot that joins, record M that we have a new user in our state tree and that we have never seen the  user speaking. 7Update the state to reflect the bot leaving channel(s) when somebody parts when somebody quits when somebody changes his/ her name when the bot joins a channel -when somebody speaks, update their clocktime DCallbacks are only allowed to use a limited knowledge of the world.  : is (up to trivial isomorphism) a monad morphism from the  restricted  'HReaderT (IRC.Message, ClockTime, Nick) (StateT SeenState (Error String))'  to the  'ReaderT IRC.Message (Seen IRC)'  monad. IIIIPNone JJJ Jdefdeghijhikhilhimhinhiohiphiqhirstuvwxyz{|}~                !"#$%&'(())*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeefge e!e"e#e$e%e&h&i&e'e(e(j)e*e+e,e-e.e/e0e1e2k2l2m2n2o2p2e2q2r2s2t3e4e5e6e7e8e9e:e;e<e=e>e?e@eAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQuQuQvQwQxQyQzQ{Q|Q}Q~QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRSSSSSSSSSSSSSSSSTTTT T T T T TTTTTTTTTTTTTTTTTTT T!T"T#T$U%U&U'U(U)U*U+U,U-U.U/U0U1U2U3U4U5U6U7U89:;9:<V=V>V?V<V@VAVBVCVDVEVFVVGVHVIVVVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVcVdVefghfgifgjfgkfglfgmfnfnofpqfprfgsfgtfpufpvfnwfnxfnyfnzf{|f{}fp~fpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpffWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZ Z Z Z Z ZZZZZZZZZZZZZZZZZZZZ Z!Z"Z#Z$ZZ%Z&Z'Z(Z)Z*[+[,[,[-[.[/[0[1[2[3[3[4[5[6[7[8[9[:[;[<[=[>[?[@[A[B\f\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T]U]V]W]@]X]Y]Z][]\]]]^]_]`]a]b]c]]defghijhikhilhimhinhiohiphiqhirhishithiuhivhiwhixhixhiyhizhi{hi|hi}hi~hihihihihihihihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh       !"#$%&'(^)^*^+^,^-^.^/^0^1^2^3456789:;<_=_>_?_@_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`[`\`]`^`_```a`b`c`d`e`f`gahaiajakalamanaoap  q r s t u v w x y z {b|b}b~bbbb       fg    cccccccccc+tLO               !!"""""### #<#!#"###$#%#&#'#(#)#*#+#,#-#.$/$0$1$2$3$4$5$6%7%8%9&:&:&;&;&<&='>'?(@(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/[0\0]0^0_0`0a0b1c1d1e1f1g1h4i4j4k4l4m4n4o5p5q5r5s5t5u5v5w6x6y6z6{6|6}6~6666G6?66666666i677777777777777777777788899999999::::::M:::;;;;;<<<============.==>>\>]>>>????????????????????@@@@@@@@@@@@@AAAAAABBBBBBBBBBBBBBCCCCCCCUCCCDDEEEEEEEEEEEE E E E E EEEEEEEEEFFFFFFFFFFFHH H!H"H#H$H%H&I'I(I)IeII*I+J,J-JJ.J/K0KK1K2K3K4K5K6K7K8K9K:K;K<K=K>K?K@LALBLCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM[M\M]M^MM_M`MaMbNNcNdOeOOOfOPOgOQOhOROiOjOkOlOmOnOoOpOqPrPsPtPuPvPwPxPyPzP{| lambdabot-4.3Lambdabot.MainLambdabot.LoggingLambdabot.Util.SignalsLambdabot.Util.ParserLambdabot.Plugin.Check.ShowQLambdabot.Plugin.Eval.TrustedLambdabot.Util.ProcessLambdabot.Util.SerialLambdabot.Compat.AltTimeLambdabot.ConfigLambdabot.UtilLambdabot.NickLambdabot.OutputFilterLambdabot.Compat.FreenodeNickLambdabot.Compat.PackedNickLambdabot.MonadLambdabot.MessageLambdabot.Config.Core Lambdabot.IRCLambdabot.CommandLambdabot.ModuleLambdabot.ChanNameLambdabot.FileLambdabot.StateLambdabot.NickEqLambdabot.Util.Browser LambdabotLambdabot.PluginLambdabot.Plugin.BFLambdabot.Plugin.EvalLambdabot.Plugin.CheckLambdabot.Plugin.ComposeLambdabot.Plugin.DiceLambdabot.Plugin.DictLambdabot.Plugin.DjinnLambdabot.Plugin.DummyLambdabot.Plugin.EliteLambdabot.Plugin.ErrorLambdabot.Plugin.FilterLambdabot.Plugin.TypeLambdabot.Plugin.FreeLambdabot.Plugin.FreshLambdabot.Plugin.HaddockLambdabot.Plugin.HelloLambdabot.Plugin.HelpLambdabot.Plugin.HoogleLambdabot.Plugin.InstancesLambdabot.Plugin.IRCLambdabot.Plugin.KarmaLambdabot.Plugin.NumberwangLambdabot.Plugin.OEISLambdabot.Plugin.OfflineRCLambdabot.Plugin.PlLambdabot.Plugin.PointfulLambdabot.Plugin.PollLambdabot.Plugin.PrettyLambdabot.Plugin.QuoteLambdabot.Plugin.SearchLambdabot.Plugin.SlapLambdabot.Plugin.SourceLambdabot.Plugin.SpellLambdabot.Plugin.StatsLambdabot.Plugin.TellLambdabot.Plugin.TickerLambdabot.Plugin.TodoLambdabot.Plugin.TopicLambdabot.Plugin.UndoLambdabot.Plugin.UnlambdaLambdabot.Plugin.UnMtlLambdabot.Plugin.UrlLambdabot.Plugin.VersionLambdabot.Plugin.VixenLambdabot.Plugin.WhereLambdabot.Plugin.ActivityLambdabot.Plugin.BaseLambdabot.Plugin.LocaltimeLambdabot.Plugin.LogLambdabot.Plugin.MoreLambdabot.Plugin.SeenLambdabot.Plugin.SystemLambdabot.Plugin.Free.ParseLambdabot.Plugin.Free.UtilLambdabot.Plugin.Free.TypeLambdabot.Plugin.Free.ExprLambdabot.Plugin.Free.TheoremLambdabot.Plugin.Pl.CommonLambdabot.Plugin.Pl.ParserLambdabot.Plugin.Pl.TransformLambdabot.Plugin.Pl.NamesLambdabot.Plugin.Pl.RuleLib!Lambdabot.Plugin.Free.FreeTheorem Lambdabot.Plugin.Dummy.DocAssocs Lambdabot.Plugin.Dict.DictLookupPaths_lambdabot!Lambdabot.Plugin.Pl.PrettyPrinterLambdabot.Plugin.Pl.RulesLambdabot.Plugin.Pl.OptimizeLambdabot.Plugin.Seen.StopWatch Lambdabot.Plugin.Seen.UserStatusdependent-sum-0.2.0.1Data.Dependent.SumDSum:=>hslogger-1.2.1 System.LogDEBUGINFONOTICEWARNINGERRORCRITICALALERT EMERGENCYPriority unix-2.6.0.1System.Posix.SignalsSignal withParsedprettyPrintInLine myquickcheckRecInRoutRMuInoutdescribeSequencerunSignalExceptionircSignalMessagewithIrcSignalCatchPackable readPacked showPackedSerial serialize deserializereadOnly stdSerial mapSerialreadMmapPackedSerialmapListPackedSerialassocListPackedSerialTimeDiff ClockTime noTimeDiff getClockTimediffClockTimesaddToClockTimetimeDiffPretty MonadConfig getConfigConfiggetConfigDefault mergeConfigconfigconfigWithMergesplitFirstWordlimitStr listToStrrandom dropSpace dropSpaceEnd showCleandropNL expandTabioarePrefixesWithSpaceOf arePrefixesOfinsult confirmationNicknTagnNamefmtNick parseNick OutputFilter textwidth cleanOutputlineify checkRecip FreenodeNickgetFreenodeNickfreenodeNickMapSerial PackedNickpackNick unpackNickLBMessageservernickfullNamechannels lambdabotName MonadLogginggetCurrentLoggerlogMdebugMinfoMnoticeMwarningMerrorM criticalMalertM emergencyMcommandPrefixesdisabledCommands evalPrefixes onStartupCmds outputDirproxyreplaceRootLoggerlbRootLoggerPathconsoleLogHandleconsoleLogLevelconsoleLogFormat aspellBinarybfBinary djinnBinary ghcBinary ghciBinary hoogleBinary muevalBinaryunlambdaBinarytrustedPackagesuncaughtExceptionHandler IrcMessage ircMsgServer ircMsgLBName ircMsgPrefix ircMsgCommand ircMsgParams joinChannel partChannelgetTopicsetTopicprivmsgquit timeReply errShowMsgusersetNickCommandcmdNamealiases privilegedhelpprocessCmdcmdNamescommand runCommandexecCmd getTarget getCmdNamesaywithMsgreadNickshowNick getServer getSendergetLambdabotNameModuleT runModuleTModulemoduleSerializemoduleDefState moduleSticky moduleCmds moduleInit moduleExit contextual newModulegetRef getModuleName bindModule0 bindModule1 bindModule2ChanNamemkCNgetCNMonadLBlbrunLB IRCRWState ircServerMapircPrivilegedUsersircIgnoredUsers ircChannels ircModules ircCallbacksircOutputFilters ircCommandsircStayConnected CommandRef ModuleRefCallback IRCRState initRoStatereportInitDone waitForInit waitForQuit initRwState addServer remServersendreceivedevalLB withModule withCommandwithAllModules findLBFilefindOrCreateLBFile GlobalPrivate MonadLBStateLBStatewithMSreadMSmodifyMSwriteMSmkGlobalPrivatewithPSreadPSwithGSreadGSwritePSwriteGSflushModuleStatewriteGlobalStatereadGlobalStatePolynick nickMatches readPolynick showPolynickmononickToPolynicklookupMononickMapbrowseLB urlPageTitle ircLoadModuleircUnloadModuleircSignalConnectircInstallOutputFilter checkPrivs checkIgnoreircGetChannelsircQuit ircReconnect ircPrivmsg ircPrivmsg'ModuleslambdabotVersion lambdabotMainmoduleslim80ios80 theModuleextseval failOnLoad errorOnLoad query_ghciNumberwangStateStatenextCmdnextConcmdDistconDistnumbers doNumberwang withStatecheckNumberwangParseSparse ParseResult ParseError ParseSuccessTokenTokErrorIdUscoreIdWhereIdTypeIdThenIdOf IdNewtypeIdModuleIdLet IdInstanceIdInfixrIdInfixlIdInfixIdInIdImportIdIfIdForallIdElseIdDo IdDeriving IdDefaultIdDataIdClassIdCase OpImpliesOpTildeOpAtOpArrow OpBackArrowOpPipe OpBackslashOpEquals OpColonColonOpColonOpDotDot CloseBrace OpenBrace BackQuote CloseBracket OpenBracket SemicolonComma CloseParen OpenParenQConSymQVarSymQConIdQVarId peekTokengetTokenmatch ascSymbollexer$fMonadPlusParseS $fMonadParseSPrettyprettyPpretty prettyParenprettyParenIndentpretty-1.1.1.0Text.PrettyPrint.HughesPJMode OneLineModeLeftMode ZigZagModePageModeStylemode lineLengthribbonsPerLinestyle fullRender renderStylerenderfirstfsepfcatcatsep<+><>$+$$$ punctuatehangnestvcathsephcat reduceDocbracesbracketsparens doubleQuotesquotesrationaldoublefloatintegerintrbracelbracerbracklbrackrparenlparenequalsspacecoloncommasemiisEmptyempty zeroWidthText sizedTextptexttextcharDocChrStrPStr TextDetailsTypeTyVarTyConsTyTupleTyArrTyForallTyName precTYAPP precARROWprettyTs parseType parseType' normaliseTypereadType $fPrettyTypeExprCtxECTyAppECAppRECAppLECDotBuiltinBArr BMapTupleBProjBIdBMapExprETyAppEAppEVarOpEBuiltinEVarFixityFRFNFLVar varInExpr leftVarOfExpr exprSubstapplySimplifierExpr unzipExprvarInCtxprecAPP$fPrettyBuiltin $fPrettyExprTheoremThAndThEqual ThImpliesThForall precIMPLIESprecAND prettyTheorem prettyForall varInTheoremapplySimplifierTheorempeepholeSimplifyTheorempeepholeSimplifyTheorem'peepholeSimplifyExprpeepholeSimplifyExpr' foldEquality tryCurryingtheoremSimplify theoremSubst$fPrettyTheoremhaskell-src-exts-1.13.5Language.Haskell.Exts.SyntaxExpDeclTopLevelTLETLDDefinedeclNamedeclExprPatternPTuplePConsPVarLetAppLambdaInfPref mapTopLevelgetExprsizeExprcompflip'id'const'scombconsnilfix'if'makeListgetListbtshiftmaxPrecminPrec operatorsopchars reservedOpsopFMlookupOp lookupFix $fOrdFixity $fEqFixitybaseGHC.Baseassertfail>>=>>fmapreturn Control.Arrow||| Control.MonadguardliftMMonadFunctor MonadPlusfoldM***&&&second+++ Data.List minimumBy interspersemfilterapliftM5liftM4liftM3liftM2unlesswhen replicateM_ replicateMfoldM_ zipWithM_zipWithM mapAndUnzipMjoinvoidforever<=<>=>msumforM_forMfilterMmapM_mapM sequence_sequence=<<mplusmzero Data.MaybefromJustisJust parsec-3.1.3Text.Parsec.Expr AssocNone AssocLeft AssocRightAssoctpsymbol modIdentifieratomicreserved charLiteral stringLiteraltableparseOppatternlambdavarlisttuple unaryNegation rightSectionmyParserexprdeclletbindifexprterm applicationendsIninputparsePF postprocessoccursPfreeInisFreeIn dependsOnunLet alphaRename transform transform'EnvtuplePMExprHoleMAppQuoteidEflipEconstEcompEsEfixEbindEextEreturnEconsEnilEappendEfoldrEfoldlEfstEsndEdollarEuncurryEcurryEheadEtailEcommaEfoldl1EequalsEnequalsEnotEplusEmultEzeroEoneElengthEsumEproductEconcatE concatMapEjoinEmapEfmapEfmapIE subtractEminusEliftMEliftM2EapEseqMEzipEzipWithEcrossEfirstEsecondEandEorEallEanyEacRewriteholesridHardIfOptThenOrElseOrUpDownCRRRRmyFire uniqueArrayfire' matchWith transformMhasHole getVariants' getVariantsrrListrrrr1rr2rr0downupExprArrRewriteC getRewrite RewriteRulenub'fire fromMExpr$fRewriteC(->)$fRewriteCMExprRNRnStgammaunique uniquelistuniquefnTyEnvMyMonMyState myVSupplymakeVar extractTypesfreeTheoremStr freeTheoreminitRnSt freshNamefreshFunctionName freshListNameinsertRnlookupRnrenamernExprnTy freeTheorem'stmmtlfglqchunitparsecunix haskelinenetworkthhscabalhglglutx11opengl containers docAssocs LookupResultDictName DictCommandQuitDictConnection QueryConfigQChostportsimpleDictLookupopenDictConnectioncloseDictConnection queryDictreadResponseLine sendCommand hSendLine myquickcheck'testsdoneQuickCheck-2.6Test.QuickCheck.TestverboseCheckWithResultverboseCheckResultverboseCheckWith verboseCheckquickCheckWithResultquickCheckResultquickCheckWith quickCheckstdArgschattymaxSizemaxDiscardRatio maxSuccessreplayArgsoutputlabelsnumTestsSuccessGaveUp interruptedreasonusedSizeusedSeed numShrinksFailureNoExpectedFailureResultTest.QuickCheck.Propertydisjoin.||.conjoin.&&..&. forAllShrinkforAllwithin==>coverclassifycollectlabelonce expectFailureverbose whenFail'whenFail printTestCase shrinkingmapSizeProperty exhaustivepropertyTestablePropTest.QuickCheck.ModifiersBlindFixed getOrderedOrdered OrderedList getNonEmptyNonEmpty NonEmptyList getPositivePositive getNonZeroNonZerogetNonNegative NonNegativeShrink2Smart Shrinking shrinkState shrinkInit ShrinkStateTest.QuickCheck.Arbitrary orderedListvectorcoarbitraryEnumcoarbitraryShowcoarbitraryRealcoarbitraryIntegral><shrinkRealFracshrinkIntegral shrinkNothingarbitrarySizedBoundedIntegralarbitraryBoundedEnumarbitraryBoundedRandomarbitraryBoundedIntegralarbitrarySizedFractionalarbitrarySizedIntegralshrink arbitrary Arbitrary coarbitrary CoArbitraryTest.QuickCheck.GenvectorOflistOf1listOfgrowingElementselements frequencyoneof suchThatMaybesuchThatsamplesample'promotechooseresizesizedvariantGenTest.QuickCheck.TextrangesMkStrTest.QuickCheck.Exceptiondiscard oeis-0.3.1 Math.OEISlookupSequence_IOlookupSequenceextendSequence_IOextendSequencelookupSequenceByID_IOlookupSequenceByIDgetSequenceByID_IOgetSequenceByIDsearchSequence_IO lookupOEIS SequenceData MathematicaMapleOtherLanguageBaseBrefChangedCofrConsCoreDeadDumbDupeEasyEigenFiniFracFullMoreMultNewNiceNonnObscSignTabfTablUnedUnknWalkWordKeywordcommentskeywordsexamples extensionsprogramsfirstGT1offsetauthorxrefsformulaslinks references description signedData sequenceData catalogNumsOEIS OEISSequencereleaseSignals withHandlerwithHandlerListircSignalsToCatchircSignalHandler catchLock$fExceptionSignalExceptioncatchIOversionbindirlibdirdatadir libexecdir getBinDir getLibDir getDataDir getLibexecDirgetDataFileNamecontainers-0.5.0.0 Data.Map.BaseMap$fPackableMap1gzipgunzip $fPackableMap $fPackable[]$fPackableMap0SExprEnumTupleList RightSection LeftSectionSInfixSAppSLetSLambdaSVar toSExprHeadtoSExprgetHead isOperator getInfName getPrefName $fEqAssoc $fShowPattern $fShowSExpr $fShowExpr$fShowTopLevel $fShowDeclUnaryUABinaryBA collapseLists evalBinary evalUnaryassocRassocLassoc commutative simplifies onceRewritesrules assocLOps assocROpsassocOpscommutativeOps unaryBuiltinsbinaryBuiltins sizeExpr'optimizesteprewriterewSizecut toMonadPlusrewDeepepoch toOldTime fromOldTime toOldTimeDifffromOldTimeDiff$fBinaryTimeDiff$fBinaryClockTime$fReadTimeDiff$fShowTimeDiff$fReadClockTime$fShowClockTime StopWatchRunningStopped zeroWatch startWatch stopWatch$fBinaryStopWatchcast1$fMonadConfigStateT$fMonadConfigWriterT$fMonadConfigReaderT$fGCompareConfig $fGEqConfigStringcanonicalizeName $fOrdNick$fEqNickmlinesupckStrpckStr$fReadFreenodeNick$fShowFreenodeNick UserStatusNewNick WasPresent NotPresentPresent LastSpokeChannelupdateJupdateNP$fBinaryUserStatusgetCurrentLoggerName$fMonadLoggingIOCOMMANDPREFIXESDISABLEDCOMMANDS EVALPREFIXES ONSTARTUPCMDS OUTPUTDIRPROXYREPLACEROOTLOGGERLBROOTLOGGERPATHCONSOLELOGHANDLECONSOLELOGLEVELCONSOLELOGFORMAT ASPELLBINARYBFBINARY DJINNBINARY GHCBINARY GHCIBINARY HOOGLEBINARY MUEVALBINARYUNLAMBDABINARYTRUSTEDPACKAGESUNCAUGHTEXCEPTIONHANDLER$fGEqCOMMANDPREFIXES$fGEqDISABLEDCOMMANDS$fGEqEVALPREFIXES$fGEqONSTARTUPCMDS$fGEqOUTPUTDIR $fGEqPROXY$fGEqREPLACEROOTLOGGER$fGEqLBROOTLOGGERPATH$fGEqCONSOLELOGHANDLE$fGEqCONSOLELOGLEVEL$fGEqCONSOLELOGFORMAT$fGEqASPELLBINARY $fGEqBFBINARY$fGEqDJINNBINARY$fGEqGHCBINARY$fGEqGHCIBINARY$fGEqHOOGLEBINARY$fGEqMUEVALBINARY trustedPkgs$fGEqUNLAMBDABINARYdefaultIrcHandler$fGEqTRUSTEDPACKAGES$fGEqUNCAUGHTEXCEPTIONHANDLER mkMessage$fMessageIrcMessageunCmdCmdArgs_messagetarget invokedAs$fMonadLoggingCmd$fMonadConfigCmd$fMonadBaseControlbCmd$fMonadTransControlCmd$fMonadTransCmd$fMonadBasebCmd $fMonadIOCmd $fMonadCmd$fApplicativeCmd $fFunctorCmd$fMonadBaseControlbModuleT$fMonadTransControlModuleT$fMonadBasebModuleT$fMonadLoggingModuleTircInitDoneMVar ircQuitMVar ircConfigaskLB$fMonadLoggingLB$fMonadConfigLB$fMonadStateIRCRWStateLB $fMonadLBCmd$fMonadLBModuleT $fMonadLBLB$fMonadBaseControlIOLB$fMonadBaseIOLB lambdabot lookLocallylookHomeisHomemkdirL cpDataToHomestateDirmaybeFileExists withMWriteraccessPSGPglobalprivate$fMonadLBStateCmd$fMonadLBStateModuleTmaxTitleLength rawPageTitle extractTitle$fMonadRandomLB0 setupLoggingmainLoopscrubcleanitargsisEval dropPrefixdefine mergeModulesmoduleProblemsmungeresetcheckcomposelookupP parseBracket isCommandArgCompose evalBracketevalExpr parseCommandparseInlineCommand parseStringaddArgDicedoDice dictTablegetHelp parseTermsDict dictNamesDjinnEnv getDjinnEnvdjinnDjinn getSavedEnv getUserEnv rejectingCmdsdjinnCmd djinnAddCmd djinnEnvCmd djinnNamesCmd djinnClrCmd djinnDelCmd djinnVerCmdgetDjinnVersiontryDjinnclean_ dummyHelpdummylst lookupWiki lookupHackage googlePrefix lookupGoogle docPrefix lookupPackage translateLine translateruleList FAILONLOAD ERRORONLOAD$fGEqFAILONLOAD$fGEqERRORONLOADfilters runFilterrunit theCommandsignature_regex stripCommentsgoextract_signaturesFreshfreshasNameHaddock HaddockState doHaddockstripPs moduleHelpdoHelphooglecutoff eitherToMaybe instanceP parseInstance getInstancesstdMdlsfetchInstancesfetchInstancesImportingfetchInstances' ModuleName ClassNameInstance encodeMessage decodeMessageIRC ircSignOnonline readerLoopsendMsgKarma KarmaStatedoCmd tellKarma listKarma changeKarma OfflineRCOfflineRCStatefeed handleMsgreplLooplockRCunlockRCpfPlPlState firstTimeout maxTimeoutresoptimizeTopLevel optimizeIOextT'unkLoc stabilizenamesInpVarsInsuccName succAlpha optimizeD optimizeRhs optimizeEuncomb' combinatorsrecognizedNamescombinatorModule uncombOnceuncomb optimizeOncepointfulVote VoteWriter VoteStatePollPollName CandidateCountnewPoll appendPoll voteOnPoll voteSerialprocess_processCommand listPollsshowPolladdPoll addChoicevote showResult removePoll closePolldoPretty prettyCmdQuotesKeyfortune runRemember runForgetrunQuotesearchengines googleHeadersnormalizeOptionsmakeUri googleUri searchCmddoHTTPextractConversion possesiveFormSlapslap slapRandomslapListfetchhelpStr spellingNazispellSpelldoSpellspellAllnazionoff spellWithArgsclean'clean''Statsprefixreportcounts NoticeBoardNoteNoteTypeshowNote needToRemind writeDown getMessages clearMessages doMessagesdoTelldoRemindTell noteSender noteContentsnoteTimenoteTypeAskverbgetPagecsv readMaybeAccumValTicker tickerCmd tickerUrl extractQuotebidsCmdbidsUrl getBidAsks accumOptioncalcBidsgetTodosayTodoaddTododelTodoTodo TodoState withTopic lookupTopic TopicCommand_commandAliases _commandHelp_invokeCommand TopicActionTopiccommands installTopic reciteTopic alterTopicalterListTopicappfindVarundo irrefutableinfixedpvardo'PPTypePMonadpResultpErrorpFunlift0lift1lift2lift3lift4lift5mkPfun-->cuconforall_types mtlParser mtlParser' $fMonadPMonadurlTitlePrompt fetchTitletinyurl fetchTinyfindTinyignoredStringsignoredUrlSuffixes containsUrl stripSuffixesareSubstringsOfmbSayRChoiceWTreeNodeLeafvixenrandomW mkResponses $fBinaryWTreeWhere WhereWriter WhereStategetWhere updateWhereActivity ActivityStateactivityactivityFilter doPRIVMSG' BaseStatedoIGNOREdoPINGdoNOTICEdoJOINdoPARTdoNICKdoMODEdoTOPIC doRPL_WELCOMEdoQUIT doRPL_BOUNCE doRPL_TOPIC doPRIVMSGclosests maybeCommandTimeMap doLocalTimedoReply showWidth dateToString dateStamp cleanLogState getChannel putHdlAndDSopenChannelFilereopenChannelMaybeinitChannelMaybe withValidLog logStringjoinCBpartCBnickCBmsgCBEventRenickPartedJoinedSaidLogLogState ChanStateCS chanHandlechanDate DateStamp timeStampgetDate getHandle $fShowEvent MoreState moreFiltermsgChansbotPartquitCB joinChanCB withSeenFMSeenMaxMapSeenMap SeenStatelcNickdoUsersdoSeen getAnswerSystem SystemStatedoListdoEchodoAdmindoIgnorelistKeys getUptime toggleNick listModule