h      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>5Class of types which can be stored in unboxed arrays Yield the size in bytes of a h which can store n elements &Dummy type parameter, never evaluated Number of elements  Indexing (Yield the element at the given position .Store the given element at the given position portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>  Size hint  Unknown size Upper bound on the size  Exact size Minimum of two size hints Maximum of two size hints &Convert a size hint to an upper bound i*Compute the minimum size from a size hint 6Compute the maximum size from a size hint if possible     non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>Mjklm Monadic streams +Result of taking a single step in a stream end of stream just a new seed a new element and a new seed  hint of a    Attach a  hint to a    Length of a    Check if a   is empty Empty    Singleton   $Replicate a value to a given length Prepend an element Append an element Concatenate two  s First element of the   or error if empty Last element of the   or error if empty Element at the given position HExtract a substream of the given length starting at the given position. starting index length !All but the last element "All but the first element # The first n elements $All but the first n elements %Map a function over a   &Map a monadic function over a   '1Execute a monadic action for each element of the   ( Transform a   to use a different monad )Zip two  s with the given function *Zip two  "s with the given monadic function + Zip three  s with the given function , Zip three  "s with the given monadic function -1Drop elements which do not satisfy the predicate .9Drop elements which do not satisfy the monadic predicate /6Longest prefix of elements that satisfy the predicate 0>Longest prefix of elements that satisfy the monadic predicate 1?Drop the longest prefix of elements that satisfy the predicate 2GDrop the longest prefix of elements that satisfy the monadic predicate 3Check whether the   contains an element 4 Inverse of 3 5Yield n3 the first element that satisfies the predicate or o  if no such element exists. 6Yield n; the first element that satisfies the monadic predicate or  o if no such element exists. 7Yield n= the index of the first element that satisfies the predicate  or o if no such element exists. 8Yield n; the index of the first element that satisfies the monadic  predicate or o if no such element exists. 9 Left fold :"Left fold with a monadic operator ;Same as : <Left fold over a non-empty   =Left fold over a non-empty   with a monadic operator >$Left fold with a strict accumulator ?;Left fold with a strict accumulator and a monadic operator @Left fold over a non-empty   with a strict accumulator ALeft fold over a non-empty  ! with a strict accumulator and a  monadic operator B Right fold C#Right fold with a monadic operator D#Right fold over a non-empty stream E;Right fold over a non-empty stream with a monadic operator FGHIJUnfold KUnfold with a monadic function L Prefix scan M$Prefix scan with a monadic operator N$Prefix scan with strict accumulator O;Prefix scan with strict accumulator and a monadic operator P Convert a   to a list QConvert a list to a   pqrsE  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQE  !"#$%&'(H)*+,-./0123456789:;<=>?@ABCDEFGIJKLMNOPQE  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQportable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>R Box monad STUIdentity monad VWRSTUVWUVWRSTRSTSTUVWVW non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>1X%Alternative name for monadic streams YThe type of pure streams Z*Convert a pure stream to a monadic stream [ hint of a Y \ Attach a  hint to a Y ] Length of a Y ^ Check if a Y is empty _Empty Y ` Singleton Y a$Replicate a value to a given length bPrepend an element cAppend an element dConcatenate two Ys eFirst element of the Y or error if empty fLast element of the Y or error if empty gElement at the given position hHExtract a substream of the given length starting at the given position. starting index length iAll but the last element jAll but the first element k The first n elements lAll but the first n elements mMap a function over a Y noZip two Ys with the given function p Zip three Ys with the given function q1Drop elements which do not satisfy the predicate r6Longest prefix of elements that satisfy the predicate s?Drop the longest prefix of elements that satisfy the predicate tCheck whether the Y contains an element u Inverse of t vYield n- the first element matching the predicate or o if no  such element exists. wYield n: the index of the first element matching the predicate or  o if no such element exists. x Left fold yLeft fold on non-empty Ys z"Left fold with strict accumulator {Left fold on non-empty Ys with strict accumulator | Right fold }Right fold on non-empty Ys ~Unfold  Prefix scan $Prefix scan with strict accumulator t Check if two Y s are equal uLexicographically compare two Ys 5Apply a monadic action to each element of the stream  Monadic fold  Convert a Y to a list  Create a Y from a list 3XYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~3YX[\]^_`bcadefghijklmnopqrstuvwxyz{|}~Z/XYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>#Class of mutable vectors. The type m# is the monad in which the mutable  vector can be transformed and a is the type of elements. DCreate a mutable vector of the given length. Length is not checked! @Create a mutable vector of the given length and fill it with an ' initial value. Length is not checked! ?Yield the element at the given position. Index is not checked! AReplace the element at the given position. Index is not checked! )Clear all references to external objects "Write the value at each position. ECopy a vector. The two vectors may not overlap. This is not checked! target source AGrow a vector by the given number of elements. The length is not  checked! (Basic pure functions on mutable vectors Length of the mutable vector HYield a part of the mutable vector without copying it. No range checks! starting index length of the slice vw/Test whether the index is valid for the vector HYield a part of the mutable vector without copying it. Safer version of  . >Create a mutable vector of the given length. Safer version of  . @Create a mutable vector of the given length and fill it with an ! initial value. Safer version of . :Yield the element at the given position. Safer version of . <Replace the element at the given position. Safer version of  . ACopy a vector. The two vectors may not overlap. Safer version of  . @Grow a vector by the given number of elements. Safer version of  . xy?Create a new mutable vector and fill it with elements from the Y. - The vector will grow logarithmically if the  hint of the Y is  inexact. z{ non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>*Mutable unboxed vectors. They live in the | monad.  non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>IO-based mutable vectors }  non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>(Mutable boxed vectors. They live in the | monad. ~  non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>IO-based mutable vectors     non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>JClass of immutable vectors. BConstruct a pure vector from a monadic initialiser (not fusible!) $Length of the vector (not fusible!) @Yield a part of the vector without copying it. No range checks! HYield the element at the given position in a monad. The monad allows us 7 to be strict in the vector if we want. Suppose we had   unsafeIndex :: v a -> Int -> a /instead. Now, if we wanted to copy a vector, we'd do something like  < copy mv v ... = ... unsafeWrite mv i (unsafeIndex v i) ... JFor lazy vectors, the indexing would not be evaluated which means that we K would retain a reference to the original vector in each element we write.  This is not what we want! With  , we can do  . copy mv v ... = ... case unsafeIndexM v i of 7 Box x -> unsafeWrite mv i x ... Hwhich does not have this problem because indexing (but not the returned % element!) is evaluated immediately. 4Construct a pure vector from a monadic initialiser Same as : but with a dummy argument necessary for correctly typing  the rule  uninplace.  See http:hackage.haskell.orgtracghcticket2600 Convert a vector to a Y Create a vector from a Y  Empty vector  Vector with exaclty one element AVector of the given length with the given value in each position Prepend an element Append an element Concatenate two vectors <Create a copy of a vector. Useful when dealing with slices.  Indexing First element  Last element KMonadic indexing which can be strict in the vector while remaining lazy in  the element. @Yield a part of the vector without copying it. Safer version of  . starting index length 0Yield all but the last element without copying. -All but the first element (without copying). Yield the first n elements without copying. Yield all but the first n elements without copying. Map a function over a vector )Zip two vectors with the given function. +Zip three vectors with the given function. 1Drop elements which do not satisfy the predicate ?Yield the longest prefix of elements satisfying the predicate. @Drop the longest prefix of elements that satisfy the predicate. -Check whether the vector contains an element  Inverse of  Yield n- the first element matching the predicate or o if no  such element exists. Yield n: the index of the first element matching the predicate or  o if no such element exists.  Left fold  Lefgt fold on non-empty vectors "Left fold with strict accumulator 7Left fold on non-empty vectors with strict accumulator  Right fold  Right fold on non-empty vectors  Prefix scan $Prefix scan with strict accumulator Convert a vector to a list Convert a list to a vector EEE  non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>= Empty vector  Vector with exaclty one element AVector of the given length with the given value in each position Prepend an element Append an element Concatenate two vectors <Create a copy of a vector. Useful when dealing with slices.  Indexing First element  Last element KMonadic indexing which can be strict in the vector while remaining lazy in  the element   @Yield a part of the vector without copying it. Safer version of  . starting index length  0Yield all but the last element without copying.  -All but the first element (without copying).  Yield the first n elements without copying. Yield all but the first n elements without copying. Map a function over a vector )Zip two vectors with the given function. +Zip three vectors with the given function. 1Drop elements which do not satisfy the predicate ?Yield the longest prefix of elements satisfying the predicate. @Drop the longest prefix of elements that satisfy the predicate. -Check whether the vector contains an element   Inverse of  !Yield n- the first element matching the predicate or o if no  such element exists. "Yield n: the index of the first element matching the predicate or  o if no such element exists. # Left fold $ Lefgt fold on non-empty vectors %"Left fold with strict accumulator &7Left fold on non-empty vectors with strict accumulator ' Right fold ( Right fold on non-empty vectors )*+,-./0 Prefix scan 1$Prefix scan with strict accumulator 234Convert a vector to a list 5Convert a list to a vector <      !"#$%&'()*+,-./012345<      !"#$%&'()*+,-./012345<      !"#$%&'()*+,-./012345 non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>36Unboxed vectors 789 Empty vector : Vector with exaclty one element ;AVector of the given length with the given value in each position <Prepend an element =Append an element >Concatenate two vectors ?<Create a copy of a vector. Useful when dealing with slices. @ Indexing AFirst element B Last element C@Yield a part of the vector without copying it. Safer version of  . starting index length D0Yield all but the last element without copying. E-All but the first element (without copying). FYield the first n elements without copying. GYield all but the first n elements without copying. HIJKLMap a function over a vector MN)Zip two vectors with the given function. O+Zip three vectors with the given function. P1Drop elements which do not satisfy the predicate Q?Yield the longest prefix of elements satisfying the predicate. R@Drop the longest prefix of elements that satisfy the predicate. S-Check whether the vector contains an element T Inverse of S UYield n- the first element matching the predicate or o if no  such element exists. VYield n: the index of the first element matching the predicate or  o if no such element exists. W Left fold X Lefgt fold on non-empty vectors Y"Left fold with strict accumulator Z7Left fold on non-empty vectors with strict accumulator [ Right fold \ Right fold on non-empty vectors ]^_`ab Prefix scan c$Prefix scan with strict accumulator defConvert a vector to a list gConvert a list to a vector 26789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg26789:<=;>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg26789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_``abbcde!"#$%&'()*+,-./0123V79;=?ABCEGJLNPRTUXZ\5I^_fghijklmno#pqrstuvwxyz{|}~~~~ ~ ~ ~ ~   z y r / 0 1 2 { | }  p s z # $ % & ' ( ) * w + , r / 0 1 2 { | } 3 V 7 9 ; = ? A B C E G J L N P R T U X Z \ ^ _ ~ # $ % & ' ( ) * w + , r / 0 1 2 { | } 3 V 7 9 ; = ? A B C E G J L N P R T U X Z \ ^ _~#$%&'()*w+,r/012{}3V79;=?ABCEGJLNPRXZ\^_ g h ~~ vector-0.3.1Data.Vector.Unboxed.UnboxData.Vector.Fusion.Stream.Size!Data.Vector.Fusion.Stream.MonadicData.Vector.Fusion.UtilData.Vector.Fusion.StreamData.Vector.MVectorData.Vector.Unboxed.Mutable.STData.Vector.Unboxed.Mutable.IOData.Vector.Mutable.STData.Vector.Mutable.IOData.Vector.MVector.NewData.Vector.IVector Data.VectorData.Vector.UnboxedUnboxsize#at#read#write#SizeUnknownMaxExactsmallerlargertoMax upperBoundStreamStepDoneSkipYieldsizesizedlengthnullempty singleton replicateconssnoc++headlast!!extractinittailtakedropmapmapMmapM_transzipWithzipWithMzipWith3 zipWith3MfilterfilterM takeWhile takeWhileM dropWhile dropWhileMelemnotElemfindfindM findIndex findIndexMfoldlfoldlMfoldMfoldl1foldl1Mfoldl'foldlM'foldl1'foldl1M'foldrfoldrMfoldr1foldr1Mandor concatMap concatMapMunfoldrunfoldrMprescanl prescanlM prescanl' prescanlM'toListfromListBoxunBoxIdunIdMStream liftStreamMVector unsafeNew unsafeNewWith unsafeRead unsafeWriteclearset unsafeCopy unsafeGrow MVectorPure unsafeSliceoverlapsslicenewnewWithreadwritecopygrow transformunstreamaccumupdatereverseVectorNewrunIVectorvnewvlength unsafeIndexMstream!indexMheadMlastM// backpermutezipzip3unzipunzip3eqcmpsumproductmaximumminimum enumFromToenumFromThenToghc-primGHC.Prim ByteArray# lowerBound DropWhileDropWhile_NextDropWhile_YieldDropWhile_Dropbase Data.MaybeJustNothing streamErrorerrorEmptyStreamerrorNegativeIndexerrorIndexOutOfRange gROWTH_FACTORinBoundsmstream munstream unstreamMaxunstreamUnknownGHC.STSTstToIO uninitialisedapplymodifynew'inplace inplace_mapinplace_prescanlinplace_prescanl'