}      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab c d e f g h i j k l m n o p q r s t u v w x y z { | #4 joins lists with the given glue elements. Example: > concatWith ", " ["one","two","three"] ===> "one, two, three" DSplit a list into pieces that were held together by glue. Example: 9 split ", " "one, two, three" ===> ["one","two","three"] ;Break off the first piece of a list held together by glue, E leaving the glue attached to the remainder of the list. Example: " Like break, but works with a [a] match. A breakOnGlue ", " "one, two, three" ===> ("one", ", two, three") =Reverse cons. Add an element to the back of a list. Example:  snoc 3 [2, 1] ===> [2, 1, 3] : takes 2 strings, called the prefix and data. A necessary  precondition is that  , Data.List.isPrefixOf prefix data ===> True ; returns a string based on data, where the prefix has been < removed as well as any excess space characters. Example: 4 after "This is" "This is a string" ===> "a string" Break a String into it'3s first word, and the rest of the string. Example: 5 split_first_word "A fine day" ===> ("A", "fine day) )Get the first word of a string. Example: - first_word "This is a fine day" ===> "This" : checks if we have the verbose flag turned on. If we have 5 it outputs the String given. Else, it is a no-op.   is a version of  that adds a newline to the end  of the string outputted.  , transforms the string given to lower case. 7 Example: lowerCaseString "MiXeDCaSe" ===> "mixedcase"  , transforms the string given to upper case. 7 Example: upperCaseString "MiXeDcaSe" ===> "MIXEDCASE"  4 forces the first char of a string to be lowercase. 9 if the string is empty, the empty string is returned.  4 forces the first char of a string to be uppercase. 9 if the string is empty, the empty string is returned. 9 puts a string into quotes but does not escape quotes in  the string itself. :Form a list of terms using a single conjunction. Example: 3 listToStr "and" ["a", "b", "c"] ===> "a, b and c" Like } 9, but take a function to use in case of a non-null list.  I.e. "listToMaybe = listToMaybeWith head  #listToMaybeAll = listToMaybeWith id~getStdRandom has a bug when f* returns bottom, we strictly evaluate the ) new generator before calling setStdGen. 9 takes as input a list and a random number generator. It H then returns a random element from the list, paired with the altered  state of the RNG  is the specialization of  to the standard I RNG embedded within the IO monad. The advantage of using this is that J you use the Operating Systems provided RNG instead of rolling your own 1 and the state of the RNG is hidden, so one don't need to pass it  explicitly. 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  takes a Char x and returns [x] unless the Char is '\CR' in  case [] is returned. +show a list without heavyweight formatting untab an string BFind string in list with smallest levenshtein distance from first D argument, return the string and the distance from pat it is. Will E return the alphabetically first match if there are multiple matches " (this may not be desirable, e.g. mroe -> moo, not more $Levenshtein edit-distance algorithm I Translated from an Erlang version by Fredrik Svensson and Adam Lindberg %Thread-safe modification of an MVar. run an action with a timeout " />, <. : join two path components ,Data.Maybe.mapMaybe for Maps -This makes way more sense than  insertWith because we don' t need to & remember the order of arguments of f. 03Two functions that really should be in Data.Either 1>Another useful Either function to easily get out of an Either 5HShow a number, padded to the left with zeroes up to the specified width 9  !"#$%&'()*+,-./0123456789 65 *34!"#$%&'()+,-./012789  !"#$%&'()*+,-./0123456789Wrapping 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. =FPretty-print a TimeDiff. Both positive and negative Timediffs produce  the same output. 14d 17h 8m 53s 9:;<=9:;<=9:;<=3>?@ABC>?@ACB>?@ABCdons@galois.comDEFGEGDFDEFGIOpopen lets you run a binary with specified arguments. This bypasses the shell. HIIHHI ?A web request monad transformer for keeping hold of the proxy. J4The string that I prepend to the quoted page title. ?Limit the maximum title length to prevent jokers from spamming 0 the channel with specially crafted HTML pages. L;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 J). MBFetches 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 L. NBFetch the contents of a URL following HTTP redirects. It returns E a list of strings comprising the server response which includes the * status line, response headers, and body. 8Fetch the contents of a URL returning a list of strings @ comprising the server response which includes the status line,  response headers, and body. >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. )What is the type of the server response? O=Retrieve the specified header from the server response being D careful to strip the trailing carriage return. I swiped this code B from Search.hs, but had to modify it because it was not properly E stripping off the trailing CR (must not have manifested itself as a E bug in that code; however, parseURI will fail against CR-terminated  strings. JKLMNONOMLJKJKLMNOPP; is an error catcher for the Maybe type. As input is given L a deciding function, a monad and a handler. When an error is caught, the H decider is executed to decide if the error should be handled or not. > Then the handler is eventually called to handle the error. QQ is the flipped version of . RR is the flipped version of P. SS3 uses Either to explicitly define the outcome of a @ monadic operation. An error is caught and placed into Right, 5 whereas successful operation is placed into Left. TT is the P version of S B given is a decider guarding whether or not the error should be @ handled. The handler will always Right and no errors are Left'ed E through. If the decider returns Nothing, the error will be thrown  further up. UU7 is a monadic version of the classic UNWIND-PROTECT of G lisp fame. Given parameters m and after (both monads) we proceed to F work on m. If an error is caught, we execute the out-guard, after, F before rethrowing the error. If m does not fail, after is executed # and the value of m is returned. VV4 is the monadic version of DYNAMIC-WIND from Scheme E fame. Parameters are: before, after and m. before is the in-guard F being executed before m. after is the out-guard and protects fails  of the m. F In the Haskell world, this scheme is called a bracket and is often & seen employed to manage resources. WW is the non-bound version of V. The 3 naming scheme follows usual Haskell convention. PQRSTUVWPQRSTUVWPQRSTUVW_Release all signal handlers a3Register signal handlers to catch external signals XYZ[\]^_`a XYZ[\]^_`a XYYZ[\]^_`a lDefault  `instance' for a Serial m 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. nSerialize a list of as. As for the  mapSerializer, its output is line-wise. pp 4 behaves like read, but catches failure in a monad. ( this allocates a 20-30 M on startup... bcdefghijklmnopqrsefghlmnqsrpbcdokijbcdcdefghfghijklmnopqrs tuvwxvwxtutuuvwx yz{|yz{|yz{| !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkklmnopqrs t u v w w x y z { | } ~   lambdabot-utils-4.2Lambdabot.UtilLambdabot.AltTimeLambdabot.MiniHTTPLambdabot.RegexLambdabot.Process Lambdabot.UrlLambdabot.ErrorLambdabot.SignalsLambdabot.SerialLambdabot.FixPrecedenceLambdabot.Parserbase Data.Maybe mtl-1.1.0.2Control.Monad.Error.Classcontainers-0.2.0.1Data.MapLambdabot.Pointful concatWithsplitsplit2 breakOnGluesnocaftersplitFirstWord firstWorddebugStr debugStrLnlowerCaseStringupperCaseStringlowerizeupperizequote listToStrlistToMaybeWithlistToMaybeAll getRandItemstdGetRandItem randomElemrandom dropSpace dropSpaceEndclean showCleandropNL expandTabclosestclosests withMWriterparIOtimeout<.><+><><$>basenamedirname dropSuffixjoinPathchoiceaddList mapMaybeMap insertUpdpprKeysisLeftisRightunEitherioarePrefixesWithSpaceOf arePrefixesOf showWidth timeStampinsult confirmation ClockTime getClockTimediffClockTimesaddToClockTimetimeDiffPrettyProxymkPostreadPage readNBytes urlDecode urlEncoderegex'regexmatches'matchesrunpopenurlTitlePrompt runWebReq urlPageTitle rawPageTitle getHtmlPage getHeadercatchErrorJust handleErrorhandleErrorJusttryError tryErrorJust finallyError bracketError bracketError_SignalException withHandlerwithHandlerListircSignalsToCatchircSignalMessageircSignalHandlerreleaseSignals catchLockwithIrcSignalCatchPackable readPacked showPackedSerial serialize deserializegzipgunzipreadOnly stdSerial mapSerial listSerialpackedListSerialreadMmapPackedSerialmapListPackedSerialassocListPackedSerial FixPrecedence fixPrecedence withPrecExp withPrecDecl precTable parseExpr parseDecl withParsedprettyPrintInLine listToMaybesafeGetStdRandom levenshteinold-time-1.0.0.2 System.TimeTimeDifftdYeartdMonthtdDaytdHourtdMintdSec tdPicosec noTimeDiff network-2.2.1 Network.URIfragmentquerypathscheme unreservedreserved escapeStringparseabsoluteURInormalizePathSegmentsnormalizeEscape normalizeCase relativeFrom relativeTononStrictRelativeTounEscapeStringescapeURIString escapeURICharisUnescapedInURIisAllowedInURI uriToString isUnreserved isReserved isIPv4address isIPv6address isAbsoluteURIisRelativeReferenceisURIReferenceisURIparseAbsoluteURIparseRelativeReferenceparseURIReferenceparseURInullURI uriFragmenturiQueryuriPath uriAuthority uriSchemeURIuriPort uriRegName uriUserInfoURIAuthregex-base-0.93.1Text.Regex.Base.RegexLike MatchOffset MatchLengthregex-posix-0.94.1Text.Regex.Posix.WrapRegexText.Regex.Posix.ByteString unusedOffsetregexecexecutecompile compNewline compNoSubcompIgnoreCase compExtended execNotEOL execNotBOL execBlank compBlank CompOption ExecOption ReturnCode WrapErrorWebReqmaxTitleLengthgetURIContents extractTitle contentType catchErrorMaphaskell-src-1.0.1.3Language.Haskell.ParseMonadParseOk ParseFailed ParseResultcombinatorModulepointfultestmain