fƄ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ \ ] ^ _ ` 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 { | } ~   >4 joins lists with the given glue elements. Example: > concatWith ", " ["one","two","three"] ===> "one, two, three" Glue to join with Elements to glue together Result: glued-together list DSplit a list into pieces that were held together by glue. Example: 9 split ", " "one, two, three" ===> ["one","two","three"]  Glue that holds pieces together List to break into pieces Result: list of pieces ;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")  Glue that holds pieces together %List from which to break off a piece ,Result: (first piece, glue ++ rest of list) =Reverse cons. Add an element to the back of a list. Example:  snoc 3 [2, 1] ===> [2, 1, 3] Element to be added List to add to Result: List ++ [Element] : 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" Prefix string  Data string =Result: Data string with Prefix string and excess whitespace  removed 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) String to be broken )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 idgetStdRandom 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 $The list to pick a random item from The RNG to use )A pair of the item, and the new RNG seed  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 0This makes way more sense than  insertWith because we don' t need to & remember the order of arguments of f. 1233Two functions that really should be in Data.Either 4>Another useful Either function to easily get out of an Either 5678HShow a number, padded to the left with zeroes up to the specified width Width to fill to Number to show Padded string 9:;9  !"#$%&'()*+,-./0123456789:;9 98 !"#-67$%&'()*+,./012345:;9  !"#$%&'()*+,-./0123456789:;<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. @FPretty-print a TimeDiff. Both positive and negative Timediffs produce  the same output. 14d 17h 8m 53s <=>?@<=>?@<=>?@dons@galois.comABCDABCDBDACABCDEFOpopen lets you run a binary with specified arguments. This bypasses the shell.  | It';ll also terminate (SIGTERM) the spawned process in case of A | exception, this is very important if the timeout for a Plugin D | expires while it is waiting for the result of a looping process.  | It';s fundamental to link the final executable with -threaded. The binary to execute 6A list of arguments to pass to the binary. No need to  space separate them stdin EFFEEFGHIJKL3GHIJKLGHIJLKGHIJKL ?A web request monad transformer for keeping hold of the proxy. M4The 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. NO;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 M). PBFetches 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 O. QBFetch 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? R=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. MNOPQRQRPOMNMNOPQRSS; 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. Decider function Monad Handler function &Result: A monadic operation on type a TT is the flipped version of . Error handler Monad Resulting monad UU is the flipped version of S. Decider Handler Monad Resulting Monad VV3 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. Monad to operate on Returns: Explicit Either type WW is the S version of V 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. Decider Monad Returns: Explicit Either type XX7 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. Monadic operation Guard Returns: A new monad. YY4 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. Before (in-guard) monad 2After (out-guard) operation. Fed output of before ,Monad to work on. Fed with output of before Resulting monad. ZZ is the non-bound version of Y. The 3 naming scheme follows usual Haskell convention. Before (in-guard) After (out-guard) Monad to work on Resulting monad STUVWXYZSTUVWXYZSTUVWXYZ [\]^_`abRelease all signal handlers cd3Register signal handlers to catch external signals [\]^_`abcd [\]^_`abcd [\\]^_`abcd efghijklmnoDefault  `instance' for a Serial p 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. qSerialize a list of as. As for the  mapSerializer, its output is line-wise. rss4 behaves like read, but catches failure in a monad. ( this allocates a 20-30 M on startup... tuv"An instance for Map Packed [Packed]  uses gzip compression efghijklmnopqrstuvhijkopqtvusefgrnlmefgfghijkijklmnopqrstuv wxyz{wxyz{yz{wxwxxyz{ |}~|}~|}~|}~    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi j j k l m n o p q r s t u v v w x y z { | } ~   K             lambdabot-utils-4.2.1Lambdabot.PointfulLambdabot.UtilLambdabot.AltTimeLambdabot.RegexLambdabot.ProcessLambdabot.MiniHTTP Lambdabot.UrlLambdabot.ErrorLambdabot.SignalsLambdabot.SerialLambdabot.FixPrecedenceLambdabot.Parserhaskell-src-1.0.1.4Language.Haskell.ParseMonadParseOk ParseFailed ParseResult concatWithsplitsplit2 breakOnGluesnocaftersplitFirstWord firstWorddebugStr debugStrLnlowerCaseStringupperCaseStringlowerizeupperizequote listToStrlistToMaybeWithlistToMaybeAll getRandItemstdGetRandItem randomElemrandom dropSpace dropSpaceEndclean showCleandropNL expandTabclosestclosests withMWriterparIOtimeout<.><+><><$>basenamedirname dropSuffixjoinPathchoiceaddList mapMaybeMap insertUpdpprKeysisLeftisRightunEitherioarePrefixesWithSpaceOf arePrefixesOf showWidth timeStampinsult confirmation ClockTime getClockTimediffClockTimesaddToClockTimetimeDiffPrettyregex'regexmatches'matchesrunpopenProxymkPostreadPage readNBytes urlDecode urlEncodeurlTitlePrompt 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 withParsedprettyPrintInLinecombinatorModulepointfultestmainbase Data.Maybe listToMaybesafeGetStdRandom levenshteinlvnlvn'difold-time-1.0.0.6 System.TimeTimeDifftdYeartdMonthtdDaytdHourtdMintdSec tdPicosec noTimeDiffregex-base-0.93.2Text.Regex.Base.RegexLike MatchOffset MatchLengthregex-posix-0.94.4Text.Regex.Posix.WrapRegexText.Regex.Posix.ByteString unusedOffsetregexecexecutecompile compNewline compNoSubcompIgnoreCase compExtended execNotEOL execNotBOL execBlank compBlank CompOption ExecOption ReturnCode WrapError authority hGetLinesnetwork-2.2.1.10 Network.URIfragmentquerypathscheme unreservedreserved escapeStringparseabsoluteURInormalizePathSegmentsnormalizeEscape normalizeCase relativeFrom relativeTononStrictRelativeTounEscapeStringescapeURIString escapeURICharisUnescapedInURIisAllowedInURI uriToString isUnreserved isReserved isIPv4address isIPv6address isAbsoluteURIisRelativeReferenceisURIReferenceisURIparseAbsoluteURIparseRelativeReferenceparseURIReferenceparseURInullURI uriFragmenturiQueryuriPath uriAuthority uriSchemeURIuriPort uriRegName uriUserInfoURIAuthWebReqmaxTitleLengthgetURIContents extractTitle contentType mtl-2.0.1.0Control.Monad.Error.Class catchErrorcontainers-0.4.0.0Data.MapMap$fPackableMap1PrecedenceDatafindPrec precWrong nameFromQOp nameFromOp withPrecPatwithPrecPatField withPrecMatch withPrecRhs withPrecGRhs withPrecAlt withPrecGAlts withPrecGAlt withPrecStmt withPrecUpdshowParseErrorextT' optimizeEuncomb' uncombOnceuncomb optimizeOnceoptimize