C+!      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ 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 { | } ~                     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>O 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. 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 .GDrop the longest prefix of elements that satisfy the monadic predicate /Check whether the    contains an element 0 Inverse of / 1Yield 3 the first element that satisfies the predicate or   if no such element exists. 2Yield ; the first element that satisfies the monadic predicate or   if no such element exists. 3Yield = the index of the first element that satisfies the predicate  or  if no such element exists. 4Yield ; the index of the first element that satisfies the monadic  predicate or  if no such element exists. 5 Left fold 6"Left fold with a monadic operator 7Same as 6 8Left fold over a non-empty    9Left fold over a non-empty    with a monadic operator :Same as 9 ;$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 ?Left fold over a non-empty   ! with a strict accumulator and a  monadic operator @Same as ? A Right fold B#Right fold with a monadic operator C#Right fold over a non-empty stream D;Right fold over a non-empty stream with a monadic operator IUnfold JUnfold with a monadic function K Prefix scan L$Prefix scan with a monadic operator M$Prefix scan with strict accumulator N;Prefix scan with strict accumulator and a monadic operator O Suffix scan P$Suffix scan with a monadic operator Q$Suffix scan with strict accumulator R<Suffix scan with strict acccumulator and a monadic operator SHaskell-style scan T+Haskell-style scan with a monadic operator U+Haskell-style scan with strict accumulator VBHaskell-style scan with strict accumulator and a monadic operator WScan over a non-empty    XScan over a non-empty    with a monadic operator YScan over a non-empty    with a strict accumulator ZScan 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   !"#$G%&'()*+,-./0123456897:;<>?=@ABCDEFHIJKLMNOPQRSTUVWXYZ[\T    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>] Box monad `Identity monad ]^_`ab`ab]^_]^_^_`abab non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>7c%Alternative name for monadic streams dThe type of pure streams g*Convert a pure stream to a monadic stream h hint of a d i Attach a  hint to a d j Length of a d k Check if a d is empty lEmpty d m Singleton d n$Replicate a value to a given length oPrepend an element pAppend an element qConcatenate two ds rFirst element of the d or error if empty sLast element of the d or error if empty tElement at the given position uHExtract a substream of the given length starting at the given position. vAll but the last element wAll but the first element x The first n elements yAll but the first n elements zMap a function over a d |Zip two ds with the given function } Zip three ds 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 d 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 ds "Left fold with strict accumulator Left fold on non-empty ds with strict accumulator  Right fold Right fold on non-empty ds 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 d Scan over a non-empty d with a strict accumulator  Check if two d s are equal Lexicographically compare two ds 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 d to a list  Create a d from a list > cdefghijklmnopqrstuvwxyz{|}~>  dcefhijklmopnqrstuvwxyz{|}~g:cdefghijklmnopqrstuvwxyz{|}~ 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! 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! /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 d. - The vector will grow logarithmically if the  hint of the d 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>3Class 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 d Create a vector from a d  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   . 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>* 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. )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. 2Map a function over a vector 4)Zip two vectors with the given function. 5+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. A Left fold B Lefgt fold on non-empty vectors C"Left fold with strict accumulator D7Left fold on non-empty vectors with strict accumulator E Right fold F Right fold on non-empty vectors N Prefix scan O$Prefix scan with strict accumulator P Suffix scan Q$Suffix scan with strict accumulator RHaskell-style scan S+Haskell-style scan with strict accumulator TScan over a non-empty   UScan over a non-empty   with a strict accumulator XConvert a vector to a list YConvert a list to a vector C !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYC !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYB !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY  non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>*Z#Unboxed vectors of primitive types ] Empty vector ^ Vector with exaclty one element _AVector of the given length with the given value in each position `Prepend an element aAppend an element bConcatenate two vectors c<Create a copy of a vector. Useful when dealing with slices. d Indexing eFirst element f Last element g@Yield a part of the vector without copying it. Safer version of   unsafeSlice. h0Yield all but the last element without copying. i-All but the first element (without copying). jYield the first n elements without copying. kYield all but the first n elements without copying. pMap a function over a vector r)Zip two vectors with the given function. s+Zip three vectors with the given function. t1Drop elements which do not satisfy the predicate u?Yield the longest prefix of elements satisfying the predicate. v@Drop the longest prefix of elements that satisfy the predicate. w-Check whether the vector contains an element x Inverse of w  yYield - the first element matching the predicate or  if no  such element exists. zYield : 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 Z  Scan over a non-empty Z  with a strict accumulator Convert a vector to a list Convert a list to a vector ;Z[\]^_`abcdefghijklmnopqrstuvwxyz{|}~:Z[\]^`a_bcdefghijklmnopqrstuvwxyz{|}~8Z[\]^_`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. 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[\]^_`abcdefghijklmnoppqrrstuvw"#$%&'()*+,-./01234Z8:<>@BCDFHKNQTVXY\^`bdfhjl6JMPSnoxyz{|}~$xxxx   x x   0 1 2 3  $ % & ' ( ) * + , - 0 1 2 3 4 Z 8 : < > @ B C D F H K N Q T V X Y \ ^ ` b d f h j l n o  $ % & ' ( ) * + , - 0 1 2 3 4 Z 8 : < > @ B C D F H K N Q T V X Y \ ^ ` b d f h j l n o  $ % & ' ( ) * + , - 0 1 2 3 4 Z 8 : < > @ B C D F H K N Q T V \ ^ ` b d f h j l n o$%&'()*+,-01234Z8:<>@BCDFHKNQTVXY\^`bdfhjlno  vector-0.4.1Data.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.VectorData.Vector.PrimitiveData.Vector.Storablebase Data.MaybeControl.Monad.STForeign.Storable System.IOinlinePerformIOSizeUnknownMaxExactsmallerlargertoMax 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 lowerBoundJustNothinginBoundsGHC.STSTStorable GHC.IOBaseIOnew' primitive-0.1Data.Primitive.TypesPrim