h$TN.      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Trustworthy< SafevSafe./3}&vecEasily fuseable .It on purpose doesn't have bad (fusion-wise) instances, like  Traversable4. Generally, there aren't functions which would be  bad consumers or  bad producers.vecEmpty .vec with exactly one element.L.fromPull $ singleton True True ::: VNilvecConvert  to list.vecConvert  to NonEmpty.vec Convert list [a] to  n a . Returns  if lengths don't match exactly.:L.fromPull <$> fromList "foo" :: Maybe (L.Vec N.Nat3 Char)#Just ('f' ::: 'o' ::: 'o' ::: VNil);L.fromPull <$> fromList "quux" :: Maybe (L.Vec N.Nat3 Char)Nothing9L.fromPull <$> fromList "xy" :: Maybe (L.Vec N.Nat3 Char)Nothingvec Convert list [a] to  n a . Returns  if input list is too short.L.fromPull <$> fromListPrefix "foo" :: Maybe (L.Vec N.Nat3 Char)#Just ('f' ::: 'o' ::: 'o' ::: VNil)L.fromPull <$> fromListPrefix "quux" :: Maybe (L.Vec N.Nat3 Char)#Just ('q' ::: 'u' ::: 'u' ::: VNil)?L.fromPull <$> fromListPrefix "xy" :: Maybe (L.Vec N.Nat3 Char)Nothing vecReify any list [a] to  n a.reifyList "foo" length3 vec Indexing. vecCons an element in front of a . vec%Add a single element at the end of a .vecThe first element of a .vecThe last element of a .vecThe elements after the  of a .vecThe elements before the  of a .vecReverse .vec?L.fromPull $ map not $ L.toPull $ True L.::: False L.::: L.VNilFalse ::: True ::: VNilvecL.fromPull $ imap (,) $ L.toPull $ 'a' L.::: 'b' L.::: 'c' L.::: L.VNil((0,'a') ::: (1,'b') ::: (2,'c') ::: VNilvecSee .vecSee  .vecSee .vec"There is no type-class for this :(vec Right fold.vecRight fold with an index.vecStrict left fold.vecYield the length of a .vecTest whether a  is empty.vecStrict .vecStrict . vecZip two s with a function.!vecZip two 9s. with a function that also takes the elements' indices."vec Repeat value#vec Monadic bind.$vec Monadic join.%vecGet all  n in a  n.0L.fromPull (universe :: Vec N.Nat3 (Fin N.Nat3))0 ::: 1 ::: 2 ::: VNil&vec0vec1vec&  !"#$%&  !"#$%Safe/0>!{75vec!Vector, i.e. length-indexed list.8vecEmpty 5.9vec5 with exactly one element.singleton True True ::: VNil:vecConvert to pull .;vecConvert from pull .<vecConvert 5 to list.%toList $ 'f' ::: 'o' ::: 'o' ::: VNil"foo"=vec#toNonEmpty $ 1 ::: 2 ::: 3 ::: VNil 1 :| [2,3]>vec Convert list [a] to 5 n a . Returns  if lengths don't match exactly.)fromList "foo" :: Maybe (Vec N.Nat3 Char)#Just ('f' ::: 'o' ::: 'o' ::: VNil)*fromList "quux" :: Maybe (Vec N.Nat3 Char)Nothing(fromList "xy" :: Maybe (Vec N.Nat3 Char)Nothing?vec Convert list [a] to 5 n a . Returns  if input list is too short./fromListPrefix "foo" :: Maybe (Vec N.Nat3 Char)#Just ('f' ::: 'o' ::: 'o' ::: VNil)0fromListPrefix "quux" :: Maybe (Vec N.Nat3 Char)#Just ('q' ::: 'u' ::: 'u' ::: VNil).fromListPrefix "xy" :: Maybe (Vec N.Nat3 Char)Nothing@vecReify any list [a] to 5 n a.reifyList "foo" length3Avec Indexing.&('a' ::: 'b' ::: 'c' ::: VNil) ! FS FZ'b'BvecTabulating, inverse of A.&tabulate id :: Vec N.Nat3 (Fin N.Nat3)0 ::: 1 ::: 2 ::: VNilCvecCons an element in front of a 5.Dvec%Add a single element at the end of a 5.EvecThe first element of a 5.FvecThe elements after the E of a 5.GvecThe last element of a 5.HvecThe elements before the G of a 5.IvecReverse 5.&reverse ('a' ::: 'b' ::: 'c' ::: VNil)'c' ::: 'b' ::: 'a' ::: VNilJvec Append two 5.0('a' ::: 'b' ::: VNil) ++ ('c' ::: 'd' ::: VNil)$'a' ::: 'b' ::: 'c' ::: 'd' ::: VNilKvec(Split vector into two parts. Inverse of J.split ('a' ::: 'b' ::: 'c' ::: VNil) :: (Vec N.Nat1 Char, Vec N.Nat2 Char)#('a' ::: VNil,'b' ::: 'c' ::: VNil)uncurry (++) (split ('a' ::: 'b' ::: 'c' ::: VNil) :: (Vec N.Nat1 Char, Vec N.Nat2 Char))'a' ::: 'b' ::: 'c' ::: VNilLvecMap over all the elements of a 5 and concatenate the resulting 5s.9concatMap (\x -> x ::: x ::: VNil) ('a' ::: 'b' ::: VNil)$'a' ::: 'a' ::: 'b' ::: 'b' ::: VNilMvec L Nvec Inverse of M.chunks <$> fromListPrefix [1..] :: Maybe (Vec N.Nat2 (Vec N.Nat3 Int))Just ((1 ::: 2 ::: 3 ::: VNil) ::: (4 ::: 5 ::: 6 ::: VNil) ::: VNil).let idVec x = x :: Vec N.Nat2 (Vec N.Nat3 Int)0concat . idVec . chunks <$> fromListPrefix [1..]/Just (1 ::: 2 ::: 3 ::: 4 ::: 5 ::: 6 ::: VNil)Ovec!map not $ True ::: False ::: VNilFalse ::: True ::: VNilPvec'imap (,) $ 'a' ::: 'b' ::: 'c' ::: VNil((0,'a') ::: (1,'b') ::: (2,'c') ::: VNilQvec&Apply an action to every element of a 5 , yielding a 5 of results.RvecApply an action to non-empty 5 , yielding a 5 of results.Svec&Apply an action to every element of a 5 and its index, yielding a 5 of results.Tvec&Apply an action to every element of a 5% and its index, ignoring the results.UvecSee .VvecSee .WvecSee  .Xvec"There is no type-class for this :(Yvec Right fold.ZvecRight fold with an index.[vecYield the length of a 5. O(n)\vecTest whether a 5 is empty. O(1)]vec Non-strict ].^vec Non-strict ^._vecZip two 5s with a function.`vecZip two 59s. with a function that also takes the elements' indices.avec Repeat valuerepeat 'x' :: Vec N.Nat3 Char'x' ::: 'x' ::: 'x' ::: VNilbvec Monadic bind.cvec Monadic join.join $ ('a' ::: 'b' ::: VNil) ::: ('c' ::: 'd' ::: VNil) ::: VNil'a' ::: 'd' ::: VNildvecGet all  n in a 5 n.#universe :: Vec N.Nat3 (Fin N.Nat3)0 ::: 1 ::: 2 ::: VNilevec Ensure spine.If we have an undefined 5,&let v = error "err" :: Vec N.Nat3 CharAnd insert data into it later:let setHead :: a -> Vec ('S n) a -> Vec ('S n) a; setHead x (_ ::: xs) = x ::: xs#Then without a spine, it will fail:head $ setHead 'x' v*** Exception: err...But with the spine, it won't:"head $ setHead 'x' $ ensureSpine v'x'rvecsvectveczvec{vec,'a' ::: 'b' ::: VNil == 'a' ::: 'c' ::: VNilFalse|vec}vec5compare ('a' ::: 'b' ::: VNil) ('a' ::: 'c' ::: VNil)LT~vec156789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde156789:;<=>?@ABCDEGFHIJKLMNUVWXYZ[\]^OPQRST_`abcde65J5Safe-./9>?(vec'Constraint for the class that computes .vec'Constraint for the class that computes .vecCompute the size from the type.vecGeneric pigeonholes. Examples:from (Identity 'a') 'a' ::: VNil0data Values a = Values a a a deriving (Generic1)instance Pigeonhole Valuesfrom (Values 1 2 3)1 ::: 2 ::: 3 ::: VNilvecThe size of a pigeonholevecConverts a value to vectorvecConverts back from vector.vecIndex.*gindex (Identity 'y') (Proxy :: Proxy Int)'y'0data Key = Key1 | Key2 | Key3 deriving (Generic)0data Values a = Values a a a deriving (Generic1) gindex (Values 'a' 'b' 'c') Key2'b'vec Tabulate.'gtabulate (\() -> 'x') :: Identity Char Identity 'x'!gtabulate absurd :: Proxy IntegerProxy!gtabulate absurd :: Proxy IntegerProxyvecA lens. i -> Lens' (t a) a!Lens.view (gix ()) (Identity 'x')'x')Lens.over (gix ()) toUpper (Identity 'x') Identity 'X'vecGeneric traverse. Don't use , rather use DeriveTraversablevecTraverse with index.6data Key = Key1 | Key2 | Key3 deriving (Show, Generic)0data Values a = Values a a a deriving (Generic1)?gitraverse (\i a -> Const [(i :: Key, a)]) (Values 'a' 'b' 'c')(Const [(Key1,'a'),(Key2,'b'),(Key3,'c')]vecGeneric version of .vecGeneric version of .vec f g x ~ x ^ (size f + size g)vec x ~ x ^ 0vec x ~ x ^ 1  Trustworthy(nSafe'(/23>>L=vecWrite functions on . Use them with tuples. can be used to avoid "this function won't change the length of the list" in DSLs.bad: Instead of /[x, y] <- badDslMagic ["foo", "bar"] -- list! good: we can write <(x, y) <- betterDslMagic ("foo", "bar") -- homogenic tuple! where betterDslMagic can be defined using . Moreally lens Each< should be a superclass, but there's no strict need for it.vec!Vector, i.e. length-indexed list.vecEmpty .vec with exactly one element.singleton True True ::: VNilvecO(n) . Recover  (and ) dictionary from a  value. Example:  is constrained with  n, but if we have a  n a!, we can recover that dictionary:let f :: forall n a. Vec n a -> N.Nat; f v = withDict v (N.reflect (Proxy :: Proxy n)) in f (True ::: VNil)1Note: using  will be suboptimal, as if GHC has no opportunity to optimise the code, the recusion won't be unfold. How bad such code will perform? I don't know, we'll need benchmarks.vecConvert to pull .vecConvert from pull .vecConvert  to list.%toList $ 'f' ::: 'o' ::: 'o' ::: VNil"foo"vec#toNonEmpty $ 1 ::: 2 ::: 3 ::: VNil 1 :| [2,3]vec Convert list [a] to  n a . Returns  if lengths don't match exactly.)fromList "foo" :: Maybe (Vec N.Nat3 Char)#Just ('f' ::: 'o' ::: 'o' ::: VNil)*fromList "quux" :: Maybe (Vec N.Nat3 Char)Nothing(fromList "xy" :: Maybe (Vec N.Nat3 Char)Nothingvec Convert list [a] to  n a . Returns  if input list is too short./fromListPrefix "foo" :: Maybe (Vec N.Nat3 Char)#Just ('f' ::: 'o' ::: 'o' ::: VNil)0fromListPrefix "quux" :: Maybe (Vec N.Nat3 Char)#Just ('q' ::: 'u' ::: 'u' ::: VNil).fromListPrefix "xy" :: Maybe (Vec N.Nat3 Char)NothingvecReify any list [a] to  n a.reifyList "foo" length3vec Indexing.&('a' ::: 'b' ::: 'c' ::: VNil) ! FS FZ'b'vecTabulating, inverse of .&tabulate id :: Vec N.Nat3 (Fin N.Nat3)0 ::: 1 ::: 2 ::: VNilvecCons an element in front of a .vec%Add a single element at the end of a .vecThe first element of a .vecThe last element of a .vecThe elements after the  of a .vecThe elements before the  of a .vecReverse .&reverse ('a' ::: 'b' ::: 'c' ::: VNil)'c' ::: 'b' ::: 'a' ::: VNilvecDependent right fold.This could been called an indexed fold, but that name is already used.vecDependent left fold.vecDependent strict left fold.vec Append two .0('a' ::: 'b' ::: VNil) ++ ('c' ::: 'd' ::: VNil)$'a' ::: 'b' ::: 'c' ::: 'd' ::: VNilvec(Split vector into two parts. Inverse of .split ('a' ::: 'b' ::: 'c' ::: VNil) :: (Vec N.Nat1 Char, Vec N.Nat2 Char)#('a' ::: VNil,'b' ::: 'c' ::: VNil)uncurry (++) (split ('a' ::: 'b' ::: 'c' ::: VNil) :: (Vec N.Nat1 Char, Vec N.Nat2 Char))'a' ::: 'b' ::: 'c' ::: VNilvecMap over all the elements of a  and concatenate the resulting s.9concatMap (\x -> x ::: x ::: VNil) ('a' ::: 'b' ::: VNil)$'a' ::: 'a' ::: 'b' ::: 'b' ::: VNilvec  vec Inverse of .chunks <$> fromListPrefix [1..] :: Maybe (Vec N.Nat2 (Vec N.Nat3 Int))Just ((1 ::: 2 ::: 3 ::: VNil) ::: (4 ::: 5 ::: 6 ::: VNil) ::: VNil).let idVec x = x :: Vec N.Nat2 (Vec N.Nat3 Int)0concat . idVec . chunks <$> fromListPrefix [1..]/Just (1 ::: 2 ::: 3 ::: 4 ::: 5 ::: 6 ::: VNil)vec5let xs = 'a' ::: 'b' ::: 'c' ::: 'd' ::: 'e' ::: VNiltake xs :: Vec N.Nat3 Char'a' ::: 'b' ::: 'c' ::: VNilvec5let xs = 'a' ::: 'b' ::: 'c' ::: 'd' ::: 'e' ::: VNildrop xs :: Vec N.Nat3 Char'c' ::: 'd' ::: 'e' ::: VNilvec!map not $ True ::: False ::: VNilFalse ::: True ::: VNilvec'imap (,) $ 'a' ::: 'b' ::: 'c' ::: VNil((0,'a') ::: (1,'b') ::: (2,'c') ::: VNilvec&Apply an action to every element of a  , yielding a  of results.vecApply an action to non-empty  , yielding a  of results.vec&Apply an action to every element of a  and its index, yielding a  of results.vec&Apply an action to every element of a % and its index, ignoring the results.vecSee .vecSee .vecSee  .vec"There is no type-class for this :(vec Right fold.vecRight fold with an index.vecStrict left fold.vecYield the length of a . O(n)vecTest whether a  is empty. O(1)vec Non-strict .vec Non-strict .vecZip two s with a function.vecZip two 9s. with a function that also takes the elements' indices.vecRepeat a value.repeat 'x' :: Vec N.Nat3 Char'x' ::: 'x' ::: 'x' ::: VNilvec Monadic bind.vec Monadic join.join $ ('a' ::: 'b' ::: VNil) ::: ('c' ::: 'd' ::: VNil) ::: VNil'a' ::: 'd' ::: VNilvecGet all  n in a  n.#universe :: Vec N.Nat3 (Fin N.Nat3)0 ::: 1 ::: 2 ::: VNilvecvecvecvecvecvecvec::55Safe'(/>MW&vecConvert to pull .vecConvert from pull .vecConvert  to list.%toList $ 'f' ::: 'o' ::: 'o' ::: VNil"foo"vec#toNonEmpty $ 1 ::: 2 ::: 3 ::: VNil 1 :| [2,3]vec Convert list [a] to  n a . Returns  if lengths don't match exactly.)fromList "foo" :: Maybe (Vec N.Nat3 Char)#Just ('f' ::: 'o' ::: 'o' ::: VNil)*fromList "quux" :: Maybe (Vec N.Nat3 Char)Nothing(fromList "xy" :: Maybe (Vec N.Nat3 Char)Nothingvec Convert list [a] to  n a . Returns  if input list is too short./fromListPrefix "foo" :: Maybe (Vec N.Nat3 Char)#Just ('f' ::: 'o' ::: 'o' ::: VNil)0fromListPrefix "quux" :: Maybe (Vec N.Nat3 Char)#Just ('q' ::: 'u' ::: 'u' ::: VNil).fromListPrefix "xy" :: Maybe (Vec N.Nat3 Char)Nothingvec Indexing.&('a' ::: 'b' ::: 'c' ::: VNil) ! FS FZ'b'vecTabulating, inverse of .&tabulate id :: Vec N.Nat3 (Fin N.Nat3)0 ::: 1 ::: 2 ::: VNilvec%Add a single element at the end of a .vecThe last element of a .vecThe elements before the  of a .vecReverse .&reverse ('a' ::: 'b' ::: 'c' ::: VNil)'c' ::: 'b' ::: 'a' ::: VNilvec Append two .0('a' ::: 'b' ::: VNil) ++ ('c' ::: 'd' ::: VNil)$'a' ::: 'b' ::: 'c' ::: 'd' ::: VNilvec(Split vector into two parts. Inverse of .split ('a' ::: 'b' ::: 'c' ::: VNil) :: (Vec N.Nat1 Char, Vec N.Nat2 Char)#('a' ::: VNil,'b' ::: 'c' ::: VNil)uncurry (++) (split ('a' ::: 'b' ::: 'c' ::: VNil) :: (Vec N.Nat1 Char, Vec N.Nat2 Char))'a' ::: 'b' ::: 'c' ::: VNilvecMap over all the elements of a  and concatenate the resulting s.9concatMap (\x -> x ::: x ::: VNil) ('a' ::: 'b' ::: VNil)$'a' ::: 'a' ::: 'b' ::: 'b' ::: VNilvec  vec Inverse of .chunks <$> fromListPrefix [1..] :: Maybe (Vec N.Nat2 (Vec N.Nat3 Int))Just ((1 ::: 2 ::: 3 ::: VNil) ::: (4 ::: 5 ::: 6 ::: VNil) ::: VNil).let idVec x = x :: Vec N.Nat2 (Vec N.Nat3 Int)0concat . idVec . chunks <$> fromListPrefix [1..]/Just (1 ::: 2 ::: 3 ::: 4 ::: 5 ::: 6 ::: VNil)vec!map not $ True ::: False ::: VNilFalse ::: True ::: VNilvec'imap (,) $ 'a' ::: 'b' ::: 'c' ::: VNil((0,'a') ::: (1,'b') ::: (2,'c') ::: VNilvec&Apply an action to every element of a  , yielding a  of results.vecApply an action to non-empty  , yielding a  of results.vec&Apply an action to every element of a  and its index, yielding a  of results.vec&Apply an action to every element of a % and its index, ignoring the results.vecSee  .vecSee  .vecSee  .vec"There is no type-class for this :(vec Right fold.vecRight fold with an index.vecYield the length of a . O(n)vec Non-strict .vec Non-strict .vecZip two s with a function.vecZip two 9s. with a function that also takes the elements' indices.vec Repeat valuerepeat 'x' :: Vec N.Nat3 Char'x' ::: 'x' ::: 'x' ::: VNilvec Monadic bind.vec Monadic join.join $ ('a' ::: 'b' ::: VNil) ::: ('c' ::: 'd' ::: VNil) ::: VNil'a' ::: 'd' ::: VNilvecGet all  n in a  n.#universe :: Vec N.Nat3 (Fin N.Nat3)0 ::: 1 ::: 2 ::: VNil335   !"#$%&'()*+,-./0123456789:;<=>?@ ABCDEFGHI JKLM!#"$%&()*+,-./01NOPQR3456789:S<=TU;>?V@WXYZ[\]^_`abcdefghijklmnopqrstuvwx BAyCDz{|EFGHI}~ JKLM!#"$%&'()*+,-./01OPQRYWV23456789:\[U;S<=T>?ZX@CDEFGHI JKLM!#"$%&(*+,-./01   vec-0.4.1-KLR9P4ZlshTAGrfNBxNeRt Data.Vec.PullData.Vec.DataFamily.SpineStrict*Data.Vec.DataFamily.SpineStrict.Pigeonhole Data.Vec.LazyData.Vec.Lazy.InlineControl.Lens.YoctoData.Functor.ConfusingIFoldableWithIndex SafeCompatFoldable Foldable1VecunVecempty singletontoList toNonEmptyfromListfromListPrefix reifyList!tabulateconssnocheadlasttailinitreversemapimapfoldMapifoldMapfoldMap1 ifoldMap1foldrifoldrfoldl'lengthnullsumproductzipWithizipWithrepeatbindjoinuniverse $fBoringVec $fBindVec $fApplyVec $fMonoidVec$fSemigroupVec$fRepresentableVec$fDistributiveVec $fMonadVec$fApplicativeVec$fFoldable1Vec$fFoldableWithIndexFinVec$fFunctorWithIndexFinVec $fFoldableVec $fFunctorVec$fEqVec:::VNiltoPullfromPull++split concatMapconcatchunkstraverse traverse1 itraverse itraverse_ ensureSpine $fFunctionVec$fCoArbitraryVec$fArbitraryVec$fArbitrary1Vec$fTraversableWithIndexFinVec$fTraversableVec$fTraversable1Vec$fEq1Vec $fOrd1Vec$fOrdVec $fShow1Vec $fShowVec $fNFDataVec $fHashableVecGToGFromGPigeonholeSize PigeonholePigeonholeSizefromtogindex gtabulategix gtraverse gitraversegfromgto $fGFromRep1U1$fGFromRep1Par1 $fGFromRep1M1$fGFromRep1:*: $fGToRep1U1 $fGToRep1Par1 $fGToRep1:*: $fGToRep1M1$fPigeonholeProduct$fPigeonholeProxy$fPigeonholeIdentityVecEach mapWithVectraverseWithVecwithDictdfoldrdfoldldfoldl'takedrop$fVecEach(,,,)(,,,)ab$fVecEach(,,)(,,)ab$fVecEach(,)(,)abbase Data.Functor<&> Traversal' TraversalLens'Lens LensLike'LensLikeOptic'OpticviewsetoverYoneda runYonedaCurried runCurried FLensLike IxLensLikefusing confusingliftCurriedYonedayapifusing iconfusingffusing fconfusing liftCurried lowerCurried liftYoneda lowerYoneda GHC.MaybeNothing Data.Foldable)semigroupoids-5.3.6-Fpp1DqBBTOS8cTJN8TbQ1Data.Semigroup.Foldable.Classfin-0.2.1-3oDnWsPrUnxOWzFV6M5KlData.FinFinGHC.BaseidData.Functor.ProductProduct Data.ProxyProxyData.Functor.IdentityIdentityghc-primGHC.Primcoerce Data.Type.NatSNatIreflect