śĪ½i±KÓ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œ  ž Ÿ   ” ¢ £ ¤ „ ¦ § Ø © Ŗ « ¬ ­ ® Æ ° ± ² ³ “ µ ¶ · ø ¹ ŗ » ¼ ½ ¾ æ Ą Į Ā Ć Ä Å Ę Ē Č É Ź Ė Ģ Ķ Ī Ļ Š Ń Ņ  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 Ó 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 Ō*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>CÕÖ×Ų 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   (Zip two  s with the given function )Zip two  "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 0Check whether the   contains an element 1 Inverse of 0 2Yield Ł3 the first element that satisfies the predicate or Ś  if no such element exists. 3Yield Ł; the first element that satisfies the monadic predicate or  Ś if no such element exists. 4Yield Ł= the index of the first element that satisfies the predicate  or Ś if no such element exists. 5Yield Ł; the index of the first element that satisfies the monadic  predicate or Ś if no such element exists. 6 Left fold 7"Left fold with a monadic operator 8Same as 7 9Left 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 >Left fold over a non-empty  ! with a strict accumulator and a  monadic operator ? Right fold @#Right fold with a monadic operator A#Right fold over a non-empty stream B;Right fold over a non-empty stream with a monadic operator CUnfold DUnfold with a monadic function E Prefix scan F$Prefix scan with a monadic operator G$Prefix scan with strict accumulator H;Prefix scan with strict accumulator and a monadic operator I Convert a   to a list JConvert a list to a   Ū>  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ>  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ>  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>0K%Alternative name for monadic streams LThe type of pure streams MIdentity monad NOP*Convert a pure stream to a monadic stream Q hint of a L R Attach a  hint to a L S Length of a L T Check if a L is empty UEmpty L V Singleton L W$Replicate a value to a given length XPrepend an element YAppend an element ZConcatenate two Ls [First element of the L or error if empty \Last element of the L 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 a The first n elements bAll but the first n elements cMap a function over a L dZip two Ls with the given function e1Drop elements which do not satisfy the predicate f6Longest prefix of elements that satisfy the predicate g?Drop the longest prefix of elements that satisfy the predicate hCheck whether the L contains an element i Inverse of h jYield Ł- the first element matching the predicate or Ś if no  such element exists. kYield Ł: the index of the first element matching the predicate or  Ś if no such element exists. l Left fold mLeft fold on non-empty Ls n"Left fold with strict accumulator oLeft fold on non-empty Ls with strict accumulator p Right fold qRight fold on non-empty Ls rUnfold s Prefix scan t$Prefix scan with strict accumulator Ü Check if two L s are equal ŻLexicographically compare two Ls u5Apply a monadic action to each element of the stream v Monadic fold w Convert a L to a list x Create a L from a list 2KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx2LKMNOQRSTUVXYWZ[\]^_`abcdefghijklmnopqrstwxPuv.KLMNONOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>y#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. zDCreate 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  z. ˆ@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 L. - The vector will grow logarithmically if the  hint of the L is  inexact. ā提yz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‚ƒ„…yz{|}~€†‡ˆ‰Š‹ŒŽyz{|}~€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>“(Mutable boxed vectors. They live in the ä monad. ”åęē“”“”“””•–—č˜™š›•–—˜™š›•–—˜™š›•––—˜™š›  non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>8œClass 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!  DApply the given function to the element at the given position. This ; interface prevents us from being too lazy. 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 would be bad! With   , we can do  < copy mv v ... = ... unsafeIndex v i (unsafeWrite mv i) ... "which does not have this problem. ”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 L £Create a vector from a L ꤄ 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 « Indexing ¬First element ­ Last element ®@Yield a part of the vector without copying it. Safer version of  Ÿ. starting index length ÆCopy n: elements starting at the given position to a new vector. starting index length °Yield the first n elements without copying. ±Copy the first n elements to a new vector. ²Yield all but the first n elements without copying. ³Copy all but the first n elements to a new vectors. “µ¶·Map a function over a vector ėø)Zip two vectors with the given function. ¹ŗ»¼1Drop elements which do not satisfy the predicate ½FYield the longest prefix of elements satisfying the predicate without  copying. ¾FCopy the longest prefix of elements satisfying the predicate to a new  vector æGDrop the longest prefix of elements that satisfy the predicate without  copying ĄHDrop the longest prefix of elements that satisfy the predicate and copy  the rest to a new vector. Į-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 ķĶConvert a vector to a list ĪConvert a list to a vector 3œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪ3œžŸ ¤„¦Ø©§Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪ¢£”3œžŸ žŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪ  non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>ĻŠ5œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠĻŠĻŠŠ  non-portable experimental'Roman Leshchinskiy <rl@cse.unsw.edu.au>ŃUnboxed vectors Ņ5œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪŃŅŃŅŃŅŅī   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWXY !"#$%&'()*+,-./03579;<=?ADFHJLNPR2CTUZ[\]^_`abc defghijklmnopqqqqrrsnmop t u v d w g x n " # $ % & ' y ( ) f + z . { / | o } 0 3 ~  € 5  7 ‚ 9 ; < = ? A D F H J L P R T U q q q qƒ„…†‡ˆ‰Š‹Œ‹ŒŽ€‘’“”•‹–—˜[\™ š › œ  žŸ vector-0.2Data.Vector.Unboxed.UnboxData.Vector.Fusion.Stream.Size!Data.Vector.Fusion.Stream.MonadicData.Vector.Fusion.StreamData.Vector.MVectorData.Vector.Unboxed.MutableData.Vector.MutableData.Vector.MVector.NewData.Vector.IVector Data.VectorData.Vector.UnboxedUnboxsize#at#read#write#SizeUnknownMaxExactsmallerlargertoMax upperBoundStreamStepDoneSkipYieldsizesizedlengthnullempty singleton replicateconssnoc++headlast!!extractinittailtakedropmapmapMmapM_zipWithzipWithMfilterfilterM takeWhile takeWhileM dropWhile dropWhileMelemnotElemfindfindM findIndex findIndexMfoldlfoldlMfoldMfoldl1foldl1Mfoldl'foldlM'foldl1'foldl1M'foldrfoldrMfoldr1foldr1MunfoldunfoldMprescanl prescanlM prescanl' prescanlM'toListfromListMStreamIdunId liftStreamMVector unsafeNew unsafeNewWith unsafeRead unsafeWriteclearset unsafeCopy unsafeGrow MVectorPure unsafeSliceoverlapsslicenewnewWithreadwritecopygrow transformunstreamupdatereverseVectorNewrunIVectorvnewvlength unsafeIndexstream! takeSlice dropSlice//bpermutezipeqcmptakeWhileSlicedropWhileSliceghc-primGHC.Prim ByteArray# lowerBound DropWhileDropWhile_NextDropWhile_YieldDropWhile_Dropbase Data.MaybeJustNothingerrorEmptyStream gROWTH_FACTORinBoundsmstream munstream unstreamMaxunstreamUnknownGHC.STST uninitialisedmodifynew'inplace inplace_mapinplace_prescanlinplace_prescanl'