diff --git a/lib/GEODE/Metadata/Types.hs b/lib/GEODE/Metadata/Types.hs
index e8ff47afd39f9762f20b337b6bbc4b65cc3e36b6..9e7e6f8706fb35cca065f391f92c964a153df333 100644
--- a/lib/GEODE/Metadata/Types.hs
+++ b/lib/GEODE/Metadata/Types.hs
@@ -25,6 +25,12 @@ instance Has a b => Has a (b @ c) where
 instance {-# OVERLAPS #-} Has b (a @ b) where
   get (_ :@: b) = b
 
+instance (Eq a, Eq b) => Eq (a @ b) where
+  (a1 :@: b1) == (a2 :@: b2) = a1 == a2 && b1 == b2
+
+instance (Ord a, Ord b) => Ord (a @ b) where
+  (a1 :@: b1) <= (a2 :@: b2) = a1 < a2 || (a1 == a2 && b1 <= b2)
+
 instance (DefaultOrdered a, DefaultOrdered b) => DefaultOrdered (a @ b) where
   headerOrder _ = headerOrder (undefined :: a) <> headerOrder (undefined :: b)