]8      !"#$%&'()*+,-./0123456789:;<=>? @ 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 { | } ~  NoneB  NoneBNoneBNoneB   array to filloffset into arraynumber of values to fillvalue to fill with   NoneBNnothingSurrogate stands in for the value Nothing; we distinguish it by pointerNonegThis gives the best match, that is, the value stored at the longest prefix that matched this key.  prefix keyvaluesignificant bits from key prefix keyvalue  None"gThis gives the best match, that is, the value stored at the longest prefix that matched this key. !"# !"# !"# !"#None)$Append an element to the end of the $.$%&'()*$%&'()*$%&'()*$%&'()*NoneBOT-This bound is exclusive.Binary tree of priorities/Binary tree of elements0LLookup binary tree index by element, used for increase and decrease priority+,-./0123456789:;<=>+,-./0123456789:;<=>+,-./0123456789:;<=>+,-./0123456789:;<=> NoneDVDoes not check to see if the provided element is within the bounds accepted by the ?. ?@ABCMaximum elementDPriorityElementHeapEPriorityElementHeapFGH ?@ABCDEFGH ?@ABCDEFGH?@ABCDEFGHNoneBCache line size, in bytes  NoneBLWhat you have to mask an integer index by to tell if it's cacheline-alignedNone NoneB(Returns 0 if x is positive, -1 otherwiseAbs of an integer, branchless Returns 0xfff..fff (aka -1) if a == b, 0 otherwise.^Search through a mutable vector for a given int value, cache-line aligned. If the start index is cache-line aligned, and there is more than a cache-line's room between the start index and the end of the vector, we will search the cache-line all at once using an efficient branchless bit-twiddling technique. Otherwise, we will use a typical loop.iSearch through a mutable vector for one of two given int values, cache-line aligned. If the start index is cache-line aligned, and there is more than a cache-line's room between the start index and the end of the vector, we will search the cache-line all at once using an efficient branchless bit-twiddling technique. Otherwise, we will use a typical loop.kSearch through a mutable vector for one of three given int values, cache-line aligned. If the start index is cache-line aligned, and there is more than a cache-line's room between the start index and the end of the vector, we will search the cache-line all at once using an efficient branchless bit-twiddling technique. Otherwise, we will use a typical loop.vector to search start indexvalue to search for7dest index where it can be found, or "-1" if not foundvector to search start indexvalue to search forvalue 2 to search for7dest index where it can be found, or "-1" if not foundvector to search start indexvalue to search forvalue 2 to search forvalue 3 to search for7dest index where it can be found, or "-1" if not found None None     default valuenew sizenumber of elements to copy old array !"      !" NoneB#O2-element array, stores how many entries and deleted entries are in the table.I3An open addressing hash table using linear probing./$%&'()*#+,-.I/012345JK6LMNOPQ789:;<=>?@ABCDEFRS IJKLMNOPQ IJKLMNPOQ%$%&'()*#+,-.I/012345JK6LMNOPQ789:;<=>?@ABCDEFRS None25IWThis is more accurately thought of as a graph builder rather than a mutable graph. You can add vertices and edges, and you can delete edges, but you cannot delete vertices.\A strict pair of Gs. This is used internally.^HMutable unboxed vertices that have the same length as the vertices in a r . See a.a@Mutable vertices that have the same length as the vertices in a rh. This is used to safely implement algorithms that need to mark vertices as they traverse a graph.dAll vertices in a r with matching type variable g.gA reference to a vertex in a r with matching type variable g. g is a thin wrapper for G. and does not hold the label of the vertex.m This is a rN without the phantom type variable. Very few functions work with this type.rA r with edges labeled by e and vertices labeled by v . The g5 type variable is a phatom type that associates a r! with vertices that belong to it.!UVWXYZ[\]^_`abcdefghijklmnopqrstu UVWXYZ[\]^_`abcdefghijklmnopqrst!rstmnopqjklghidefabc^_`\]uWXYZ[VU UVWXYZ[\]^_`abcdefghijklmnopqrstu None25I UVW^adgjmr mrgjda^WVU None$$mutgraph Operations that mutate a W. Vertices and edges can both be added, and edges can be deleted, but vertices cannot be deleted. Providing such an operation would undermine the safety that this library provides.This does two things:?Check to see if a vertex with the provided value already exists(Create a new vertex if it does not existhIn either case, the vertex id is returned, regardless or whether it was preexisting or newly created.This replaces the edge if it already exists. If you pass the same vertex as the source and the destination, this function has no effect.OInsert edge with a function, combining the existing edge value and the old one.'$mutvertices Operations that mutate a a or a ^+. These functions have nothing to do with W and are not usually needed by end users of this library. They are useful for users writing algorithms that need to mark vertices in a graph as it is traversed.=All of these operations are wrappers around operations from Data.Vector.Mutable and Data.Vector.Unbox.Mutable . As long as you do not import Data.Graph.Types.InternalJ, this library guarentees that these operations will not fail at runtime. None2OT Lookup a g by its label.Not the same as H/ because the function also takes the vertex id..This traverses every edge in the entire graph.]Traverse the neighbors of a specific vertex. Change this to use unsafeRead some time soon.Get the vertices from a graph.Set the vertices of a graph.&Get the number of vertices in a graph. Convert a g to an G.I%This is currently inefficient. If an  itraverse gets added to vector, this can be made faster.%This is currently inefficient. If an  itraverse gets added to vector, this can be made faster. Make a mutable copy of a set of d.*Make an immutable copy of a mutable graph.)Takes a function that builds on an empty W$. After the function mutates the W(, it is frozen and becomes an immutable m.-Take a function that can be performed on any r" and perform that on the given m.Find the shortest path between two vertices using Dijkstra's algorithm. The source code of this function provides an example of how to use the generalized variants of Dijkstra's algorithm provided by this module..A generalized version of Dijkstra's algorithm.YThis is a generalization of Dijkstra's algorithm. Like the original, it takes a start gV but unlike the original, it does not take an end. It will continue traversing the rO until it has touched all vertices that are reachable from the start vertex.Additionally, this function generalizes the notion of distance. It can be numeric (as Dijkstra has it) data, non-numeric data, or tagged numeric data. This can be used, for example, to find the shortest path from the start vertex to all other vertices in the graph.In Dijkstra's original algorithm, tentative distances are initialized to infinity. After a node is visited, the procedure for updating its neighbors' tentative distance to a node is to compare the existing tentative distance with the new one and to keep the lesser of the two.8In this variant, tentative distances are initialized to J7. The update procedure involves combining them with Kp instead of being choosing the smaller of the two. For this algorithm to function correctly, the distance s must have L and M instances satisfying: ?" a b. mappend a b "d a " a b. mappend a b "d b " c. mempty "e cAdditionally, the M$ instance should have a commutative K:  " a b. mappend a b "E mappend b a$The weight function is described by: from to from edge tentative node node weight value to weight | | | | | V V V V V (v -> v -> s -> e -> s)sIn many cases, some of input values can be ignored. For example, to implement Dijkstra's original algorithm the  from-node and to-nodeP values are not needed. The weight combining function will typically use the  from-weight in some way. The way this algorithm uses the weight function makes it suseptible to the same negative-edge problem as the original. For some weight combining function f, it should be the case that: " v1 v2 s e. f v1 v2 s e "e sGThis function could be written without unsafely pattern matching on g=, but doing so allows us to use a faster heap implementation.NOPI Start vertex End vertexGraphWeight to assign start vertex Start vertex End vertexGraphWeight functionWeight to assign start vertexStart verticesGraphNOPIQ !"#$%&''()*+,-.//0123,45567+8499:;<=>?@ABCDEFGHIJ+ K K L M + G 8 N O E P + Q R , - S T U V W X Y Z [ [ \ ] ^ _ _ ` ` a b b c d d e f f g h h i j j k l m n n o p q r s t u v w x y z { | } ~  4#     ,RTS       P             ! " # $ % & ' ( ) * + , - . / 0 123456474819:4;<<=>.impure-containers-0.4.0-7uEVSSDNbiVGiOHKczf6NGData.Primitive.BoolData.Primitive.Array.MaybeData.Primitive.PrimArrayData.Primitive.MutVar.MaybeData.Trie.Mutable.BitsData.Trie.Immutable.BitsData.ArrayList.GenericData.Heap.Mutable.ModelCData.Heap.Mutable.ModelDData.HashMap.Mutable.BasicData.Graph.TypesData.Graph.Types.InternalData.Graph.MutableData.Graph.Immutable*Data.HashMap.Mutable.Internal.UnsafeTricks&Data.HashMap.Mutable.Internal.IntArray#Data.HashMap.Mutable.Internal.Utils8Data.HashMap.Mutable.Internal.CheapPseudoRandomBitStream'Data.HashMap.Mutable.Internal.CacheLine#Data.HashMap.Mutable.Internal.Array+Data.HashMap.Mutable.Internal.Linear.BucketBoolByte getBoolByte$fPrimBoolByteMutableMaybeArray newMaybeArrayreadMaybeArraywriteMaybeArrayMutablePrimArray newPrimArray readPrimArraywritePrimArraysizeofMutablePrimArray setPrimArray MutMaybeVarnewMutMaybeVarreadMutMaybeVarwriteMutMaybeVarMTrie mtrieValue mtrieLeft mtrieRightnewlookupinsert insertPrefixTrie trieValuetrieLeft trieRightemptyfreeze ArrayList arrayListSizearrayListVectorpushRawHeap rawHeapBoundrawHeapPrioritiesrawHeapElementsrawHeapInvertedIndexreadHeapPriorityreadHeapElementwriteHeapPrioritywriteHeapElementreadHeapInvertedIndexwriteHeapInvertedIndexswapHeappop bubbleDown unsafePush appendElem combineElembubbleUpHeapheapRawheapCurrentSizepushListpopAllMHashMapnewSizeddeletefoldMmapM_computeOverhead $fMonoidSlot$fShowMHashMap $fShowSlotSTGraphIOGraphMGraphmgraphVertexIndexmgraphCurrentId mgraphEdgesIntPair MUVerticesgetMUVerticesInternal MVerticesgetMVerticesInternalVerticesgetVerticesInternalVertexgetVertexInternalSizegetSizeInternal SomeGraph graphVerticesgraphOutboundNeighborVerticesgraphOutboundNeighborEdgesGraphgetGraphInternal$fHashableIntPair$fFunctorSomeGraph $fEqSomeGraph$fOrdSomeGraph$fFunctorGraph $fEqVertex $fOrdVertex$fHashableVertex$fFunctorVertices $fEqIntPair $fOrdIntPair $fShowIntPair $fReadIntPair$fGenericIntPair insertVertex insertEdgeinsertEdgeWithverticesReplicateverticesUReplicateverticesUWrite verticesWrite verticesURead verticesRead lookupVertex lookupEdge mapVerticestraverseVertices_traverseEdges_traverseNeighbors_vertices setVerticessizesizeInt vertexIntverticesToVertexListverticesTraverse_verticesToVectorverticesLengthverticesFreeze verticesThawcreatewithdijkstradijkstraMonoidaldijkstraMonoidalCover$fMonoidMinDistance$fOrdMinDistance$fEqMinDistance TombStone EmptyElementDeletedElementKey emptyRecord deletedRecord keyIsEmpty keyIsDeletedtoKeyfromKeymakeEmptyVectorwriteDeletedElementtoBooltoBool# fromBool#fromBool unsafeToMaybenothingSurrogate toUndefined1 toUndefined2toMaybe cacheLineSizeElemIntArrayIAprimWordToElem elemToInt elemToInt#elemMaskwordSizeInBytesnewArray readArray writeArraylengthtoPtrcacheLineIntMaskwordSizenumElemsInCacheLinecacheLineIntBits whichBucket binarySearchbinarySearchBybinarySearchByBounds primeSizes nextBestPrimebumpSizeshiftLshiftRLiShiftLiShiftRLnextHighestPowerOf2log2highestBitMask forceSameTypebaseGHC.IO unsafeIOToST BitStream _curRandom _bitsLeft _randomPos random32s random64s numRandomsrandoms newBitStream getNextBitgetNBitssign#bl_abs#mask#cacheLineSearchcacheLineSearch2cacheLineSearch3prefetchCacheLine_writeprefetchCacheLine_readc_forwardSearch_3c_forwardSearch_2c_lineSearch_3c_lineSearch_2 c_lineSearchfI prefetchRead prefetchWriteforwardSearch2forwardSearch3 lineSearch lineSearch2 lineSearch3advanceByCacheLineSizeisCacheLineAlignedmaskw#'primitive-0.6.1.0-Ip44DqhfCp21tTUYbecwaData.Primitive.Array MutableArrayBucket_Bucket _bucketSize _highwater_keys_valuesbucketSplitSizenewBucketArraynelemsAndOverheadInWords emptyWithSize newBucketSize expandArrayexpandBucketArray growBucketTosnoctoListfromListmovedebug_loadSlot_slot _wasDeleted HashTable__size_hashesSizeRefsHTintSzreadLoad writeLoad readDelLoad writeDelLoad newSizeRefs newSizedReal insertRecord checkOverflow rehashAll growTabledelete'maxLoad emptyMarker deletedMarker recordIsEmptyrecordIsDeletedhash hashToElemnewRefwriteRefreadRefghc-prim GHC.TypesIntGHC.BasefmapverticesTraversememptymappend GHC.ClassesOrdMonoid MinDistancegetMinDistance