diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 1.0.2
+
+* `IsSequence` class: add `lengthIndex` [#127](https://github.com/snoyberg/mono-traversable/pull/127)
+
 ## 1.0.1.3
 
 * Make 'olength' for Set and Map O(1) [#125](https://github.com/snoyberg/mono-traversable/pull/125)
diff --git a/mono-traversable.cabal b/mono-traversable.cabal
--- a/mono-traversable.cabal
+++ b/mono-traversable.cabal
@@ -1,5 +1,5 @@
 name:                mono-traversable
-version:             1.0.1.3
+version:             1.0.2
 synopsis:            Type classes for mapping, folding, and traversing monomorphic containers
 description:         Monomorphic variants of the Functor, Foldable, and Traversable typeclasses. If you understand Haskell's basic typeclasses, you understand mono-traversable. In addition to what you are used to, it adds on an IsSequence typeclass and has code for marking data structures as non-empty.
 homepage:            https://github.com/snoyberg/mono-traversable
diff --git a/src/Data/Sequences.hs b/src/Data/Sequences.hs
--- a/src/Data/Sequences.hs
+++ b/src/Data/Sequences.hs
@@ -145,6 +145,12 @@
     -- However, all the instances define their own fromList
     fromList = mconcat . fmap singleton
 
+    -- | 'lengthIndex' returns the length of a sequence as @'Index' seq@.
+    --
+    -- @since 1.0.2
+    lengthIndex :: seq -> Index seq;
+    lengthIndex = fromIntegral . olength64;
+
     -- below functions change type fron the perspective of NonEmpty
 
     -- | 'break' applies a predicate to a sequence, and returns a tuple where
@@ -558,6 +564,7 @@
 
 instance IsSequence [a] where
     fromList = id
+    lengthIndex = List.length
     filter = List.filter
     filterM = Control.Monad.filterM
     break = List.break
@@ -637,6 +644,7 @@
 
 instance IsSequence S.ByteString where
     fromList = S.pack
+    lengthIndex = S.length
     replicate = S.replicate
     filter = S.filter
     break = S.break
@@ -706,6 +714,7 @@
 
 instance IsSequence T.Text where
     fromList = T.pack
+    lengthIndex = T.length
     replicate i c = T.replicate i (T.singleton c)
     filter = T.filter
     break = T.break
@@ -768,6 +777,7 @@
 
 instance IsSequence L.ByteString where
     fromList = L.pack
+    lengthIndex = L.length
     replicate = L.replicate
     filter = L.filter
     break = L.break
@@ -827,6 +837,7 @@
 
 instance IsSequence TL.Text where
     fromList = TL.pack
+    lengthIndex = TL.length
     replicate i c = TL.replicate i (TL.singleton c)
     filter = TL.filter
     break = TL.break
@@ -886,6 +897,7 @@
 
 instance IsSequence (Seq.Seq a) where
     fromList = Seq.fromList
+    lengthIndex = Seq.length
     replicate = Seq.replicate
     replicateM = Seq.replicateM
     filter = Seq.filter
@@ -953,6 +965,7 @@
 
 instance IsSequence (V.Vector a) where
     fromList = V.fromList
+    lengthIndex = V.length
     replicate = V.replicate
     replicateM = V.replicateM
     filter = V.filter
@@ -1027,6 +1040,7 @@
 
 instance U.Unbox a => IsSequence (U.Vector a) where
     fromList = U.fromList
+    lengthIndex = U.length
     replicate = U.replicate
     replicateM = U.replicateM
     filter = U.filter
@@ -1101,6 +1115,7 @@
 
 instance VS.Storable a => IsSequence (VS.Vector a) where
     fromList = VS.fromList
+    lengthIndex = VS.length
     replicate = VS.replicate
     replicateM = VS.replicateM
     filter = VS.filter
