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:             0.4.0.4
+version:             0.5.0
 synopsis:            Type classes for mapping, folding, and traversing monomorphic containers
 description:         Monomorphic variants of the Functor, Foldable, and Traversable typeclasses. Contains even more experimental code for abstracting containers and sequences.
 homepage:            https://github.com/snoyberg/mono-traversable
diff --git a/src/Data/MinLen.hs b/src/Data/MinLen.hs
--- a/src/Data/MinLen.hs
+++ b/src/Data/MinLen.hs
@@ -196,7 +196,7 @@
 {-# INLINE minimum #-}
 
 -- | like Data.List, but not partial on a MonoFoldable
-maximumBy :: MonoFoldableOrd mono
+maximumBy :: MonoFoldable mono
           => (Element mono -> Element mono -> Ordering)
           -> MinLen (Succ nat) mono
           -> Element mono
@@ -204,7 +204,7 @@
 {-# INLINE maximumBy #-}
 
 -- | like Data.List, but not partial on a MonoFoldable
-minimumBy :: MonoFoldableOrd mono
+minimumBy :: MonoFoldable mono
           => (Element mono -> Element mono -> Ordering)
           -> MinLen (Succ nat) mono
           -> Element mono
diff --git a/src/Data/MonoTraversable.hs b/src/Data/MonoTraversable.hs
--- a/src/Data/MonoTraversable.hs
+++ b/src/Data/MonoTraversable.hs
@@ -311,6 +311,26 @@
     unsafeLast = lastEx
     {-# INLINE unsafeLast #-}
 
+    maximumByEx :: (Element mono -> Element mono -> Ordering) -> mono -> Element mono
+    maximumByEx f =
+        ofoldl1Ex' go
+      where
+        go x y =
+            case f x y of
+                LT -> y
+                _  -> x
+    {-# INLINE maximumByEx #-}
+
+    minimumByEx :: (Element mono -> Element mono -> Ordering) -> mono -> Element mono
+    minimumByEx f =
+        ofoldl1Ex' go
+      where
+        go x y =
+            case f x y of
+                GT -> y
+                _  -> x
+    {-# INLINE minimumByEx #-}
+
 instance MonoFoldable S.ByteString where
     ofoldMap f = ofoldr (mappend . f) mempty
     ofoldr = S.foldr
@@ -489,6 +509,8 @@
     lastEx = V.last
     unsafeHead = V.unsafeHead
     unsafeLast = V.unsafeLast
+    maximumByEx = V.maximumBy
+    minimumByEx = V.minimumBy
     {-# INLINE ofoldMap #-}
     {-# INLINE ofoldr #-}
     {-# INLINE ofoldl' #-}
@@ -503,6 +525,8 @@
     {-# INLINE headEx #-}
     {-# INLINE lastEx #-}
     {-# INLINE unsafeHead #-}
+    {-# INLINE maximumByEx #-}
+    {-# INLINE minimumByEx #-}
 instance MonoFoldable (Set e)
 instance MonoFoldable (HashSet e)
 instance MonoFoldable (DList a) where
@@ -526,6 +550,8 @@
     lastEx = U.last
     unsafeHead = U.unsafeHead
     unsafeLast = U.unsafeLast
+    maximumByEx = U.maximumBy
+    minimumByEx = U.minimumBy
     {-# INLINE ofoldMap #-}
     {-# INLINE ofoldr #-}
     {-# INLINE ofoldl' #-}
@@ -540,6 +566,8 @@
     {-# INLINE headEx #-}
     {-# INLINE lastEx #-}
     {-# INLINE unsafeHead #-}
+    {-# INLINE maximumByEx #-}
+    {-# INLINE minimumByEx #-}
 instance VS.Storable a => MonoFoldable (VS.Vector a) where
     ofoldMap f = ofoldr (mappend . f) mempty
     ofoldr = VS.foldr
@@ -555,6 +583,8 @@
     lastEx = VS.last
     unsafeHead = VS.unsafeHead
     unsafeLast = VS.unsafeLast
+    maximumByEx = VS.maximumBy
+    minimumByEx = VS.minimumBy
     {-# INLINE ofoldMap #-}
     {-# INLINE ofoldr #-}
     {-# INLINE ofoldl' #-}
@@ -569,6 +599,8 @@
     {-# INLINE headEx #-}
     {-# INLINE lastEx #-}
     {-# INLINE unsafeHead #-}
+    {-# INLINE maximumByEx #-}
+    {-# INLINE minimumByEx #-}
 instance MonoFoldable (Either a b) where
     ofoldMap f = ofoldr (mappend . f) mempty
     ofoldr f b (Right a) = f a b
@@ -653,30 +685,10 @@
     maximumEx = maximumByEx compare
     {-# INLINE maximumEx #-}
 
-    maximumByEx :: (Element mono -> Element mono -> Ordering) -> mono -> Element mono
-    maximumByEx f =
-        ofoldl1Ex' go
-      where
-        go x y =
-            case f x y of
-                LT -> y
-                _  -> x
-    {-# INLINE maximumByEx #-}
-
     minimumEx :: mono -> Element mono
     minimumEx = minimumByEx compare
     {-# INLINE minimumEx #-}
 
-    minimumByEx :: (Element mono -> Element mono -> Ordering) -> mono -> Element mono
-    minimumByEx f =
-        ofoldl1Ex' go
-      where
-        go x y =
-            case f x y of
-                GT -> y
-                _  -> x
-    {-# INLINE minimumByEx #-}
-
 instance MonoFoldableOrd S.ByteString where
     maximumEx = S.maximum
     {-# INLINE maximumEx #-}
@@ -712,33 +724,21 @@
 instance Ord v => MonoFoldableOrd (HashMap k v)
 instance Ord a => MonoFoldableOrd (Vector a) where
     maximumEx   = V.maximum
-    maximumByEx = V.maximumBy
     minimumEx   = V.minimum
-    minimumByEx = V.minimumBy
     {-# INLINE maximumEx #-}
-    {-# INLINE maximumByEx #-}
     {-# INLINE minimumEx #-}
-    {-# INLINE minimumByEx #-}
 instance Ord e => MonoFoldableOrd (Set e)
 instance Ord e => MonoFoldableOrd (HashSet e)
 instance (U.Unbox a, Ord a) => MonoFoldableOrd (U.Vector a) where
     maximumEx   = U.maximum
-    maximumByEx = U.maximumBy
     minimumEx   = U.minimum
-    minimumByEx = U.minimumBy
     {-# INLINE maximumEx #-}
-    {-# INLINE maximumByEx #-}
     {-# INLINE minimumEx #-}
-    {-# INLINE minimumByEx #-}
 instance (Ord a, VS.Storable a) => MonoFoldableOrd (VS.Vector a) where
     maximumEx   = VS.maximum
-    maximumByEx = VS.maximumBy
     minimumEx   = VS.minimum
-    minimumByEx = VS.minimumBy
     {-# INLINE maximumEx #-}
-    {-# INLINE maximumByEx #-}
     {-# INLINE minimumEx #-}
-    {-# INLINE minimumByEx #-}
 instance Ord b => MonoFoldableOrd (Either a b) where
 
 maximumMay :: MonoFoldableOrd mono => mono -> Maybe (Element mono)
@@ -747,7 +747,7 @@
     | otherwise = Just (maximumEx mono)
 {-# INLINE maximumMay #-}
 
-maximumByMay :: MonoFoldableOrd mono
+maximumByMay :: MonoFoldable mono
              => (Element mono -> Element mono -> Ordering)
              -> mono
              -> Maybe (Element mono)
@@ -762,7 +762,7 @@
     | otherwise = Just (minimumEx mono)
 {-# INLINE minimumMay #-}
 
-minimumByMay :: MonoFoldableOrd mono
+minimumByMay :: MonoFoldable mono
              => (Element mono -> Element mono -> Ordering)
              -> mono
              -> Maybe (Element mono)
