;I      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde f g h ijklm n o p q r s t u v w x y z { | } ~   Safe-Inferred(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 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  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 % /,  . : join two path components & /,  . : join two path components ' /,  . : join two path components ( /,  . : 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. 23Two functions that really should be in Data.Either 33Two functions that really should be in Data.Either 4>Another useful Either function to easily get out of an Either 8HShow a number, padded to the left with zeroes up to the specified width >Glue to join with Elements to glue together Result: glued-together list  Glue that holds pieces together List to break into pieces Result: list of pieces  Glue that holds pieces together %List from which to break off a piece ,Result: (first piece, glue ++ rest of list) Element to be added List to add to Result: List ++ [Element] Prefix string  Data string =Result: Data string with Prefix string and excess whitespace  removed String to be broken $The list to pick a random item from The RNG to use )A pair of the item, and the new RNG seed  !"#$%&'()*+,-./012345678Width to fill to Number to show Padded string 9:;9  !"#$%&'()*+,-./0123456789:;9 98 !"#-67$%&'()*+,./012345:;>  !"#$%&'()*+,-./0123456789:;NoneFDefault  `instance' for a Serial G 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. HSerialize a list of as. As for the  mapSerializer, its output is line-wise. JJ4 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 <=>?@ABCDEFGHIJKLM<=>?@ABCDEFGHIJKLM?@ABFGHKMLJ<=>IECD<=>?@ABCDEFGHIJKLMdons@galois.comNoneNOPQNOPQOQNPNOPQ Safe-InferredSOpopen 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. RSThe binary to execute 6A list of arguments to pass to the binary. No need to  space separate them stdin RSSRRSNoneTUVWXY6TUVWXYTUVWYXTUVWXYNone ?A web request monad transformer for keeping hold of the proxy. Z4The 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. \;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 Z). ]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 \. ^BFetch 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? _=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. Z[\]^_Z[\]^_^_]\Z[ Z[\]^_None`abcd`abcdbcd`a`abcd NoneefghefghefghefghNoneijklijkljkliijkl  Safe-Inferredmm; 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. nn is the flipped version of . oo is the flipped version of m. pp3 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. qq is the m version of p 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. rr7 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. ss4 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. tt is the non-bound version of s. The 3 naming scheme follows usual Haskell convention. mDecider function Monad Handler function &Result: A monadic operation on type a nError handler Monad Resulting monad oDecider Handler Monad Resulting Monad pMonad to operate on Returns: Explicit Either type qDecider Monad Returns: Explicit Either type rMonadic operation Guard Returns: A new monad. sBefore (in-guard) monad 2After (out-guard) operation. Fed output of before ,Monad to work on. Fed with output of before Resulting monad. tBefore (in-guard) After (out-guard) Monad to work on Resulting monad mnopqrstmnopqrstmnopqrst None|Release all signal handlers ~3Register signal handlers to catch external signals uvwxyz{|}~ uvwxyz{|}~ uvwxyz{|}~ uvwxyz{|}~  Safe-InferredWrapping 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           !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr s t u vwxyz { | } ~                   !"#$%&''(lambdabot-utils-4.2.2Lambdabot.PointfulLambdabot.UtilLambdabot.SerialLambdabot.RegexLambdabot.ProcessLambdabot.MiniHTTP Lambdabot.UrlLambdabot.FixPrecedenceLambdabot.ParserLambdabot.ErrorLambdabot.SignalsLambdabot.AltTimehaskell-src-1.0.1.5Language.Haskell.ParseMonadParseOk ParseFailed ParseResult concatWithsplitsplit2 breakOnGluesnocaftersplitFirstWord firstWorddebugStr debugStrLnlowerCaseStringupperCaseStringlowerizeupperizequote listToStrlistToMaybeWithlistToMaybeAll getRandItemstdGetRandItem randomElemrandom dropSpace dropSpaceEndclean showCleandropNL expandTabclosestclosests withMWriterparIOtimeout<.><+><><$>basenamedirname dropSuffixjoinPathchoiceaddList mapMaybeMap insertUpdpprKeysisLeftisRightunEitherioarePrefixesWithSpaceOf arePrefixesOf showWidth timeStampinsult confirmationPackable readPacked showPackedSerial serialize deserializegzipgunzipreadOnly stdSerial mapSerial listSerialpackedListSerialreadMmapPackedSerialmapListPackedSerialassocListPackedSerialregex'regexmatches'matchesrunpopenProxymkPostreadPage readNBytes urlDecode urlEncodeurlTitlePrompt runWebReq urlPageTitle rawPageTitle getHtmlPage getHeader FixPrecedence fixPrecedence withPrecExp withPrecDecl precTable parseExpr parseDecl withParsedprettyPrintInLinecombinatorModulepointfultestmaincatchErrorJust handleErrorhandleErrorJusttryError tryErrorJust finallyError bracketError bracketError_SignalException withHandlerwithHandlerListircSignalsToCatchircSignalMessageircSignalHandlerreleaseSignals catchLockwithIrcSignalCatch ClockTime getClockTimediffClockTimesaddToClockTimetimeDiffPrettybase Data.Maybe listToMaybesafeGetStdRandom levenshteinlvnlvn'difcontainers-0.5.0.0 Data.Map.BaseMap$fPackableMap1 $fPackableMap $fPackable[]$fPackableMap0regex-base-0.93.2Text.Regex.Base.RegexLike MatchOffset MatchLengthregex-posix-0.95.2Text.Regex.Posix.WrapRegexText.Regex.Posix.ByteString unusedOffsetregexecexecutecompile compNewline compNoSubcompIgnoreCase compExtended execNotEOL execNotBOL execBlank compBlank CompOption ExecOption ReturnCode WrapError authority hGetLinesnetwork-2.4.1.0 Network.URIfragmentquerypathscheme unreservedreserved escapeStringparseabsoluteURInormalizePathSegmentsnormalizeEscape normalizeCase relativeFrom relativeTononStrictRelativeTounEscapeStringescapeURIString escapeURICharisUnescapedInURIComponentisUnescapedInURIisAllowedInURI uriToString isUnreserved isReserved uriIsRelative uriIsAbsolute isIPv4address isIPv6address isAbsoluteURIisRelativeReferenceisURIReferenceisURIparseAbsoluteURIparseRelativeReferenceparseURIReferenceparseURInullURI uriFragmenturiQueryuriPath uriAuthority uriSchemeURIuriPort uriRegName uriUserInfoURIAuthWebReqmaxTitleLengthgetURIContents extractTitle contentTypePrecedenceDatafindPrec precWrong nameFromQOp nameFromOp withPrecPatwithPrecPatField withPrecMatch withPrecRhs withPrecGRhs withPrecAlt withPrecGAlts withPrecGAlt withPrecStmt withPrecUpd$fFixPrecedenceHsDecl$fFixPrecedenceHsExpshowParseErrorextT'unkLoc stabilizenamesInpVarsInsuccName succAlpha optimizeD optimizeRhs optimizeEfreshrenameuncomb' combinatorsrecognizedNames uncombOnceuncomb optimizeOnceoptimize mtl-2.1.2Control.Monad.Error.Class catchError$fExceptionSignalException$fBinaryTimeDiff$fBinaryClockTime$fReadClockTime$fShowClockTime $fEqClockTimeold-time-1.1.0.1 System.Time noTimeDiff tdPicosectdSectdMintdHourtdDaytdMonthtdYearTimeDiff