Ξυ³h$1Ψ.k“      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’None&'(/?ΑΒΗΙΚΡΤΦΧΩθμ&ΐ short-vec n a is an element-lazy array of n values of type a.ΏThis comes with a fusion framework, so many intermediate vectors are optimized away, and generally the only Vecs that correspond to actual arrays are those stored in data constructors, accessed multiple times, or appearing as inputs or outputs of non-inlinable functions. Additionally, some operations that rely on building up a vector incrementally (as opposed to computing each index independently of the others) cannot be fused; notably 8, “, S, and I=; these will always construct real arrays for their results.—Most operations are access-strict unless otherwise noted, which means that forcing the result (usually a Vec, but possibly something else, like with ”Κ) eagerly performs all indexing and drops references to any input arrays.  short-vec1Wrap stateful primops which don't return a value. short-vecThis function is  type-unsafe: because it assumes the •( argument is in fact the reflection of n. short-vecThis function is  memory-unsafe: because it freezes the $ in place. See [Note MemoryUnsafe]. short-vecχSafely thaw a vector, by allocating a new array and copying the elements over. This is both type-safe and memory-safe. short-vecThis function is  type-unsafeέ: because it assumes all the integers are in bounds for their respective arrays. It is also  memory-unsafe³, because we don't do any dynamic checks on those integers. We could add such, but have avoided doing so for performance reasons. See [Note TypeUnsafe] and [Note MemoryUnsafe].TODO(b109671227): would assertions .really/ affect the performance significantly? short-vec.Return a known-length slice of a given vector.σSince the type is insufficiently specific to ensure memory-safety on its own (because the offset argument is just •Θ), this needs to perform runtime bounds checks to ensure memory safety. short-vecExtract the given index from a .ΞThis is subject to fusion if this is the only use of its input, so code like  fmap f v ! i7 (which might arise due to inlining) will optimize to  f (v ! i). short-vecΡEagerly look up the value at a given position, without forcing the value itself.One of the problems with (!); is that it will hold onto the underlying array until the xs!iΟ expression is forced; which is a source of space leaks. However, forcing the xs!i― expression will force not only the array lookup but also the value itself; which can be undesirably strict, thereby ruining the compositionality benefits of laziness. The Φ function is designed to overcome those limitations. That is, forcing the expression  indexK xs i k& will force the array lookup and the r" value; thereby leaving it up to k' to decide whether or not to force the a before returning r . So, for example, if we force indexK xs i JustΙ this will force the array lookup, and wrap the unforced element in the – constructor. short-vecReturn the size of a vector as —. short-vecΨDynamically determine the (actual) size/length of the vector, as a standard term-level •. If you'd rather obtain nΜ at the type-level, and/or to prove that the returned value is indeed the n of the input, see  and " instead. If you'd rather obtain n statically, see . short-vec Convert a ( into its size and an indexing function.  short-vecConstruct an actual  from an .―Strictness properties: forcing the resulting Vec forces all of the unboxed tuple accesses, so you can make Vecs that are strict in whatever you want by controlling what work goes inside/outside the unboxed tuple construction. Generally this is used to force all of the array accessing so that input €s are no longer retained after the result is forced; but it's also used to implement element-strict variants of some functions.0 short-vec3Create a known-length vector using a pure function.Note if you already have a $ of the desired length, you can use  to get the — parameter.1 short-vec3Create a known-length vector using a pure function.Note if you already have a $ of the desired length, you can use  to get the — parameter.2 short-vecElement-strict form of 1+: elements are forced when forcing the Vec.3 short-vecElement-strict form of 1+: elements are forced when forcing the Vec.4 short-vecΛConstruct a vector by choosing an element of another vector for each index. & backpermute n f v ! i === v ! f i 5 short-vec8Create a vector of the specified length from a list. If  n < length xs4 then the suffix of the vector will be filled with  values. If  n > length xs then the suffix of xsί won't be included in the vector. Either way, this function is both type-safe and memory-safe.6 short-vec.Convert a list to a vector of the same length.7 short-vecαConvert a list to a vector, given a hint for the length of the list. If the hint does not match the actual length of the list, then the behavior of this function is left unspecified. If the hint does not match the desired n#, then we throw an error just like 8#. For a non-errorful version, see 6 instead.8 short-vecλConvert a list to a vector, throwing an error if the list has the wrong length. Note: Because this walks xsΣ to check its length, this cannot be used with the list fusion optimization rules.9 short-vecAn implementation of n == length xsŠ which short-circuits once it can determine the answer, rather than necessarily recursing through the entire list to compute its length.: short-vec Claim that ;! is the only data-constructor of .; short-vec Treat the 8$ function as a data-constructor for .= short-vecωSafely construct a new vector that differs only in one element. This is inefficient, and only intended for internal use.? short-vecAn element-strict version of ˜.@ short-vec A variant of ˜4 that provides the index in addition to the element.A short-vecPair each element of a  with its index.You can also use @τ, but there should be no harm in using this because the fusion framework should optimize away the intermediate Vec.B short-vecAn element-strict version of @.F short-vecA truly lazy version of liftA2.As opposed to the actual liftA2η it does not inspect the arguments which makes it possible it to use in code that has lazy knot-tying.G short-vec -unsafeIndexK xs i === indexK xs (unsafeFin i)ΧTODO(b/109672429): try to get rid of all the uses of this function, and other uses of ™ as well.I short-vecš, for .J short-vecA zero-length  of any element type.K short-vecConcatenate two s.L short-vecConcatenate two s.O short-vec;Split a vector into two shorter vectors at the given index.P short-vecConcatenate a nested  into one longer .Q short-vec5Turn a vector into a vector of vector by chunking it.R short-vecMap each element of a  to a (same-sized) sub- of the result.S short-vec5Generate a Vec by repeated application of a function. ΗtoList (Vec.iterate @n f z) === take (valueOf @n) (Prelude.iterate f z)T short-vecA strict version of S.U short-vec>Return a copy of the array with elements in the reverse order.V short-vecRotate a vector right by i positions. rot 1 [x, y, z] = [z, x, y]W short-vecRotate a vector right by i positions. rot 1 [x, y, z] = [z, x, y]X short-vecΑReturn a vector with all elements of the type in ascending order.Y short-vec0One variant of the cross product of two vectors.[ short-vec:Insert an element at the given position in a vector. O(n)] short-vec:Remove an element at the given position in a vector. O(n)^ short-vecSort a  according to its › instance._ short-vecSort a " with a given comparison function.` short-vecSort a  with a given sort-key function.a short-vecTranspose a vector of vectors.b short-vecΘFind the index of the first element, if any, that satisfies a predicate.c short-vecCreate a singleton .d short-vec Create a  from two elements.e short-vec Create a  from three elements.f short-vec Create a  from four elements.g short-vec Create a  from six elements.h short-vec Create a  from eight elements.i short-vec3Get the value of a statically known natural number.j short-vecModify the given index of a .z short-vec Point-wise mempty.{ short-vec Point-wise (<>).λ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijλ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUWVXYZ[\]^_`abcdefghijL5None')13468?ABFIJLOPQRSTUWXY[]^_`abcdefghj)13486cdefghX[]jJLOPRQUWaST^_`b?BAYIFNoneΗΤΦΧΩμ-Ώ † short-vec3Create a known-length vector using a pure function.Note if you don't have the œ+ instance at hand, but you already have a $ of the desired length, you can use ’ to get the œ instance.‡ short-vec=Create a known-length vector using a pure function, strictly.ˆ short-vec Create a ! by selecting indices of another .‰ short-vecλConvert a list to a vector, throwing an error if the list has the wrong length. Note: Because this walks xsΣ to check its length, this cannot be used with the list fusion optimization rules.Š short-vecΑReturn a vector with all elements of the type in ascending order.‹ short-vecSplit a  into two at a given offset.Œ short-vecSplit a  into a  of equal-sized chunks. short-vecTranspose a vector of vectors.Ž short-vecαStatically determine the (purported) size/length of the vector. If you'd rather not require the œ constraint, see . short-vec5Generate a Vec by repeated application of a function. ΗtoList (Vec.iterate @n f z) === take (valueOf @n) (Prelude.iterate f z) short-vecA strict version of .‘ short-vecA truly lazy version of liftA2.As opposed to the actual liftA2η it does not inspect the arguments which makes it possible it to use in code that has lazy knot-tying.’ short-vecΧDynamically determine the (actual) size/length of the vector, returning evidence that n$ is "known". If you'd rather obtain n as a standard •, see .+6?ABIJLPRUWY[]^_`bcdefghj†‡ˆ‰Š‹ŒŽ‘’+†‡ˆ‰6cdefghŠŽ’[]jJL‹PRŒUW^_`b?BAYI‘ Safe-Inferred.VžŸ ‘’£€₯      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹79:>^UWgYZLŒŽŒ‘’“Œ”•–—˜Œ™š›œŒžŸ‘ ‘Œ’£€₯¦§¨©ͺ«¬(short-vec-0.1.0.0-AaZIVe1V1dSLGN3Vh9ADeEData.Vec.Short.InternalData.Vec.Short.ExplicitData.Vec.ShortwithSizevLengthPaths_short_vecAccessor_aSize_aIndex MutableVecMV#VecV# foldrEnumFinforMFin_ foldMapFin foldMFin_forMFinprim_newMV unsafeNewMV unsafeWriteMVwriteMVunsafeFreezeMV safeThawMV unsafeCopyVecsliceVecfetch fusibleFetch!indexKsvSizevSize uninitializedunsafeCreateVec createVecaccess materializepureVAmapVA mapWithPosVAseqVAtakeVAdropVArevVArotVAliftA2VA foldMapVA sequenceVA splitFinS addPosSIntappendVA unsafeMkVec tabulateVecmkVec tabulateVec'mkVec' backpermutelistVecwithVec fromListNfromListeqLength vecDataType vecConstr precedenceupdmapVecmap'imapwithPosimap'pureVec_pureVec liftA2Vec liftA2Lazy unsafeIndexK traverseVecvscanlnilappend_++take_drop_splitconcatreshape concatMapiterateiterate'revrot_rotviotacross unsafeInsertinsert unsafeRemoveremovevsortvsortByvsortOn vtranspose vfindIndexvec1vec2vec3vec4vec6vec8valueOfoverIx$fRepresentableVec$fDistributiveVec$fTraversableVec $fMonadVec$fApplicativeVec $fApplyVec$fTraversableWithIndexFinVec$fFoldableWithIndexFinVec$fFunctorWithIndexFinVec$fOrdVec$fEqVec $fDefaultVec$fNumVec$fCoArbitraryVec$fArbitraryVec $fMonoidVec$fSemigroupVec $fNFDataVec $fDiffVec $fPortrayVec $fReadVec $fShowVec $fDataVec $fIsListVec $fFoldableVec $fBindVec $fFunctorVecbaseData.Traversabletraverse Data.FoldablefoldMapghc-prim GHC.TypesInt GHC.MaybeJust#sint-0.1.0.0-3rQur2z0I2hKWWFRQD2Lmt Data.SIntSIntGHC.Basefmap%fin-int-0.1.0.0-4SUEJUK3Sa309xl6S2kfpData.Fin.Int.Explicit unsafeFinGHC.Listscanl GHC.ClassesOrd GHC.TypeNatsKnownNatversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName