h*LG      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0.5.1 Trustworthy Safe017&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&  !"#$%&  !"#$%Safe13 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:;<=>?@ABCDEGFHIJKLMNUVWXYZ[\]^OPQRST_`abcde156789:;<=>?@ABCDEGFHIJKLMNUVWXYZ[\]^OPQRST_`abcde65J5  Trustworthy!LSafe)*1677+=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)*1F7&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:;<=>? @ABCDEFGHIJKL "!#$%'()*+,-./0MNOPQ23456789R;<ST:=>U?VWXYZ[\]^ A@_BC`abDEFGHcdIJKL "!#$%&'()*+,-./0NOPQXVU123456789[ZT:R;<S=>YefgW?BCDEFGHIJKL "!#$%')*+,-./0hijklmnopqrstusvwsx sy z{|s}~zz vec-0.5.1-9DTqDLhm2NsFI2TEHeGl5E Data.Vec.PullData.Vec.DataFamily.SpineStrict Data.Vec.LazyData.Vec.Lazy.InlinevecControl.Lens.YoctoIFoldableWithIndex 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 $fHashableVecVecEach mapWithVectraverseWithVecwithDictdfoldrdfoldldfoldl'takedrop$fVecEach(,,,)(,,,)ab$fVecEach(,,)(,,)ab$fVecEach(,)(,)abOpticOptic'LensLike LensLike'LensLens' Traversal Traversal'viewsetoverbase Data.Functor<&> GHC.MaybeNothing Data.FoldableData.Foldable1 fin-0.3.1-LtlTguDhhlCBkSqrtcY1s9Data.FinFinGHC.Baseidghc-primGHC.Primcoerce Data.Type.NatSNatIreflect