J      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None $Append an element to the end of the .None NoneD \Cache line size, in bytes NoneD None q default valuenew sizenumber of elements to copy old arrayNoneDWLWhat you have to mask an integer index by to tell if it's cacheline-alignedNoneNoneD)(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     NoneD,T O2-element array, stores how many entries and deleted entries are in the table.3An open addressing hash table using linear probing.      None36K;This 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 s. This is used internally.HMutable unboxed vertices that have the same length as the vertices in a 0 . See .@Mutable vertices that have the same length as the vertices in a 0h. This is used to safely implement algorithms that need to mark vertices as they traverse a graph."All vertices in a 0 with matching type variable g.%A reference to a vertex in a 0 with matching type variable g. % is a thin wrapper for . and does not hold the label of the vertex.+ This is a 0N without the phantom type variable. Very few functions work with this type.0A 0 with edges labeled by e and vertices labeled by v . The g5 type variable is a phatom type that associates a 0! with vertices that belong to it.  !"#$%&'()*+,/.-012!012+,-./()*%&'"#$ !3  !"#$%&'()*+,-./012None36K= "%(+0 +0%("NoneE\AThis 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.BThis replaces the edge if it already exists. If you pass the same vertex as the source and the destination, this function has no effect.COInsert edge with a function, combining the existing edge value and the old one. ABCDEFGHI ABCDEGFIHNoneDQVHpLThis bound is exclusiveMBinary tree of prioritiesNBinary tree of elementsOLLookup binary tree index by element, used for increase and decrease priorityJKONMLPQRSTUVWXYZ[\]JKLMNOPQRSTUVWXYZ[\]JKLMNONoneLcVDoes not check to see if the provided element is within the bounds accepted by the ^.bMaximum elementcPriorityElementHeapdPriorityElementHeap ^_a`bcdefg ^_`abcdefg^_`aNone3QVh Lookup a % by its label.kNot the same as / because the function also takes the vertex id.lMap of the edges in the graph.n.This traverses every edge in the entire graph.o,Traverse the neighbors of a specific vertex.pGet the vertices from a graph.qSet the vertices of a graph.r&Get the number of vertices in a graph.t Convert a % to an .v%This is currently inefficient. If an  itraverse gets added to vector, this can be made faster.w%This is currently inefficient. If an  itraverse gets added to vector, this can be made faster.| Make a mutable copy of a set of ".}*Make an immutable copy of a mutable graph.~)Takes a function that builds on an empty $. After the function mutates the (, it is frozen and becomes an immutable +.-Take a function that can be performed on any 0" and perform that on the given +.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.YThis is a generalization of Dijkstra's algorithm. Like the original, it takes a start %V but unlike the original, it does not take an end. It will continue traversing the 0O 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 7. The update procedure involves combining them with p instead of being choosing the smaller of the two. For this algorithm to function correctly, the distance s must have  and  instances satisfying: ?" a b. mappend a b "d a " a b. mappend a b "d b " c. mempty "e cAdditionally, the $ instance should have a commutative :  " 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 %=, but doing so allows us to use a faster heap implementation.This is not exported Start vertex End vertexGraphWeight functionWeight to assign start vertexStart verticesGraphWeight functionMonadic fold functionWeight to assign start vertexInitial accumulatorStart verticesGraphWeight function Monadic foldWeight to assign start vertexInitial fold valueStart verticesGraphhijklmnopqrstuvwxyz{|}~hijklmnopqr}~styzvwux|{ !"#$ NoneD %NnothingSurrogate stands in for the value Nothing; we distinguish it by pointer& NoneD' NoneD NoneD(NnothingSurrogate stands in for the value Nothing; we distinguish it by pointer) NoneDg array to filloffset into arraynumber of values to fillvalue to fill withNonegThis gives the best match, that is, the value stored at the longest prefix that matched this key. prefix keyvaluesignificant bits from key prefix keyvalue NonegThis gives the best match, that is, the value stored at the longest prefix that matched this key.* !"#$%&'()**+,-..//011233455677899:;<==>?@ABCDEFGHIJKLMNOPQRSTUVVWXYZ[\]^_`abcdefghhijdklbmnopqrstuvwxyz{|}U~         ! w #"             .impure-containers-0.4.2-GOm0Uh57eEq1jjybDHXE1rData.ArrayList.GenericData.HashMap.Mutable.BasicData.Graph.TypesData.Graph.Types.InternalData.Graph.MutableData.Heap.Mutable.ModelCData.Heap.Mutable.ModelDData.Graph.ImmutableData.Maybe.UnsafeData.Primitive.Array.MaybeData.Primitive.BoolData.Primitive.MutVar.MaybeData.Primitive.PrimArrayData.Trie.Mutable.BitsData.Trie.Immutable.Bits#Data.HashMap.Mutable.Internal.Array&Data.HashMap.Mutable.Internal.IntArray*Data.HashMap.Mutable.Internal.UnsafeTricks+Data.HashMap.Mutable.Internal.Linear.Bucket#Data.HashMap.Mutable.Internal.Utils8Data.HashMap.Mutable.Internal.CheapPseudoRandomBitStream'Data.HashMap.Mutable.Internal.CacheLine ArrayList arrayListSizearrayListVectornewpushfreezeMHashMapnewSizeddeletelookupinsertfoldMmapM_computeOverhead$fShowMHashMap $fMonoidSlot $fShowSlotSTGraphIOGraphMGraphmgraphVertexIndexmgraphCurrentId mgraphEdgesIntPair MUVerticesgetMUVerticesInternal MVerticesgetMVerticesInternalVerticesgetVerticesInternalVertexgetVertexInternalSizegetSizeInternal SomeGraph graphVerticesgraphOutboundNeighborVerticesgraphOutboundNeighborEdgesGraphgetGraphInternal$fHashableIntPair$fFunctorSomeGraph $fEqSomeGraph$fOrdSomeGraph$fFunctorGraph $fEqVertex $fOrdVertex$fHashableVertex$fFunctorVertices $fEqIntPair $fOrdIntPair $fShowIntPair $fReadIntPair$fGenericIntPair insertVertex insertEdgeinsertEdgeWithverticesReplicateverticesUReplicateverticesUWrite verticesWrite verticesURead verticesReadRawHeap rawHeapBoundrawHeapPrioritiesrawHeapElementsrawHeapInvertedIndexreadHeapPriorityreadHeapElementwriteHeapPrioritywriteHeapElementreadHeapInvertedIndexwriteHeapInvertedIndexswapHeappop bubbleDown unsafePush appendElem combineElembubbleUpHeapheapRawheapCurrentSizepushListpopAll lookupVertex lookupEdgeatVertex mapVerticesmapEdgestraverseVertices_traverseEdges_traverseNeighbors_vertices setVerticessizesizeInt vertexIntverticesToVertexListverticesTraverseverticesTraverse_verticesToVectorverticesLengthverticesFreeze verticesThawcreatewithdijkstraDistancedijkstra dijkstraFoldM$fMonoidMinDistance$fOrdMinDistance$fEqMinDistance UnsafeMaybejustnothing fromMaybemaybetoMaybe$fMonadUnsafeMaybe$fApplicativeUnsafeMaybe$fFunctorUnsafeMaybeMutableMaybeArray newMaybeArrayreadMaybeArraywriteMaybeArrayBoolByte getBoolByte$fPrimBoolByte MutMaybeVarnewMutMaybeVarreadMutMaybeVarwriteMutMaybeVarMutablePrimArray newPrimArray readPrimArraywritePrimArraysizeofMutablePrimArray setPrimArrayMTrie mtrieValue mtrieLeft mtrieRight insertPrefixTrie trieValuetrieLeft trieRightempty(primitive-0.6.2.0-EI3NK1Xfv9zEcRtyXK2EwZData.Primitive.Array MutableArraynewArray readArray writeArray cacheLineSizeElemIntArrayprimWordToElem elemToInt elemToInt#elemMasklengthtoPtrIAKey emptyRecord deletedRecord keyIsEmpty keyIsDeletedtoKeyfromKeymakeEmptyVectorwriteDeletedElement TombStone EmptyElementDeletedElement expandArrayBucketbucketSplitSizenewBucketArraynelemsAndOverheadInWords emptyWithSize newBucketSizeexpandBucketArray growBucketTosnoctoListfromListBucket_ _bucketSize _highwater_keys_valuescacheLineIntMaskbaseGHC.IO unsafeIOToSTwordSizenumElemsInCacheLinecacheLineIntBits whichBucket nextBestPrimebumpSizeshiftLshiftRLiShiftLiShiftRLnextHighestPowerOf2log2highestBitMask forceSameType BitStream newBitStream getNextBitgetNBits _curRandom _bitsLeft _randomPossign#bl_abs#mask#cacheLineSearchcacheLineSearch2cacheLineSearch3 prefetchRead prefetchWriteforwardSearch2forwardSearch3advanceByCacheLineSizeisCacheLineAlignedmaskw#_loadSlot_slot _wasDeleted HashTable__size_hashesHTghc-prim GHC.TypesIntGHC.Basefmapmemptymappend GHC.ClassesOrdMonoiddijkstraGeneralBoolWith MinDistancegetMinDistancenothingSurrogate