Hw/      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>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 *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>\ 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 .>Longest prefix of elements that satisfy the monadic predicate /?Drop the longest prefix of elements that satisfy the predicate 0GDrop the longest prefix of elements that satisfy the monadic predicate 1Check whether the   contains an element 2 Inverse of 1 3Yield 3 the first element that satisfies the predicate or   if no such element exists. 4Yield ; the first element that satisfies the monadic predicate or   if no such element exists. 5Yield = the index of the first element that satisfies the predicate  or  if no such element exists. 6Yield ; the index of the first element that satisfies the monadic  predicate or  if no such element exists. 7 Left fold 8"Left fold with a monadic operator 9Same as 8 :Left fold over a non-empty   ;Left fold over a non-empty   with a monadic operator <Same as ; =$Left fold with a strict accumulator >;Left fold with a strict accumulator and a monadic operator ?Same as > @Left fold over a non-empty   with a strict accumulator ALeft fold over a non-empty  ! with a strict accumulator and a  monadic operator BSame as A C Right fold D#Right fold with a monadic operator E#Right fold over a non-empty stream F;Right fold over a non-empty stream with a monadic operator GHIJKUnfold LUnfold with a monadic function M Prefix scan N$Prefix scan with a monadic operator O$Prefix scan with strict accumulator P;Prefix scan with strict accumulator and a monadic operator Q Suffix scan R$Suffix scan with a monadic operator S$Suffix scan with strict accumulator T<Suffix scan with strict acccumulator and a monadic operator UHaskell-style scan V+Haskell-style scan with a monadic operator W+Haskell-style scan with strict accumulator XBHaskell-style scan with strict accumulator and a monadic operator YScan over a non-empty   ZScan over a non-empty   with a monadic operator [Scan over a non-empty   with a strict accumulator \Scan over a non-empty  ) with a strict accumulator and a monadic  operator ] Convert a   to a list ^Convert a list to a   T  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^T  !"#$%&I'()*+,-./012345678:;9<=>@A?BCDEFGHJKLMNOPQRSTUVWXYZ[\]^T   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>_ Box monad `abIdentity monad cd_`abcdbcd_`a_`a`abcdcd non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au><e%Alternative name for monadic streams fThe type of pure streams ghi*Convert a pure stream to a monadic stream j hint of a f k Attach a  hint to a f l Length of a f m Check if a f is empty nEmpty f o Singleton f p$Replicate a value to a given length qPrepend an element rAppend an element sConcatenate two fs tFirst element of the f or error if empty uLast element of the f or error if empty vElement at the given position wHExtract a substream of the given length starting at the given position. starting index length xAll but the last element yAll but the first element z The first n elements {All but the first n elements |Map a function over a f }~Zip two fs with the given function  Zip three fs with the given function 1Drop elements which do not satisfy the predicate 6Longest prefix of elements that satisfy the predicate ?Drop the longest prefix of elements that satisfy the predicate Check whether the f contains an element  Inverse of  Yield - the first element matching the predicate or  if no  such element exists. Yield : the index of the first element matching the predicate or   if no such element exists.  Left fold Left fold on non-empty fs "Left fold with strict accumulator Left fold on non-empty fs with strict accumulator  Right fold Right fold on non-empty fs Unfold  Prefix scan $Prefix scan with strict accumulator  Suffix scan $Suffix scan with strict accumulator Haskell-style scan +Haskell-style scan with strict accumulator Scan over a non-empty f Scan over a non-empty f with a strict accumulator  Check if two f s are equal Lexicographically compare two fs 5Apply a monadic action to each element of the stream  Monadic fold #Monadic fold over non-empty stream %Monadic fold with strict accumulator 9Monad fold over non-empty stream with strict accumulator  Convert a f to a list  Create a f from a list > efghijklmnopqrstuvwxyz{|}~> feghjklmnoqrpstuvwxyz{|}~i:efghijklmnopqrstuvwxyz{|}~ 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 /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  . ?Create a new mutable vector and fill it with elements from the f. - The vector will grow logarithmically if the  hint of the f is  inexact.   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>Mutable -based vectors in the  monad.   non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>7Mutable boxed vectors keyed on the monad they live in ( or  s).   non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>   non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>LClass 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 f Create a vector from a f  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 - the first element matching the predicate or  if no  such element exists. Yield : the index of the first element matching the predicate or   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  Suffix scan $Suffix scan with strict accumulator Haskell-style scan +Haskell-style scan with strict accumulator Scan over a non-empty vector 7Scan over a non-empty vector with a strict accumulator Convert a vector to a list Convert a list to a vector K     K     K      non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>C 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   unsafeSlice. 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. /01234Map a function over a vector 56)Zip two vectors with the given function. 7+Zip three vectors with the given function. 89:;<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 ? AYield - the first element matching the predicate or  if no  such element exists. BYield : the index of the first element matching the predicate or   if no such element exists. C Left fold D Lefgt fold on non-empty vectors E"Left fold with strict accumulator F7Left fold on non-empty vectors with strict accumulator G Right fold H Right fold on non-empty vectors IJKLMNOP Prefix scan Q$Prefix scan with strict accumulator R Suffix scan S$Suffix scan with strict accumulator THaskell-style scan U+Haskell-style scan with strict accumulator VScan over a non-empty  WScan over a non-empty  with a strict accumulator XYZConvert a vector to a list [Convert a list to a vector C !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[C !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>9\#Unboxed vectors of primitive types ]^_ Empty vector ` Vector with exaclty one element aAVector of the given length with the given value in each position bPrepend an element cAppend an element dConcatenate two vectors e<Create a copy of a vector. Useful when dealing with slices. f Indexing gFirst element h Last element i@Yield a part of the vector without copying it. Safer version of   unsafeSlice. starting index length j0Yield all but the last element without copying. k-All but the first element (without copying). lYield the first n elements without copying. mYield all but the first n elements without copying. nopqrMap a function over a vector st)Zip two vectors with the given function. u+Zip three vectors with the given function. v1Drop elements which do not satisfy the predicate w?Yield the longest prefix of elements satisfying the predicate. x@Drop the longest prefix of elements that satisfy the predicate. y-Check whether the vector contains an element z Inverse of y {Yield - the first element matching the predicate or  if no  such element exists. |Yield : the index of the first element matching the predicate or   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  Suffix scan $Suffix scan with strict accumulator Haskell-style scan +Haskell-style scan with strict accumulator Scan over a non-empty \ Scan over a non-empty \ with a strict accumulator Convert a vector to a list Convert a list to a vector ;\]^_`abcdefghijklmnopqrstuvwxyz{|}~;\]^_`bcadefghijklmnopqrstuvwxyz{|}~8\]^_`abcdefghijklmnopqrstuvwxyz{|}~ non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>;-based vectors  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 @Yield a part of the vector without copying it. Safer version of   unsafeSlice. 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 - the first element matching the predicate or  if no  such element exists. Yield : the index of the first element matching the predicate or   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  Suffix scan $Suffix scan with strict accumulator Haskell-style scan +Haskell-style scan with strict accumulator Scan over a non-empty  Scan over a non-empty  with a strict accumulator Convert a vector to a list Convert a list to a vector ==: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqqrsstuvwx#$%&'()*+,-./012345[9;=?ACDEGILORUWYZ]_acegikm7KNQTopyz{|}~%   y y y y   y y   1 2 3 4  % & ' ( ) * + , - . 1 2 3 4 5 [ 9 ; = ? A C D E G I L O R U W Y Z ] _ a c e g i k m o p%&'()*+,-.12345[9;=?ACDEGILORUWYZ]_acegikmop%&'()*+,-.12345[9;=?ACDEGILORUW]_acegikmop%&'()*+,-.12345[9;=?ACDEGILORUWYZ]_acegikmop  vector-0.4.2Data.Vector.StorableData.Vector.PrimitiveData.Vector.Storable.InternalData.Vector.Fusion.Stream.Size!Data.Vector.Fusion.Stream.MonadicData.Vector.Fusion.UtilData.Vector.Fusion.StreamData.Vector.Generic.MutableData.Vector.Primitive.MutableData.Vector.Storable.MutableData.Vector.MutableData.Vector.Generic.NewData.Vector.Generic Data.VectorbaseForeign.StorableStorable primitive-0.1Data.Primitive.TypesPriminlinePerformIOSizeUnknownMaxExactsmallerlargertoMax upperBoundStreamStepDoneSkipYieldsizesizedlengthnullempty singleton replicateconssnoc++headlast!!extractinittailtakedropmapmapMmapM_transzipWithzipWithMzipWith3 zipWith3MfilterfilterM takeWhile takeWhileM dropWhile dropWhileMelemnotElemfindfindM findIndex findIndexMfoldlfoldlMfoldMfoldl1foldl1Mfold1Mfoldl'foldlM'foldM'foldl1'foldl1M'fold1M'foldrfoldrMfoldr1foldr1Mandor concatMap concatMapMunfoldrunfoldrMprescanl prescanlM prescanl' prescanlM' postscanl postscanlM postscanl' postscanlM'scanlscanlMscanl'scanlM'scanl1scanl1Mscanl1'scanl1M'toListfromListBoxunBoxIdunIdMStreaminplaceinplace' liftStreamMVector unsafeNew unsafeNewWith unsafeRead unsafeWriteclearset unsafeCopy unsafeGrow MVectorPure unsafeSliceoverlapsslicenewnewWithreadwritecopygrow transformunstreamaccumupdatereverseSTVectorIOVectorNewrunVectorvnewvlength unsafeIndexMstream!indexMheadMlastM// backpermutezipzip3unzipunzip3eqcmpsumproductmaximumminimum enumFromToenumFromThenTo lowerBound DropWhileDropWhile_NextDropWhile_YieldDropWhile_Drop Data.MaybeJustNothing streamErrorerrorEmptyStreamerrorNegativeIndexerrorIndexOutOfRange gROWTH_FACTORinBoundsmstream munstream unstreamMaxunstreamUnknownGHC.STSTghc-prim GHC.TypesIO uninitialisedapplymodifynew'