úν;¯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 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 % /,  . : 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<=>?@ABCDEFGHIJKLMŒ�Ž‹dons@galois.comNoneNOPQ��‘’“”•–—˜™š›œ�žŸ ¡¢£NOPQOQNPNOPQ 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 RSSRRSNoneT¤U¥VWXY6¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕTUVWXYTUVWYXT¤U¥VWXYNone Ö?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`aÛÜÝÞßbàácâãäåæçèédêë`abcdbcd`a`aÛÜÝÞßbàácâãäåæçèédêë NoneefìghefghefghefìghNoneíîïðñòóôõö÷øùúûiüýþÿjklijkljkliíîïðñòóôõö÷øùúûiüýþÿjkl  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