!]      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""" " " " " """"""""""""""""""" "!"""#"$"%"&#'#(#)#*#+#,#-$.$/$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)[)\)])^)_)`)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){)|)})~)))))))))))*********+,,,,,-----------------................../////////////////////000000000000000000000000001111111111222222222222222222333 3 3 3 3 3333333333333444445None K(  None<>?QV?^ uni-util%a state monad containing the BinArea.!uni-util3Somewhere to where you write binary data in memory.%uni-utilA source of binary data'uni-util read one byte(uni-utilread multiple bytes)uni-utilA consumer of binary data+uni-utilwrite one byte,uni-utilwrite multiple bytes-uni-utilWrite an (a) to a .uni-utilRead an (a) from a 1uni-utilWrite an (a) to memory. The   is the length of the area.2uni-utilWrite an (a) to memory. The integer argument is an initial guess at the number of bytes that will be needed. This should be greater than 0. If it is too small, there will be unnecessary reallocations; if too large, too much memory will be used. 3uni-utilCreate an empty !, given the initial size.4uni-util%Return all the data currently in the !5uni-utilA !! as somewhere to put binary data.!uni-util:ensure that the given BinArea can hold at least len bytes.6uni-util.Read a value from binary data in memory. The  U is the length, and there will be an error if this is either too small or too large. 7uni-util"Turn binary data in memory into a !! (so that you can read from it). 9uni-util%A BinArea as a source of binary data.:uni-utilTransform the monad used by a );uni-utilTransform the monad used by a %#uni-util>Given a consumer of binary data, and an (a), write out the (a)$uni-util-Given a source of binary data, provide an (a) !"#$%&'()*+,-./0123456789:;-.126"#$)*+,%&'(/0! 354798:;None;<=>?CVL>uni-utiltA wrapper for instances of Binary. This can be written, but not read (since we wouldn't know what type to decode).@uni-util2A monad which hides an additional value which the "F instances should be able to get at. This is used, for example, by  CodedValue, to make the View available to instances.Auni-util`Given a function which converts an (a) to something we can already convert to binary, return a #& function to be used in instances of " (a).Buni-util\Given a function which converts something we can already read from binary to (a), return a $& function to be used in instances of " (a).Cuni-utilLike A6, but the conversion function is also allowed to use ".Duni-utilLIke B6, but the conversion function is also allowed to use ".Juni-utilWrite a ><=>?@ABCDEFGHIJABCD@EFIGH>?J<=None ;<=>?CVi[ Suni-util@Newtype alias for things we want to encode or decode via their # or $ % representation.&uni-util&Some alternative the user provides in [ in the ZS instance, to indicate one particular alternative we use when reading from binary.Uuni-util Value the Z instance generates from \7 to indicate how we should write some value to binary.Wuni-utilANewtype alias you need to wrap around something which instances ZO to get an actual HasBinary instance. You will then need something like this: ainstance Monad m => HasBinary a m where writeBin = mapWrite Wrapped readBin = mapRead wrappedZuni-utilA class allowing you to handle types with up to 256 alternatives. If this all seems to complicated, look at the source file and the example for the "Tree" data type.]uni-utilThis is a rather inelegant way of encoding a type with up to 5 alternatives. If 5 is too many, use () for the others, if too few use Z . In fact Z is probably better anyway.cuni-util This is an newtype alias for integral types where the user promises that the value will be non-negative, and so saves us a bit. This is what we use for character data incidentally, so that ASCII characters with codes <128 can be encoded (as themselves) in just one byte.euni-util&) value for constructor with no arguments.funi-util&' value for constructor with 1 argument.guni-util&( value for constructor with 2 arguments.huni-util&( value for constructor with 3 arguments.iuni-util&( value for constructor with 4 arguments.[uni-util9For each alternative in the type, provide a recognition 8, and a way of mapping that alternative to the (wrapper)\uni-util1Map a (wrapper) to the corresponding recognition & and the type within the alternative.PQRSTUVWXYZ[\]b^_`acdefghi]b^_`aZ[\WXYUVefghiSTPQRcdSafeja Safej Safej00 Safeky Nonel SafelESafemuni-util8The Bool is a sign, with True meaning positive infinity.SafemSafenASafe nSafeq uni-util^Converts a list to a queue with the first element of the list the first element of the queue.uni-utilInverts listToQueue Safe 'uni-utileffectively a list with a pointer in the middle which can only be moved right. The list should always be in increasing order.uni-utilhuffmanFold op l where op is associative, l is a nonempty monotonically increasing list, and op has the property that (x1>=x2,y1>=y2) => (op x1 y1>=op x2 y2) computes the fold of l with op, by repeatedly folding the smallest two elements of the list until only one remains.(uni-util@pointList makes a new pointed list with the pointer at the left.)uni-utilremovePointed gets the first element of a PointedList. If the pointer is at the start of the list, it is moved to the new head.*uni-utilinsertAndMovePointer inserts an element to the right of the pointer, and moves the pointer after it. It does this maintaining the invariant that the pointed list is ordered, and we assume that all elements to the left of the pointer are not more than the inserted element.If the pointer reaches the end of the list, we instead of returning a PointedList, return a queue containing the list contents.SafeCV[ SafeSafe?SafeSafeOption processingNone VQuni-util$Get a path within the top directory..     .     NoneVuni-utilSend a string to the debug file. This differs from debug, in that debug will Haskell-escape the string and add a newline, while just writes to the file with no interpretation.uni-util5show something to log file if debugging is turned on.uni-utilCIf an action fails print out a message before propagating message.!uni-util%always show something to the log file"uni-util+always print out a message if action fails. !"#$ !"#$$Miscellaneous Monads, in particular 56.None>?VAuni-util<coerce or use the supplied break function (to be used with 78&) The value is evaluated immediately.Buni-util<coerce or use the supplied break function (to be used with 78)ZThe first argument is prepended to any error message. The value is evaluated immediately.Cuni-util<coerce or use the supplied break function (to be used with 78)Duni-util<coerce or use the supplied break function (to be used with 78)5The first argument is prepended to any error message./%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO/,-.01/LJKM(NO%&'+23674589:;<=>?@BD)*HICAEFG&0.2Nonea Vuni-util@A lock which can be globally or locally locked. At any time, a VSem| is either globally locked once, or locally locked zero or more times. Global locks always take priority over local locks.+uni-utilG1 if the vSem is globally locked, otherwise the number of local locks.Wuni-util Creates a V.Xuni-util"Perform an action while locking a V locally.Yuni-util"Perform an action while locking a V globally.Zuni-utilAcquire a local lock on a V[uni-utilRelease a local lock on a V,uni-utilAcquire a global lock on a V-uni-utilRelease a global lock on a VVWXYZ[VWXYZ[None\uni-util/Converts a String into its UTF8 representation.]uni-utilfConverts a UTF8 representation of a String back into the String, catching all possible format errors.Example: With the Haskell module Control.Monad.Error, you can instance this as (fromUTF8WE :: String -> Either String String) to get a conversion function which either succeeds (Right) or returns an error message (Left)..uni-utillreturn the number of the top bit which is zero, or -1 if they are all zero, for a number between 0 and 255./uni-util@(ones i) is number with binary representation 1 written i times.\]\]None;=V`uni-utilLike _K but provides an error message indicating what types are getting confused. ^_`abcdef ^a_`bcdefWhat the Prelude ForgotNone1QV-kuni-utilWindicates that an Ord or Eq instance really does need to take everything into account.quni-utilEA function indicating we want to escape from the current computation.xuni-utiluRemove trailing spaces (We try to avoid reconstructing the string, on the assumption that there aren't often spaces)yuni-utilRemove leading spaceszuni-util"Remove trailing and leading spaces{uni-utilBPad a string if necessary to the given length with leading spaces.|uni-util=returns Just a if we can read a, and the rest is just spaces.}uni-utilThe "." operator lifted to monads. So like ., the arguments are given in the reverse order to that in which they should be executed.uni-utilinsertOrdAlternate is similar to insertOrd except (1) it takes an Ordering argument; (2) if it finds an argument that matches, it applies the given function to generate a new element, rather than inserting another. The new generated element should be EQ to the old one.uni-utilZWe split at the first occurrence of the character, returning the string before and after.uni-utilBreturns remainder if the first list is a prefix of the second one.uni-utilnode is the tree's node type. state is folded through every node of the tree (and is the result). We search the tree in depth-first order, applying visitNode at each node to update the state. The ancestorInfo information comes from the ancestors of the node. EG if we are visiting node N1 which came from N2 the ancestorInfo given to visitNode for N1 will be that computed from visitNode for N2. For the root node, it will be initialAncestoruni-util Like treeFold, but using monads.uni-util"Produce an equality function for buni-util Produce a compare function for buni-util#Intended use, EG addFallOut ( break -> do -- blah blah (normal IO a stuff) -- when (break condition) (break "You can't do that there ere") -- more blah blah, not executed if there's an break -- return (value of type a) )uni-util8Like addFallOut, but returns a WithError object instead.uni-util&Remove duplicate elements from a list.uni-utilIRemove duplicate elements from a list where the key function is supplied.uni-utilRemove duplicate elements from a list where the key function is supplied. The list order is preserved and of the duplicates, it is the first in the list which is not deleted.uni-utilLike uniqOrd, except that we specify the output order of the list. The resulting list is that obtained by deleting all duplicate elements in the list, except the first, for example [1,2,3,2,1,4] will go to [1,2,3,4].uni-utilXIf there are two elements of the list with the same (a), return one, otherwise Nothing.uni-utiloReturn Just True if all the elements give True, Just False if all False, Nothing otherwise (or list is empty).uni-util*If all the elements are equal, return Trueuni-util\A merge function for combining an input list with some new data, where both are pre-sorted.uni-util input listuni-utillist to combine with input listuni-utilcomparison function. a and b should be already sorted consistently with this comparison function, and it is assumed that each list is EQ to at most one of the other.uni-utilWMerge function applied to each element of a and b, where we pair EQ elements together.uni-util&Output of merge function concatenated.Hghijklmnopqrstuvwxyz{|}~Hxyz{}|tuvwrs~qopmnijghklGenerate Unique StringsNone1uni-utilGreadUniqueStringSource is used by types/CodedValue.hs to export values.uni-utilBcreateUniqueStringSource is the inverse of readUniqueStringSource.uni-utilCreate non-conflicting string which cannot be produced by newUniqueString. This is useful for exceptional cases. We add this by adding a character with integer value 0 at the end.  NoneNone DV NoneU!None>?Auni-utilCA class for things (in particular Source and SimpleSource) that can output via sinks. Each sink source is supposed to have a unique x, containing a representation of the current value, and delta, containing the (incremental) updates which are put in the sink. Only the addOrdSink function must be defined by instances.uni-utilhThe HasInvalidate class represents information sources which can be told "No more, I'm not interested."0uni-util(Returns True if sink is still interesteduni-util&Creates a new sink with its own SinkIDuni-utiluCreates a new sink with a given SinkID. This allows us to invalidate lots of sinks just by invalidating one sinkID.uni-utilPPut a value into the sink, returning False if the sink id has been invalidated.uni-utilXPut a list of values into the sink, returning False if the sink id has been invalidateduni-util'Convert a sink from one type to anotheruni-utilRAnother version which allows a transformation function to filter certain elementsuni-utilHA version which allows an IO action, which had better not take too long.uni-utilQAdd an action to a sinkSource which is performed until the action returns False.uni-utilCCreates a new sink which executes actions in a parallelExec thread.uni-utilCreates a new sink which executes actions in a parallelExec thread, but allow the function generating these actions to be specified later, via the returned command.uni-util"Or we can do so with HasInvalidate" Simple EventsNone ;=>?AQV01uni-utilattachClientTemporary is like attach, but additionally returns an IO action which can be used to prevent any client being run after that IO action is called.2uni-utilEmkTemporaryClient is used to map the client by attachClientTemporary.3uni-utilmkComputedClient computes a client using a value to be supplied via the returned function. (Hopefully soon after, because of course the source will block until it is.)4uni-utilqmkComputedClient is like mkComputedClient, but still more dangerously allows an IO action to compute the client.OIt also allows the supplied function to provide Nothing, indicating no client.5uni-utilmkStaticClient is used by various functions to create from a client a single static client which tracks its state using an MVar.6uni-utilmkStaticClientGeneral is like mkStaticClient except that it also returns an action which determines if the client is still running. uni-util0Fold a Source so that it can carry state around. uni-util6A Source combinator which "flattens" lists of updates.uni-utilLGet the current contents of the source, but don't specify any other action.uni-utilPair two SimpleSource's. This is probably better than using >>=, since it does not require reregistering with the second SimpleSourceuni-utilKDoes a similar job to pairSimpleSources, so that the sources run parallel.uni-utilFor each update d, pairs it with its predecessor (given first). For the very first update, a value is given based on the initial x, mapped by the given function.uni-util^Like mkHistorySource but for SimpleSource's; the x returns the initial value to compare with.uni-util!filter out consecutive duplicatesuni-utilYFold a Simple Source, so that it carries state. The state is recomputed for each client.uni-util-replaces the first value of the SimpleSource.uni-utilRun the specified actions for the source, using the given SinkID and in the ParallelExec thread. The x -> IO () action is guaranteed to be performed before any of the d -> IO () actions.uni-utilOutputs information about what comes through the source, turning it into a String with the supplied function. (This is done once for each active client.)uni-utilOutputs information about what comes through the source, turning it into a String with the supplied function. (This is done once for each active client.)uni-utilDUsed when we are worried that a SimpleSource recursively constructed by mapIOSeq, >>= and friends may actually try to call itself, and so loop forever. The Strings identify the SimpleSource, and so the [String] is effectively a backtrace of the TSems, revealing what chain of simple sources might have caused the loop.*     *     #NoneQV21&'()*+*+&'()$Outputting MessagesNone>5uni-utilDisplay an alert6uni-utilDisplay an error7uni-utilDisplay a warning message8uni-util Confirm something with the user.9uni-util#Display some informational message.:uni-utilIf True, indicates that the flag corresponding to a graphical mode has been set. This is used occasionally for deciding whether to ask the user something on stdout, stdin or via a window.;uni-utilsqueries the user on stdout getting the answer from stdin. Leading and trailing spaces are trimmed from the result.=uni-utilDisplay a series of one-line messages, separated by newline characters, attempting to combine them together and eliminate duplicates as much as possible. If other identical messages come in while the error message is being delayed, we throw them away.-./0123456789:;<=56789:;=-./01234<%NoneD>uni-utilConvert a ClockTime to a String. This has the format <optional sign><digits>+<digits> where the digits encode two integers N1 and N2 (in order) representing the time elapsed since 00:00:00 UTC on 1 Jan 1970. This will be N1 + (N2 / 10^12) seconds. 0<=N2<10^12.?uni-util2Convert a validly formatted String to a ClockTime.>?>?&NoneK;Buni-util,Like HasAddDelayer, but allows an IO action.Duni-utilInstances of HasAddDelayer are event sources to which you can attach a delayer, to indicate you are currently not interested in events.7uni-util0 when not delay'd.Iuni-utilFcarry out the given action preventing the Delayer from doing anything.Luni-util:If this DelayedAction is queued, remove it from the queue. @ABCDEFGHIJKL FH@AIGJKLDEBC'NoneM8uni-utilCReturn portion up to (not including) first %, and portion after it.9uni-util%Converts character to representation.PQRSTUPQTUSR(None;<=>?RVuni-util[Read something, but throw an exception if there is an attempt to read too many characters.Wuni-utilTime this code was written. We bung this definition in here because this module needs GHC-specific access to ClockTime anyway.Vuni-util the maximum number of charactersVWVW9Conversion to/from binary.NoneS~G !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJPQRSTUVWXYZ[\]b^_`acdefghiVW)Store information by key.None1;=>?DYMguni-utilHListRegistryContents will not be implemented for the untyped registries.vuni-utillook up the element given by the first key, and if it exists delete it, replacing it with the element given by the second key.iuni-utilthis is atomic.!YZ[\]^_`abcdefghijklmnopqrstuvwxy!baZY`[\pqrklmno]^_cdefghijvtswyxu*NoneZ+NoneZ,None]uni-utilFor now we just do this naively, with a Registry. Since the names are generated sequentially a dynamic array would be more efficient, perhaps.-None 1;=>?V^G  .None1;<=>?_ \] \]/None;=>?AQVi:uni-util1old field name, preserved here for compatibility.uni-utilReplace a SimpleSource by another which comes with a switch-off function, which temporarily blocks further updates. The action returned by the switch-off function switches the source back on again.uni-utilReplace a SimpleSource by another which mirrors it, but only copies from it once, hopefully saving CPU time. The IO action stops the mirroring.uni-utilReplace a SimpleSource by another which mirrors it, but only copies from it once, hopefully saving CPU time. In addition, block all update while the Delayer is delaying things.0None1>?AVv_uni-utilEncodes the updates to a variable set. BeginGroup does not actually alter the set itself, but indicate that a group of updates is about to begin, terminated by EndGroup. This prevents the client from trying to recalculate the state after every single update.VBeginGroup/EndGroup may be nested (though I don't have any application for that yet).uni-util Create a new empty variable set.uni-util-Create a new variable set with given contentsuni-util"Update a variable set in some way.uni-util%Set the elements of the variable set.uni-util\Creates a VariableSetSource whose elements are the same as those of the corresponding list.uni-utileHasKey specifies the ordering to use (without committing us to a particular Ord instance elsewhere).1NoneV;uni-util(setSource2,block) <- blockableVariableSet setSource1 returns a setSource2 which is in one of two states. In one state it is blocked, and empty. In the other, it is unblocked, and its contents are the same as those of setSource1. Initially it is blocked. To switch from one to the other the block function is used. "block True" blocks the set source; "block False" unblocks it. Blocking if we are already blocked, or unblocking if we are already unblocked, is harmless and does nothing.This somewhat baroque function is required for arc sets from folders. I have wasted a couple of days trying to think of a more elegant way of doing this ...2NoneQVuni-utilfReturn the close action. attachListOp :: ParallelExec -> VariableList a -> ListDrawer a -> IO (IO ())3None1>?uni-util/We recycle the VariableSetUpdate type for this. uni-utilwDescribes a map update. For DelUpdate, the second parameter (the one of type elt) is irrelevant and may be undefined.<uni-utilThe Bool indicates whether the operation was successfully carried out. We block updating a value which is already in the map, or deleting one that isn't. uni-util Create a new empty variable map. uni-util-Create a new variable map with given contents uni-utilUpdate a variable map in some way. Returns True if the update was sucessful (so for insertions, the object is not already there; for deletions the object is not there).uni-utilIGiven a variable map and conversion function, produce a VariableSetSourceuni-utilUnlike VariableSet, the contents of a variable map are not returned in concrete form but as the abstract data type VariableMapData. We provide functions for querying this.          4None;=>?=:;<:=>:=?:@A:BC:DE:FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeffghiijklmnopqrstuvwxyz{{||}~         !"#$%&'()**+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[[6\]^_`abcdefghijklmnopqrstuvwxyz{|}~8   !!!!!!!!! ! ! ! ! !!!!!!!!!!!!!!!!!!" "!"""#"$"$"%"&"'"(")"*"+","-"."/"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$X$Y$Z$[$\$]$^$_$`$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'{'|'}'~((())))))))))))))))))))))))))))))))))))))))))))))))*********+,,,,,-----------------................../////////////////////000000000000000000000 0 0 0 0 01111111111222222222 2!2"2#2$2%2&2'2(2)3*3+3+3,3-3.3/303132333435363738393:3;3<4=4>4?4@4A:BCDEFGDEH:IJ:KL:FMNOPQRSTUVW!X"Y"Z"["\"]"^&_'`'a/b1c3de&uni-util-2.3.0.2-vjFlw3FBToDmZv5eHRKKG Util.DynamicsUtil.Computation Util.Thread Util.Bytes Util.BinaryUtil.BinaryUtilsUtil.BinaryInstances Util.CacheUtil.CompileFlags Util.DeepSeqUtil.FileNames Util.HostName Util.IOExtras Util.IntPlus Util.LineShow Util.Maybes Util.Object Util.Queue Util.HuffmanUtil.QuickReadShowUtil.ReferenceCount Util.StoreUtil.ThreadDictUtil.VisitedSet Util.WBFiles Util.Debug Util.VSem Util.UTF8Util.ExtendedPreludeUtil.UniqueStringUtil.UnionFind Util.TSem Util.Sink Util.Sources Util.Myers Util.MessagesUtil.ClockTimeToString Util.DelayerUtil.CommandStringSubUtil.BinaryExtras Util.RegistryUtil.UniqueFile Util.TempFileUtil.NameMangleUtil.AtomStringUtil.ICStringLenUtil.BroadcasterUtil.VariableSetUtil.VariableSetBlockerUtil.VariableListUtil.VariableMapUtil.KeyedChanges Computation WithErrorExtendedPrelude addFallOutUtil.BinaryAllbaseData.Typeable.InternalTypeable Control.MonadunlessforeverControl.Exception.Basetry GHC.Conc.SyncThreadId Data.TypeableTypeRepGHC.BasewhenBytesByteputByteToBytesgetByteFromBytesputBytesToByteshPutBytehGetByte hPutBytes hGetBytes bytesMalloc bytesReAlloc bytesAlloca bytesFreewithBytesAsCCharsmkBytes unMkBytes compareBytes$fEqByte $fOrdByte $fNumByte $fBitsByte $fShowByte $fRealByte $fEnumByte$fIntegralByte StateBinAreaBinArea HasBinarywriteBinreadBin ReadBinaryreadByte readBytes WriteBinary writeByte writeByteshWritehReadtoWriteBinaryHandletoReadBinaryHandle writeToBytes writeToBytes0mkEmptyBinArea closeBinAreawriteBinaryBinArea readFromBytes mkBinAreacheckFullBinAreareadBinaryBinArealiftWriteBinaryliftReadBinary WrapBinary WrappedBinaryArgMonadmapWritemapRead mapWriteIO mapReadIO mkArgMonad toArgMonadwriteBinaryToArgMonadreadBinaryToArgMonad runArgMonadhWriteWrappedBinary$fMonadIOArgMonad$fMonadArgMonad$fApplicativeArgMonad$fFunctorArgMonad$fHasBinaryWrapBinarymViaEnumenumReadShowUnWrapWrappedwrapped HasWrapperwrapsunWrapChoice5Choice1Choice2Choice3Choice4Unsignedwrap0wrap1wrap2wrap3wrap4$fHasBinaryCSizem$fHasBinaryIntegerm$fHasBinaryWord32m$fHasBinaryInt32m$fHasBinaryWordm$fHasBinaryIntm$fHasBinary[]m$fHasBinaryCharm$fHasBinaryBoolm$fHasBinaryEitherm$fHasBinaryMaybem$fHasBinary(,)m$fHasBinaryBytem$fHasBinary(,,,,,,)m$fHasBinary(,,,,,)m$fHasBinary(,,,,)m$fHasBinary(,,,)m$fHasBinary(,,)m$fHasBinary(,)m0$fHasBinary()m$fHasBinaryUnsignedm$fHasBinaryCodedListm$fHasBinaryChoice5m$fHasBinaryWrappedm$fHasBinaryTreem$fHasWrapperTreem$fHasBinaryReadShowm$fHasBinaryViaEnumm $fEqChoice5CachenewCache getCachedisDebug uniVersionDeepSeqdeepSeq$!!$fDeepSeqDouble$fDeepSeqFloat $fDeepSeqInt$fDeepSeqInteger$fDeepSeqOrdering$fDeepSeqEither$fDeepSeqMaybe $fDeepSeqChar $fDeepSeqBool$fDeepSeq(,,,,,,)$fDeepSeq(,,,,,)$fDeepSeq(,,,,)$fDeepSeq(,,,) $fDeepSeq(,,) $fDeepSeq(,) $fDeepSeq[] $fDeepSeq()fileSep recordSeptopDirthisDirtrimDir splitName combineNames breakName unbreakNamesplitExtensionunsplitExtensiongetFullHostNamecatchEOFcatchAlreadyExistscatchDoesNotExistcatchErrorCalls hGetLineRsimpleModifyIORefIntPlusinfinity $fNumIntPlus $fShowIntPlus $fOrdIntPlus $fEqIntPlusLineShow$fReadLineShow$fShowLineShow fromMaybesObjectobjectIDObjectIDnewInt newObject staticObject$fReadObjectID$fShowObjectID $fEqObjectID $fOrdObjectIDQueueemptyQ singletonQisEmptyQinsertQremoveQ insertAtEndQ listToQueue queueToList$fFunctorQueue $fEqQueue huffmanFold$fShowPointedList QuickShow quickShowWrapShow QuickRead quickReadWrapReadqReadqShowRefCount newRefCountnewLinkedRefCountaddRefremRefStorenewStore takeStore ThreadDict newThreadDictwriteThreadDictreadThreadDictmodifyThreadDict VisitedSet newVisitedSet isVisitedArgValue StringValueIntValue BoolValueArgTypeSTRINGINTBOOLProgramArgument optionName optionHelp defaultValargType getWishPathgetEditorString getMMiSSDTDgetMMiSSAPIDTDgetHostsgetDaVinciPathgetGnuClientPathgetToolTimeOutgetTOP getTOPPathgetPort getXMLPort getWorkingDirgetDebugFileName getServerFile getServerDir getServerIdgetDaVinciIcons getServergetUser getPasswordgetCouplingPortgetCouplingDirusualProgramArguments getArgString getArgInt getArgBoolsetAlternateArgsparseArgumentsparseArgumentsRequiringparseTheseArgumentsparseTheseArgumentsRequiring debugStringdebugdebugAct@: alwaysDebugalwaysDebugAct@@: wrapError HasConfig$$ configUsedConfigMonadWithErrorAnswerdone#raise propagate tryUntilOKhasErrorhasValue toWithErrorisError fromWithErrorfromWithError1 mapWithError mapWithError'mapWithErrorIOmapWithErrorIO' pairWithError listWithErrorcoerceWithErrorcoerceWithErrorIOcoerceWithErrorStringIOcoerceWithErrorOrBreakIOcoerceWithErrorOrBreakIOPrefixcoerceWithErrorOrBreakcoerceWithErrorOrBreakPrefixconcatWithErrorswapIOWithErrorexceptionToErrormonadifyWithErrortoMonadWithError foreverUntilforeachincasewhile configureconfig$fMonadWithError$fApplicativeWithError$fFunctorWithError$fMonadMonadWithError$fApplicativeMonadWithError$fFunctorMonadWithErrorVSemnewVSemsynchronizeLocalsynchronizeGlobal acquireLocal releaseLocaltoUTF8 fromUTF8WEDyn fromDynamic fromDynamicWEtoDyncoercecoerceIO typeMismatchdynCast dynCastOptOrdIO compareIOEqIOeqIOFullGeneralCatchFnGeneralBreakFnBreakFn HasMapMonadic mapMonadic HasCoMapIOcoMapIOHasMapIOmapIO trimTrailing trimLeading trimSpaces padToLength readCheckmonadDot mapPartialM simpleSplitfindJust deleteFirstdeleteFirstOptdeleteAndFindFirstdeleteAndFindFirstOpt divideList insertOrdLt insertOrdGt insertOrdinsertOrdAlternatebottom splitByChar unsplitByCharunsplitByChar0 splitToChar splitToElemsplitToElemGeneralchoppairListlastOptisPrefixtreeFold treeFoldMmapEqmapOrd addFallOutWE simpleFallOutaddSimpleFallOut mkBreakFn newFallOut isOurFallOutaddGeneralFallOutourExcepToMessshowException2catchOurExcepscatchAllExcepserrorOurExcepsbreakOtherExcepsuniqOrd uniqOrdByKeyuniqOrdByKeyOrder uniqOrdOrder findDuplicateallSameallEqgeneralisedMerge$fHasMapMonadic[]UniqueStringCounterUniqueStringSourcenewUniqueStringSourcenewUniqueStringreadUniqueStringSourcecreateUniqueStringSourcemaxUniqueStringSourcesfirstUniqueStringCounterstepUniqueStringCounterfirstUniqueString newNonUnique$fOrdUniqueStringCounter$fEqUniqueStringCounter UnionFind newElementtoValueunionisSame sameElements $fEqUnionFindDurationdelayaftereveryusecsmsecssecsmins goesQuietly forkIODebug forkIOquietmapMConcurrentmapMConcurrentExcepmapMConcurrent_TSemnewTSemsynchronizeTSem ParallelExec CanAddSinks addNewSinkaddNewSinkGeneraladdNewSinkVeryGeneraladdNewSinkWithInitialaddNewQuickSinkaddNewQuickSinkGeneral addOldSinkSinkSinkID HasInvalidate invalidate newSinkIDnewSinknewSinkGeneralputSinkputSinkMultiple coMapSink coMapSink' coMapIOSink' addNewActionparallelExecVSemnewParallelExec parallelExecnewParallelSinknewParallelDelayedSink $fOrdSinkID $fEqSinkID$fHasInvalidateSinkID$fHasInvalidateSinkHasSimpleSourcetoSimpleSource HasSourcetoSource SimpleSourceUpdaterClientSource staticSourcestaticSourceIOvariableSourceapplyToUpdatervariableGeneralSource attachClientmap1map1IOmap2filter2 filter2IO foldSource foldSourceIO stepSource flattenSourcechoose seqSourcestaticSimpleSourcestaticSimpleSourceIOmapIOSeq readContentspairSimpleSourcessequenceSimpleSourcemkHistorySourcemkHistorySimpleSourceuniqSimpleSourcefoldSimpleSourceIOchange1addNewSourceActionstraceSimpleSource traceSourcenoLoopSimpleSourcemkIOSimpleSource$fMonadSimpleSource$fApplicativeSimpleSource$fHasMapIOSimpleSource$fFunctorSimpleSource$fCanAddSinkshasSourcexd$fHasSourceSimpleSourcexx$fHasSourceSourcexd$fHasSimpleSourceSimpleSourcex DiffElementInBothInFirstInSeconddiffdiff2$fShowDiffElementMessFnsalertFnerrorFn warningFn confirmFn messageFnhtkPres alertMess errorMess warningMess confirmMess messageMess htkPresent textQuery setMessFns errorMess2clockTimeToStringstringToClockTime HasDelayer toDelayerHasAddDelayerIO addDelayerIO HasAddDelayer addDelayerDelayer DelayedAction newDelayernewDelayedAction delayedActcancelDelayedAct$fOrdDelayedAction$fEqDelayedAction$fHasDelayerDelayerCompiledFormatStringcompileFormatString bashEscape emacsEscaperunFormatStringdoFormatStringhReadLtdinitialClockTime$fHasBinaryClockTimemUntypedLockedRegistryLockedRegistryUnsafeUnsafeRegistryGetSetRegistryDyn setValueAsDyn getValueAsDynUntypedUntypedRegistryRegistryKeyOpsRegistrydeleteFromRegistryBooldeleteFromRegistrylistKeysListRegistryContentslistRegistryContents$listRegistryContentsAndEmptyRegistrylistToNewRegistryGetSetRegistrytransformValue getValueOptgetValuesetValue NewRegistry newRegistry emptyRegistrygetValueDefaultgetRegistryValuegetRegistryValueSafe changeKeylockedRegistryCheck getValueSafe getValue'$fHasBinaryRegistrym$$fListRegistryContentsRegistryfromto$fKeyOpsRegistryRegistryfrom$fGetSetRegistryRegistryfromto$fNewRegistryRegistry$fKeyOpsRegistryUntypedfrom$fGetSetRegistryUntypedfromto$fNewRegistryUntyped$fGetSetRegistryDynUntypedfrom$fKeyOpsRegistryUnsafefrom$fGetSetRegistryUnsafefromto$fNewRegistryUnsafe"$fKeyOpsRegistryLockedRegistryfrom$$fGetSetRegistryLockedRegistryfromto$fNewRegistryLockedRegistryUniqueFileStoreUniqueFileCounterinitialUniqueFileCounterstepUniqueFileCounternewUniqueFileStoreensureDirectories getFilePath$fShowUniqueFileCounter$fReadUniqueFileCounter newTempFile NameMangler MangledNamenewNameManglernewMangledNamereadMangledNameStr StringClasstoString fromString fromStringWE AtomStringfirstAtomStringfromStringWEHackedfromStringErrormkFromStringWE$fQuickShowstringClass$fQuickReadstringClass$fStringClassAtomString$fHasBinaryStrm$fOrdAtomString$fEqAtomStringUTF8 ICStringLen mkICStringLenmkICStringLenExtrawithICStringLenbytesToICStringLenbytesFromICStringLentouchICStringLenreadICStringLenwriteToICStringLen$fHasBinaryICStringLenm$fEqICStringLen$fEqIOICStringLen$fOrdIOICStringLen$fShowICStringLen$fStringClassICStringLen$fStringClassUTF8BroadcasterClass broadcastSimpleBroadcaster BroadcasterGeneralBroadcasternewBroadcasternewSimpleBroadcasternewGeneralBroadcasterapplySimpleUpdateapplySimpleUpdate' applyUpdateapplyGeneralUpdateswitchOffSimpleSourcemirrorSimpleSourcemirrorSimpleSourceWithDelayer$fHasSourceGeneralBroadcasterxd$fHasSourceBroadcasterxd#$fHasSimpleSourceSimpleBroadcasterx$fHasSourceSimpleBroadcasterxx$$fBroadcasterClassSimpleBroadcasterx $fBroadcasterClassBroadcaster(,)VariableSetSource VariableSetVariableSetUpdate AddElement DelElement BeginGroupEndGroupKeyedHasKeytoKeynewEmptyVariableSetnewVariableSet updateSetsetVariableSetemptyVariableSetSourcemapVariableSetSourceIO'concatVariableSetSourcemapVariableSetSourcesingletonSetSourcelistToSetSource $fOrdKeyed $fEqKeyed$fFunctorVariableSetUpdate)$fHasSourceVariableSet[]VariableSetUpdateBlockIDBlocker newBlockernewBlockerWithPreAction newBlockID openBlocker closeBlockerblockVariableSet $fEqBlockID $fOrdBlockID VariableList attachListOp ListDrawernewPossetPosdelPosredrawcoMapListDrawermap2ListDraweremptyVariableList singletonListnewVariableListFromSetnewVariableListFromListcatVariableLists$fHasAddDelayerIOListDrawer$fHasAddDelayerVariableList$fFunctorVariableList VariableMapVariableMapUpdateVariableMapDatanewEmptyVariableMapnewVariableMapnewVariableMapFromFM updateMap lookupMaplookupWithDefaultMap mapToListmapToFMmapToVariableSetSourceaddToVariableMapdelFromVariableMapvariableMapToListlookupVariableMapgetVariableMapByKey6$fHasSourceVariableMapVariableMapDataVariableMapUpdate,$fHasSourceVariableMapSet[]VariableSetUpdate KeyedChangesnewKeyedChangessendKeyedChangesdeleteKeyedChange$fHasSourceKeyedChanges[]deltaGHC.IO.Handle.TypesHandleghc-prim GHC.TypesInt ensureBinAreaIOGHC.ReadReadGHC.ShowShowStringWrap PointedList pointList removePointedinsertAndMovePointer nLocalLocks acquireGlobal releaseGlobaltopZero8ones isInterestedattachClientTemporarymkTemporaryClientmkComputedClientmkComputedClientIOmkStaticClientmkStaticClientGeneral delayCount splitToDollartoOctal updateAct2blockableVariableSetupdate