diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for describe
 
+## 0.2.0.4 -- 2019-10-06
+
+* Made Vec instance for Equals overlapping. 
+
 ## 0.2.0.3 -- 2019-10-06
 
 * Added constraint on `Optional` to prevent overlapping instances on the supplied predicate.
diff --git a/describe.cabal b/describe.cabal
--- a/describe.cabal
+++ b/describe.cabal
@@ -3,7 +3,7 @@
 --   For further documentation, see http://haskell.org/cabal/users-guide/
 
 name:                describe
-version:             0.2.0.3
+version:             0.2.0.4
 synopsis:            Combinators for describing binary data structures
 description:         Combinators for describing binary data structures, which eliminate the boilerplate of having to write isomorphic Get and Put instances. Please see the Github page for examples.
 homepage:            https://github.com/riugabachi/describe
@@ -25,6 +25,7 @@
                       FunctionalDependencies,
                       TypeFamilies,
                       TypeOperators,
+                      OverlappingInstances,
                       FlexibleContexts,
                       DefaultSignatures,
                       DataKinds,
diff --git a/src/Data/Serialize/Describe/Combinators.hs b/src/Data/Serialize/Describe/Combinators.hs
--- a/src/Data/Serialize/Describe/Combinators.hs
+++ b/src/Data/Serialize/Describe/Combinators.hs
@@ -15,7 +15,7 @@
 import qualified Data.Serialize.Get as G
 
 -- | An 'Optional' represents a field which is optionally-serializable. The field will be parsed via a lookAhead and, if the value matches the 'Predicate' p, then the field exists. If not, it is assumed as though the field was never serialized in the first place and the value will be set to 'Nothing'; parsing will then continue on as usual.
-newtype Predicate t p => Optional p t = Optional { unwrapOptional :: Maybe t }
+newtype Optional p t = Optional { unwrapOptional :: Maybe t }
 
 class Predicate t a where
   check :: t -> Bool
@@ -25,7 +25,7 @@
 instance (KnownNat n, Integral i) => Predicate i (Equals n) where
   check i = i == (fromIntegral $ natVal (Proxy :: Proxy n))
 
-instance (KnownNat n1, KnownNat n2, V.Arity n2, V.Vector (Vec n2) i, Integral i) => Predicate (Vec n2 i) (Equals n1) where
+instance {-# OVERLAPPING #-} (KnownNat n1, KnownNat n2, V.Arity n2, V.Vector (Vec n2) i, Integral i) => Predicate (Vec n2 i) (Equals n1) where
   check = V.all (== fromIntegral (natVal (Proxy :: Proxy n1)))
 
 instance (Describe a, Predicate a p) => Describe (Optional p a) where
