diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,24 @@
 
 ## WIP
 
+## [1.6.1]
+
+- Fix build against Stackage nightly for GHC 9.4.5
+- Future-proof against future Prelude `foldl'` (thanks Bodigrim!)
+
+## [1.6.0] - 2022-01-22
+
+- Add instances of `FunctorWithIndex`, `FoldableWithIndex` and
+  `TraversableWithIndex` for `Vector n a`.
+- Drop support for GHC older than 8.10
+- Safe construction of vectors from linked lists (https://github.com/expipiplus1/vector-sized/pull/88)
+
+Thanks to @sheaf and @kozross
+
+## [1.5.0] - 2021-08-25
+
+- Change indexes used by `accum` from `Int` to `Finite`.
+
 ## [1.4.4] - 2021-06-26
 
 - Add `ix'`
diff --git a/package.yaml b/package.yaml
deleted file mode 100644
--- a/package.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: vector-sized
-version: 1.4.4
-synopsis: Size tagged vectors
-description: Please see README.md
-category: Data
-author: Joe Hermaszewski
-maintainer: whats.our.vector.victor@monoid.al
-copyright: 2016 Joe Hermaszewski
-license: BSD3
-github: expipiplus1/vector-sized
-
-extra-source-files:
-- package.yaml
-- readme.md
-- changelog.md
-- default.nix
-
-dependencies:
-- base >=4.9 && <5
-- vector >=0.11 && <0.13
-- deepseq >=1.1 && <1.5
-- finite-typelits >=0.1
-- primitive >=0.5 && <0.8
-- indexed-list-literals >=0.2.0.0
-- adjunctions >=4.3 && <4.5
-- distributive >=0.5 && <0.7
-- comonad >=4 && <6
-- hashable >=1.2.4.0
-- binary >=0.8.3.0
-
-library:
-  source-dirs: src
diff --git a/src/Data/Vector/Generic/Mutable/Sized.hs b/src/Data/Vector/Generic/Mutable/Sized.hs
--- a/src/Data/Vector/Generic/Mutable/Sized.hs
+++ b/src/Data/Vector/Generic/Mutable/Sized.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
@@ -68,10 +67,8 @@
   , unsafeModify
   , unsafeSwap
   , unsafeExchange
-#if MIN_VERSION_vector(0,12,0)
   -- * Modifying vectors
   , nextPermutation
-#endif
   -- ** Filling and copying
   , set
   , copy
@@ -386,7 +383,6 @@
 unsafeExchange (MVector v) = VGM.unsafeExchange v
 {-# inline unsafeExchange #-}
 
-#if MIN_VERSION_vector(0,12,0)
 -- * Modifying vectors
 
 -- | Compute the next permutation (in lexicographic order) of a given vector
@@ -395,7 +391,6 @@
                 => MVector v n (PrimState m) e -> m Bool
 nextPermutation (MVector v) = VGM.nextPermutation v
 {-# inline nextPermutation #-}
-#endif
 
 -- ** Filling and copying
 
diff --git a/src/Data/Vector/Generic/Sized.hs b/src/Data/Vector/Generic/Sized.hs
--- a/src/Data/Vector/Generic/Sized.hs
+++ b/src/Data/Vector/Generic/Sized.hs
@@ -9,13 +9,12 @@
 {-# LANGUAGE TypeApplications #-}
 {-# LANGUAGE PatternSynonyms #-}
 {-# LANGUAGE ViewPatterns #-}
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE GADTs #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE AllowAmbiguousTypes #-}
-
-#if MIN_VERSION_base(4,12,0)
+{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE NoStarIsType #-}
-#endif
 
 {-# OPTIONS_GHC -Wno-orphans #-}
 {-|
@@ -66,6 +65,8 @@
   , empty
   , singleton
   , fromTuple
+  , BuildVector(..)
+  , pattern Build
   , replicate
   , replicate'
   , generate
@@ -280,17 +281,18 @@
 import qualified Data.Functor.Rep as Rep
 import Data.Distributive
 import Prelude
-       hiding (length, replicate, (++), head, last, init, tail, take,
+       hiding (Foldable(..), replicate, (++), head, last, init, tail, take,
                drop, splitAt, reverse, map, concatMap, zipWith, zipWith3, zip,
-               zip3, unzip, unzip3, elem, notElem, foldl, foldl1, foldr, foldr1,
-               all, any, and, or, sum, product, maximum, minimum, scanl, scanl1,
+               zip3, unzip, unzip3, notElem,
+               all, any, and, or, scanl, scanl1,
                scanr, scanr1, mapM, mapM_, sequence, sequence_)
-
-
 import Data.IndexedListLiterals hiding (toList, fromList)
 import Data.Hashable (Hashable(..))
 import qualified Data.IndexedListLiterals as ILL
 import Data.Vector.Unboxed (Unbox)
+import qualified Data.Traversable.WithIndex as ITraversable
+import qualified Data.Foldable.WithIndex as IFoldable
+import qualified Data.Functor.WithIndex as IFunctor
 
 instance (KnownNat n, VG.Vector v a, Read (v a)) => Read (Vector v n a) where
   readPrec = parens $ prec 10 $ do
@@ -324,9 +326,7 @@
 -- @'join' :: Vector n (Vector n a) -> Vector n a@ gets the /diagonal/ from
 -- a square "matrix".
 instance KnownNat n => Monad (Vector Boxed.Vector n) where
-  return   = replicate
   xs >>= f = imap (\i x -> f x `index` i) xs
-  (>>)     = seq
 
 -- | Non-empty sized vectors are lawful comonads.
 --
@@ -369,11 +369,6 @@
 -- 'Monoid' will dodge the 'KnownNat' constraint.
 instance (Monoid m, VG.Vector v m, KnownNat n) => Monoid (Vector v n m) where
   mempty = replicate mempty
-#if MIN_VERSION_base(4,11,0)
-  -- begone, non-canonical mappend!
-#else
-  mappend = zipWith mappend
-#endif
   mconcat vs = generate $ mconcat . flip fmap vs . flip index
 
 instance KnownNat n => Distributive (Vector Boxed.Vector n) where
@@ -653,16 +648,43 @@
 singleton a = Vector (VG.singleton a)
 {-# inline singleton #-}
 
--- | /O(n)/ Construct a vector in a type-safe manner.
+-- | /O(n)/ Construct a vector in a type-safe manner using a tuple.
 -- @
 --   fromTuple (1,2) :: Vector v 2 Int
 --   fromTuple ("hey", "what's", "going", "on") :: Vector v 4 String
 -- @
+--
+-- @since 1.6.0
 fromTuple :: forall v a input length.
              (VG.Vector v a, IndexedListLiterals input length a, KnownNat length)
           => input -> Vector v length a
 fromTuple = Vector . VG.fromListN (fromIntegral $ natVal $ Proxy @length) . ILL.toList
 
+infixr 5 :<
+
+-- | @since 1.6.0
+data BuildVector (n :: Nat) a where
+  -- | @since 1.6.0
+  Nil :: BuildVector 0 a
+  -- | @since 1.6.0
+  (:<) :: a -> BuildVector n a -> BuildVector (1 + n) a
+
+-- | @since 1.6.0
+deriving instance Show a => Show (BuildVector n a)
+
+-- | /O(n)/ Construct a vector in a type-safe manner using a sized linked list.
+-- @
+--   Build (1 :< 2 :< 3 :< Nil) :: Vector v 3 Int
+--   Build ("not" :< "much" :< Nil) :: Vector v 2 String
+-- @
+-- Can also be used as a pattern.
+--
+-- @since 1.6.0
+pattern Build :: VG.Vector v a => BuildVector n a -> Vector v n a
+pattern Build build <- ( ( \ ( Vector v ) -> unsafeCoerce $ VG.toList v ) -> build )
+  where
+    Build vec = Vector . VG.fromList . unsafeCoerce $ vec
+
 -- | /O(n)/ Construct a vector with the same element in each position where the
 -- length is inferred from the type.
 replicate :: forall v n a. (KnownNat n, VG.Vector v a)
@@ -927,9 +949,10 @@
 accum :: VG.Vector v a
       => (a -> b -> a) -- ^ accumulating function @f@
       -> Vector v m a  -- ^ initial vector (of length @m@)
-      -> [(Int,b)]     -- ^ list of index/value pairs (of length @n@)
+      -> [(Finite m,b)]     -- ^ list of index/value pairs (of length @n@)
       -> Vector v m a
-accum f (Vector v) us = Vector (VG.accum f v us)
+accum f (Vector v) us =
+  Vector (VG.accum f v $ (fmap . first) (fromIntegral . getFinite) us)
 {-# inline accum #-}
 
 -- | /O(m+n)/ For each pair @(i,b)@ from the vector of pairs, replace the vector
@@ -2016,3 +2039,27 @@
 instance (VG.Vector v a, Bits (v a), FiniteBits a, KnownNat n) => FiniteBits (Vector v n a) where
     finiteBitSize _ = finiteBitSize @a undefined * fromIntegral (natVal (Proxy @n))
 
+-- | @since 1.6.0
+instance IFunctor.FunctorWithIndex (Finite n) (Vector Boxed.Vector n) where
+  {-# INLINEABLE imap #-}
+  imap = imap
+
+-- | @since 1.6.0
+instance IFoldable.FoldableWithIndex (Finite n) (Vector Boxed.Vector n) where
+  {-# INLINEABLE ifoldMap #-}
+  ifoldMap f = ifoldl (\acc ix x -> acc `mappend` f ix x) mempty
+  {-# INLINEABLE ifoldMap' #-}
+  ifoldMap' f = ifoldl' (\acc ix x -> acc `mappend` f ix x) mempty
+  {-# INLINEABLE ifoldr #-}
+  ifoldr = ifoldr
+  {-# INLINEABLE ifoldl #-}
+  ifoldl f x = ifoldl (\acc ix -> f ix acc) x
+  {-# INLINEABLE ifoldr' #-}
+  ifoldr' = ifoldr'
+  {-# INLINEABLE ifoldl' #-}
+  ifoldl' f x = ifoldl' (\acc ix -> f ix acc) x
+
+-- | @since 1.6.0
+instance ITraversable.TraversableWithIndex (Finite n) (Vector Boxed.Vector n) where
+  {-# INLINEABLE itraverse #-}
+  itraverse f = traverse (uncurry f) . indexed
diff --git a/src/Data/Vector/Mutable/Sized.hs b/src/Data/Vector/Mutable/Sized.hs
--- a/src/Data/Vector/Mutable/Sized.hs
+++ b/src/Data/Vector/Mutable/Sized.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP              #-}
 {-# LANGUAGE DataKinds        #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE RankNTypes       #-}
@@ -64,10 +63,8 @@
   , unsafeModify
   , unsafeSwap
   , unsafeExchange
-#if MIN_VERSION_vector(0,12,0)
   -- * Modifying vectors
   , nextPermutation
-#endif
   -- ** Filling and copying
   , set
   , copy
@@ -378,7 +375,6 @@
 unsafeExchange = VGM.unsafeExchange
 {-# inline unsafeExchange #-}
 
-#if MIN_VERSION_vector(0,12,0)
 -- * Modifying vectors
 
 -- | Compute the next permutation (lexicographically) of a given vector
@@ -387,7 +383,6 @@
                 => MVector n (PrimState m) e -> m Bool
 nextPermutation = VGM.nextPermutation
 {-# inline nextPermutation #-}
-#endif
 
 -- ** Filling and copying
 
diff --git a/src/Data/Vector/Primitive/Mutable/Sized.hs b/src/Data/Vector/Primitive/Mutable/Sized.hs
--- a/src/Data/Vector/Primitive/Mutable/Sized.hs
+++ b/src/Data/Vector/Primitive/Mutable/Sized.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP              #-}
 {-# LANGUAGE DataKinds        #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE RankNTypes       #-}
@@ -64,10 +63,8 @@
   , unsafeModify
   , unsafeSwap
   , unsafeExchange
-#if MIN_VERSION_vector(0,12,0)
   -- * Modifying vectors
   , nextPermutation
-#endif
   -- ** Filling and copying
   , set
   , copy
@@ -379,7 +376,6 @@
 unsafeExchange = VGM.unsafeExchange
 {-# inline unsafeExchange #-}
 
-#if MIN_VERSION_vector(0,12,0)
 -- * Modifying vectors
 
 -- | Compute the next permutation (lexicographically) of a given vector
@@ -388,7 +384,6 @@
                 => MVector n (PrimState m) e -> m Bool
 nextPermutation = VGM.nextPermutation
 {-# inline nextPermutation #-}
-#endif
 
 -- ** Filling and copying
 
diff --git a/src/Data/Vector/Primitive/Sized.hs b/src/Data/Vector/Primitive/Sized.hs
--- a/src/Data/Vector/Primitive/Sized.hs
+++ b/src/Data/Vector/Primitive/Sized.hs
@@ -6,11 +6,7 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeOperators       #-}
 {-# LANGUAGE PatternSynonyms     #-}
-{-# LANGUAGE CPP                 #-}
-
-#if MIN_VERSION_base(4,12,0)
 {-# LANGUAGE NoStarIsType #-}
-#endif
 
 {-|
 This module re-exports the functionality in 'Data.Vector.Generic.Sized'
@@ -225,16 +221,15 @@
 import Data.Primitive (Prim)
 import Data.Proxy
 import Control.Monad.Primitive
-import Prelude hiding ( length, null,
+import Prelude hiding ( Foldable(..),
                         replicate, (++), concat,
                         head, last,
                         init, tail, take, drop, splitAt, reverse,
                         map, concat, concatMap,
                         zipWith, zipWith3, zip, zip3, unzip, unzip3,
                         filter, takeWhile, dropWhile, span, break,
-                        elem, notElem,
-                        foldl, foldl1, foldr, foldr1,
-                        all, any, and, or, sum, product, maximum, minimum,
+                        notElem,
+                        all, any, and, or,
                         scanl, scanl1, scanr, scanr1,
                         enumFromTo, enumFromThenTo,
                         mapM, mapM_, sequence, sequence_,
@@ -706,7 +701,7 @@
 accum :: Prim a
       => (a -> b -> a) -- ^ accumulating function @f@
       -> Vector m a  -- ^ initial vector (of length @m@)
-      -> [(Int,b)]     -- ^ list of index/value pairs (of length @n@)
+      -> [(Finite m,b)]     -- ^ list of index/value pairs (of length @n@)
       -> Vector m a
 accum = V.accum
 {-# inline accum #-}
diff --git a/src/Data/Vector/Sized.hs b/src/Data/Vector/Sized.hs
--- a/src/Data/Vector/Sized.hs
+++ b/src/Data/Vector/Sized.hs
@@ -8,11 +8,7 @@
 {-# LANGUAGE TypeApplications           #-}
 {-# LANGUAGE GADTs                      #-}
 {-# LANGUAGE AllowAmbiguousTypes        #-}
-{-# LANGUAGE CPP                        #-}
-
-#if MIN_VERSION_base(4,12,0)
 {-# LANGUAGE NoStarIsType #-}
-#endif
 
 {-|
 This module re-exports the functionality in 'Data.Vector.Generic.Sized'
@@ -63,6 +59,8 @@
   , empty
   , singleton
   , fromTuple
+  , BuildVector(..)
+  , pattern Build
   , replicate
   , replicate'
   , generate
@@ -243,6 +241,7 @@
   ) where
 
 import qualified Data.Vector.Generic.Sized as V
+import Data.Vector.Generic.Sized ( BuildVector(..) )
 import qualified Data.Vector as VU
 import qualified Data.Vector.Mutable.Sized as VM
 import GHC.TypeLits
@@ -250,16 +249,15 @@
 import Data.Proxy
 import Data.IndexedListLiterals hiding (toList, fromList)
 import Control.Monad.Primitive
-import Prelude hiding ( length, null,
+import Prelude hiding ( Foldable(..),
                         replicate, (++), concat,
                         head, last,
                         init, tail, take, drop, splitAt, reverse,
                         map, concat, concatMap,
                         zipWith, zipWith3, zip, zip3, unzip, unzip3,
                         filter, takeWhile, dropWhile, span, break,
-                        elem, notElem,
-                        foldl, foldl1, foldr, foldr1,
-                        all, any, and, or, sum, product, maximum, minimum,
+                        notElem,
+                        all, any, and, or,
                         scanl, scanl1, scanr, scanr1,
                         enumFromTo, enumFromThenTo,
                         mapM, mapM_, sequence, sequence_,
@@ -486,16 +484,29 @@
 singleton = V.singleton
 {-# inline singleton #-}
 
--- | /O(n)/ Construct a vector in a type safe manner.
+-- | /O(n)/ Construct a vector in a type safe manner using a tuple.
 -- @
 --   fromTuple (1,2) :: Vector 2 Int
 --   fromTuple ("hey", "what's", "going", "on") :: Vector 4 String
 -- @
+--
+-- @since 1.6.0
 fromTuple :: forall input length ty.
              (IndexedListLiterals input length ty, KnownNat length)
           => input -> Vector length ty
 fromTuple = V.fromTuple
 
+-- | /O(n)/ Construct a vector in a type-safe manner using a sized linked list.
+-- @
+--   Build (1 :< 2 :< 3 :< Nil) :: Vector 3 Int
+--   Build ("not" :< "much" :< Nil) :: Vector 2 String
+-- @
+-- Can also be used as a pattern.
+--
+-- @since 1.6.0
+pattern Build :: V.BuildVector n a -> Vector n a
+pattern Build build = V.Build build
+
 -- | /O(n)/ Construct a vector with the same element in each position where the
 -- length is inferred from the type.
 replicate :: forall n a. KnownNat n
@@ -741,7 +752,7 @@
 -- > accum (+) <5,9,2> [(2,4),(1,6),(0,3),(1,7)] = <5+3, 9+6+7, 2+4>
 accum :: (a -> b -> a) -- ^ accumulating function @f@
       -> Vector m a  -- ^ initial vector (of length @m@)
-      -> [(Int,b)]     -- ^ list of index/value pairs (of length @n@)
+      -> [(Finite m,b)]     -- ^ list of index/value pairs (of length @n@)
       -> Vector m a
 accum = V.accum
 {-# inline accum #-}
diff --git a/src/Data/Vector/Storable/Mutable/Sized.hs b/src/Data/Vector/Storable/Mutable/Sized.hs
--- a/src/Data/Vector/Storable/Mutable/Sized.hs
+++ b/src/Data/Vector/Storable/Mutable/Sized.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP              #-}
 {-# LANGUAGE DataKinds        #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE RankNTypes       #-}
@@ -64,10 +63,8 @@
   , unsafeModify
   , unsafeSwap
   , unsafeExchange
-#if MIN_VERSION_vector(0,12,0)
   -- * Modifying vectors
   , nextPermutation
-#endif
   -- ** Filling and copying
   , set
   , copy
@@ -379,7 +376,6 @@
 unsafeExchange = VGM.unsafeExchange
 {-# inline unsafeExchange #-}
 
-#if MIN_VERSION_vector(0,12,0)
 -- * Modifying vectors
 
 -- | Compute the next permutation (lexicographically) of a given vector
@@ -388,7 +384,6 @@
                 => MVector n (PrimState m) e -> m Bool
 nextPermutation = VGM.nextPermutation
 {-# inline nextPermutation #-}
-#endif
 
 -- ** Filling and copying
 
diff --git a/src/Data/Vector/Storable/Sized.hs b/src/Data/Vector/Storable/Sized.hs
--- a/src/Data/Vector/Storable/Sized.hs
+++ b/src/Data/Vector/Storable/Sized.hs
@@ -9,11 +9,7 @@
 {-# LANGUAGE GADTs               #-}
 {-# LANGUAGE TypeApplications    #-}
 {-# LANGUAGE AllowAmbiguousTypes #-}
-{-# LANGUAGE CPP                 #-}
-
-#if MIN_VERSION_base(4,12,0)
 {-# LANGUAGE NoStarIsType #-}
-#endif
 
 {-|
 This module re-exports the functionality in 'Data.Vector.Generic.Sized'
@@ -64,6 +60,7 @@
   , empty
   , singleton
   , fromTuple
+  , pattern Build
   , replicate
   , replicate'
   , generate
@@ -252,16 +249,15 @@
 import Data.Proxy
 import Control.Monad.Primitive
 import Foreign.Storable
-import Prelude hiding ( length, null,
+import Prelude hiding ( Foldable(..),
                         replicate, (++), concat,
                         head, last,
                         init, tail, take, drop, splitAt, reverse,
                         map, concat, concatMap,
                         zipWith, zipWith3, zip, zip3, unzip, unzip3,
                         filter, takeWhile, dropWhile, span, break,
-                        elem, notElem,
-                        foldl, foldl1, foldr, foldr1,
-                        all, any, and, or, sum, product, maximum, minimum,
+                        notElem,
+                        all, any, and, or,
                         scanl, scanl1, scanr, scanr1,
                         enumFromTo, enumFromThenTo,
                         mapM, mapM_, sequence, sequence_,
@@ -495,17 +491,30 @@
 singleton = V.singleton
 {-# inline singleton #-}
 
--- | /O(n)/ Construct a vector in a type safe manner
+-- | /O(n)/ Construct a vector in a type safe manner using a tuple.
 -- @
 --   fromTuple (1,2) :: Vector 2 Int
 --   fromTuple ("hey", "what's", "going", "on") :: Vector 4 String
 -- @
+--
+-- @since 1.6.0
 fromTuple :: forall a input length.
              (Storable a, IndexedListLiterals input length a, KnownNat length)
           => input -> Vector length a
 fromTuple = V.fromTuple
 {-# inline fromTuple #-}
 
+-- | /O(n)/ Construct a vector in a type-safe manner using a sized linked list.
+-- @
+--   Build (1 :< 2 :< 3 :< Nil) :: Vector 3 Int
+--   Build ("not" :< "much" :< Nil) :: Vector 2 String
+-- @
+-- Can also be used as a pattern.
+--
+-- @since 1.6.0
+pattern Build :: Storable a => V.BuildVector n a -> Vector n a
+pattern Build vec = V.Build vec
+
 -- | /O(n)/ Construct a vector with the same element in each position where the
 -- length is inferred from the type.
 replicate :: forall n a. (KnownNat n, Storable a)
@@ -761,7 +770,7 @@
 accum :: Storable a
       => (a -> b -> a) -- ^ accumulating function @f@
       -> Vector m a  -- ^ initial vector (of length @m@)
-      -> [(Int,b)]     -- ^ list of index/value pairs (of length @n@)
+      -> [(Finite m,b)]     -- ^ list of index/value pairs (of length @n@)
       -> Vector m a
 accum = V.accum
 {-# inline accum #-}
diff --git a/src/Data/Vector/Unboxed/Mutable/Sized.hs b/src/Data/Vector/Unboxed/Mutable/Sized.hs
--- a/src/Data/Vector/Unboxed/Mutable/Sized.hs
+++ b/src/Data/Vector/Unboxed/Mutable/Sized.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP                   #-}
 {-# LANGUAGE DataKinds             #-}
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE FlexibleInstances     #-}
@@ -69,10 +68,8 @@
   , unsafeModify
   , unsafeSwap
   , unsafeExchange
-#if MIN_VERSION_vector(0,12,0)
   -- * Modifying vectors
   , nextPermutation
-#endif
   -- ** Filling and copying
   , set
   , copy
@@ -391,7 +388,6 @@
 unsafeExchange = VGM.unsafeExchange
 {-# inline unsafeExchange #-}
 
-#if MIN_VERSION_vector(0,12,0)
 -- * Modifying vectors
 
 -- | Compute the next permutation (lexicographically) of a given vector
@@ -400,7 +396,6 @@
                 => MVector n (PrimState m) e -> m Bool
 nextPermutation = VGM.nextPermutation
 {-# inline nextPermutation #-}
-#endif
 
 -- ** Filling and copying
 
diff --git a/src/Data/Vector/Unboxed/Sized.hs b/src/Data/Vector/Unboxed/Sized.hs
--- a/src/Data/Vector/Unboxed/Sized.hs
+++ b/src/Data/Vector/Unboxed/Sized.hs
@@ -9,11 +9,7 @@
 {-# LANGUAGE GADTs               #-}
 {-# LANGUAGE TypeApplications    #-}
 {-# LANGUAGE AllowAmbiguousTypes #-}
-{-# LANGUAGE CPP                 #-}
-
-#if MIN_VERSION_base(4,12,0)
 {-# LANGUAGE NoStarIsType #-}
-#endif
 
 {-|
 This module re-exports the functionality in 'Data.Vector.Generic.Sized'
@@ -64,6 +60,7 @@
   , empty
   , singleton
   , fromTuple
+  , pattern Build
   , replicate
   , replicate'
   , generate
@@ -254,16 +251,15 @@
 import Data.Proxy
 import Control.Monad.Primitive
 import Data.Vector.Unboxed (Unbox)
-import Prelude hiding ( length, null,
+import Prelude hiding ( Foldable(..),
                         replicate, (++), concat,
                         head, last,
                         init, tail, take, drop, splitAt, reverse,
                         map, concat, concatMap,
                         zipWith, zipWith3, zip, zip3, unzip, unzip3,
                         filter, takeWhile, dropWhile, span, break,
-                        elem, notElem,
-                        foldl, foldl1, foldr, foldr1,
-                        all, any, and, or, sum, product, maximum, minimum,
+                        notElem,
+                        all, any, and, or,
                         scanl, scanl1, scanr, scanr1,
                         enumFromTo, enumFromThenTo,
                         mapM, mapM_, sequence, sequence_,
@@ -496,17 +492,30 @@
 singleton = V.singleton
 {-# inline singleton #-}
 
--- | /O(n)/ Construct a vector in a type safe manner
+-- | /O(n)/ Construct a vector in a type safe manner using a tuple.
 -- @
 --   fromTuple (1,2) :: Vector 2 Int
 --   fromTuple ("hey", "what's", "going", "on") :: Vector 4 String
 -- @
+--
+-- @since 1.6.0
 fromTuple :: forall a input length.
              (Unbox a, IndexedListLiterals input length a, KnownNat length)
           => input -> Vector length a
 fromTuple = V.fromTuple
 {-# inline fromTuple #-}
 
+-- | /O(n)/ Construct a vector in a type-safe manner using a sized linked list.
+-- @
+--   Build (1 :< 2 :< 3 :< Nil) :: Vector 3 Int
+--   Build ("not" :< "much" :< Nil) :: Vector 2 String
+-- @
+-- Can also be used as a pattern.
+--
+-- @since 1.6.0
+pattern Build :: Unbox a => V.BuildVector n a -> Vector n a
+pattern Build vec = V.Build vec
+
 -- | /O(n)/ Construct a vector with the same element in each position where the
 -- length is inferred from the type.
 replicate :: forall n a. (KnownNat n, Unbox a)
@@ -762,7 +771,7 @@
 accum :: Unbox a
       => (a -> b -> a) -- ^ accumulating function @f@
       -> Vector m a  -- ^ initial vector (of length @m@)
-      -> [(Int,b)]     -- ^ list of index/value pairs (of length @n@)
+      -> [(Finite m,b)]     -- ^ list of index/value pairs (of length @n@)
       -> Vector m a
 accum = V.accum
 {-# inline accum #-}
diff --git a/vector-sized.cabal b/vector-sized.cabal
--- a/vector-sized.cabal
+++ b/vector-sized.cabal
@@ -1,26 +1,19 @@
-cabal-version: 1.12
-
--- This file has been generated from package.yaml by hpack version 0.33.0.
---
--- see: https://github.com/sol/hpack
---
--- hash: e36af7d31e151c5e8d7ad5636dd5d31b47e82d6fe6384f8f76753ed0e17b61b1
-
+cabal-version: 3.0
 name:           vector-sized
-version:        1.4.4
+version:        1.6.1
 synopsis:       Size tagged vectors
 description:    Please see README.md
 category:       Data
 homepage:       https://github.com/expipiplus1/vector-sized#readme
 bug-reports:    https://github.com/expipiplus1/vector-sized/issues
-author:         Joe Hermaszewski
+author:         Ellie Hermaszewska
 maintainer:     whats.our.vector.victor@monoid.al
-copyright:      2016 Joe Hermaszewski
-license:        BSD3
+copyright:      2016 Ellie Hermaszewska
+license:        BSD-3-Clause
 license-file:   LICENSE
 build-type:     Simple
+tested-with:    GHC ==8.10.7 || ==9.0.1 || ==9.2.1
 extra-source-files:
-    package.yaml
     readme.md
     changelog.md
     default.nix
@@ -43,20 +36,19 @@
       Data.Vector.Storable.Sized
       Data.Vector.Unboxed.Mutable.Sized
       Data.Vector.Unboxed.Sized
-  other-modules:
-      Paths_vector_sized
   hs-source-dirs:
       src
   build-depends:
       adjunctions >=4.3 && <4.5
-    , base >=4.9 && <5
+    , base >=4.14 && <5
     , binary >=0.8.3.0
     , comonad >=4 && <6
-    , deepseq >=1.1 && <1.5
+    , deepseq >=1.1 && <1.6
     , distributive >=0.5 && <0.7
     , finite-typelits >=0.1
     , hashable >=1.2.4.0
     , indexed-list-literals >=0.2.0.0
-    , primitive >=0.5 && <0.8
-    , vector >=0.11 && <0.13
+    , primitive >=0.5 && <0.10
+    , indexed-traversable >=0.1.2 && <0.2
+    , vector >=0.12 && <0.14
   default-language: Haskell2010
