diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -5,6 +5,11 @@
 ## Unreleased changes
 
 
+## 0.3.1.1
+
+Cabal changes, versioning changes.
+
+
 ## 0.3.1
 
 -   Change monadic folds so that commutativity is not anymore required.
diff --git a/circular.cabal b/circular.cabal
--- a/circular.cabal
+++ b/circular.cabal
@@ -1,74 +1,68 @@
-cabal-version:  1.12
-name:           circular
-version:        0.3.1
-synopsis:       Circular fixed-sized mutable vectors
-description:    Please see the README at <https://github.com/dschrempf/circular#readme>
-category:       Math, Data Structures
-homepage:       https://github.com/dschrempf/circular#readme
-bug-reports:    https://github.com/dschrempf/circular/issues
-author:         Dominik Schrempf
-maintainer:     dominik.schrempf@gmail.com
-copyright:      Dominik Schrempf (2020)
-license:        BSD3
-license-file:   LICENSE
-build-type:     Simple
+cabal-version:      1.12
+name:               circular
+version:            0.3.1.1
+license:            BSD3
+license-file:       LICENSE
+copyright:          Dominik Schrempf (2020)
+maintainer:         dominik.schrempf@gmail.com
+author:             Dominik Schrempf
+homepage:           https://github.com/dschrempf/circular#readme
+bug-reports:        https://github.com/dschrempf/circular/issues
+synopsis:           Circular fixed-sized mutable vectors
+description:
+    Please see the README at <https://github.com/dschrempf/circular#readme>
+
+category:           Math, Data Structures
+build-type:         Simple
 extra-source-files:
     README.md
     ChangeLog.md
 
 source-repository head
-  type: git
-  location: https://github.com/dschrempf/circular
+    type:     git
+    location: https://github.com/dschrempf/circular
 
 library
-  exposed-modules:
-      Data.Stack.Circular
-  other-modules:
-      Paths_circular
-  hs-source-dirs:
-      src
-  ghc-options: -Wall
-  build-depends:
-      aeson
-    , base >=4.7 && <5
-    , primitive
-    , vector
-  default-language: Haskell2010
+    exposed-modules:  Data.Stack.Circular
+    hs-source-dirs:   src
+    other-modules:    Paths_circular
+    default-language: Haskell2010
+    ghc-options:      -Wall -Wunused-packages
+    build-depends:
+        aeson >=1.5.4.1 && <1.6,
+        base >=4.14.1.0 && <4.15,
+        primitive >=0.7.1.0 && <0.8,
+        vector >=0.12.1.2 && <0.13
 
 test-suite circular-test
-  type: exitcode-stdio-1.0
-  main-is: Spec.hs
-  other-modules:
-      Data.Stack.CircularSpec
-      Paths_circular
-  hs-source-dirs:
-      test
-  ghc-options: -Wall
-  build-depends:
-      QuickCheck
-    , aeson
-    , base >=4.7 && <5
-    , circular
-    , hspec
-    , hspec-discover
-    , primitive
-    , quickcheck-instances
-    , vector
-  default-language: Haskell2010
+    type:             exitcode-stdio-1.0
+    main-is:          Spec.hs
+    hs-source-dirs:   test
+    other-modules:
+        Data.Stack.CircularSpec
+        Paths_circular
 
+    default-language: Haskell2010
+    ghc-options:      -Wall -Wunused-packages
+    build-depends:
+        QuickCheck >=2.13.2 && <2.14,
+        aeson >=1.5.4.1 && <1.6,
+        base >=4.14.1.0 && <4.15,
+        circular -any,
+        hspec >=2.7.4 && <2.8,
+        primitive >=0.7.1.0 && <0.8,
+        quickcheck-instances >=0.3.23 && <0.4,
+        vector >=0.12.1.2 && <0.13
+
 benchmark circular-bench
-  type: exitcode-stdio-1.0
-  main-is: Bench.hs
-  other-modules:
-      Paths_circular
-  hs-source-dirs:
-      bench
-  ghc-options: -Wall
-  build-depends:
-      aeson
-    , base >=4.7 && <5
-    , circular
-    , criterion
-    , primitive
-    , vector
-  default-language: Haskell2010
+    type:             exitcode-stdio-1.0
+    main-is:          Bench.hs
+    hs-source-dirs:   bench
+    other-modules:    Paths_circular
+    default-language: Haskell2010
+    ghc-options:      -Wall -Wunused-packages
+    build-depends:
+        base >=4.14.1.0 && <4.15,
+        circular -any,
+        criterion >=1.5.7.0 && <1.6,
+        vector >=0.12.1.2 && <0.13
diff --git a/src/Data/Stack/Circular.hs b/src/Data/Stack/Circular.hs
--- a/src/Data/Stack/Circular.hs
+++ b/src/Data/Stack/Circular.hs
@@ -33,6 +33,7 @@
     take,
 
     -- ** Accessors
+    size,
     get,
     pop,
     push,
@@ -130,6 +131,10 @@
     i' = i + 1
     -- The starting index. Can be negative.
     i0 = i' - k
+
+-- | Size of the stack.
+size :: VG.Vector v a => MStack v s a -> Int
+size = VM.length . mVector
 
 -- | Get the last element without changing the stack.
 --
