diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,9 @@
 incremental
 ====
 
+* Added `Eq`, `Ord` instances to `Alter`
+* Added `WrapDelta`
+
 0.3
 ----
 
diff --git a/incremental.cabal b/incremental.cabal
--- a/incremental.cabal
+++ b/incremental.cabal
@@ -1,5 +1,5 @@
 name:                incremental
-version:             0.3
+version:             0.3.1
 synopsis:            incremental update library
 description:         Generic interface for incremental updates
 homepage:            https://github.com/fumieval/incremental#readme
diff --git a/src/Data/Incremental.hs b/src/Data/Incremental.hs
--- a/src/Data/Incremental.hs
+++ b/src/Data/Incremental.hs
@@ -17,6 +17,7 @@
   , Alter(..)
   , Hetero(..)
   , Fresh(..)
+  , WrapDelta(..)
 ) where
 
 import Control.Applicative
@@ -75,7 +76,7 @@
   | Delete a -- ^ last value
   | Delete_
   | Upsert a d
-  deriving (Generic, Functor)
+  deriving (Generic, Functor, Eq, Ord)
 
 deriving instance (Show a, Show d) => Show (Alter a d)
 instance (NFData a, NFData d) => NFData (Alter a d)
@@ -174,7 +175,7 @@
 
 newtype Hetero a = Hetero { getHetero :: a }
   deriving (Bounded, Enum, Eq, Floating, Fractional, Integral, Semigroup
-      , Monoid, Num, Ord, Real, RealFrac, RealFloat, Generic, NFData)
+      , Monoid, Num, Ord, Real, RealFrac, RealFloat, Generic, NFData, J.FromJSON, J.ToJSON)
 
 -- | 'diff' checks equality
 instance Eq a => Incremental (Hetero a) where
@@ -186,7 +187,7 @@
 
 newtype Fresh a = Fresh { getFresh :: a }
   deriving (Bounded, Enum, Eq, Floating, Fractional, Integral, Semigroup
-      , Monoid, Num, Ord, Real, RealFrac, RealFloat, Generic, NFData)
+      , Monoid, Num, Ord, Real, RealFrac, RealFloat, Generic, NFData, J.FromJSON, J.ToJSON)
 
 -- | Always updated
 instance Incremental (Fresh a) where
@@ -199,6 +200,15 @@
   patch _ x = x; \
   diff a b = if a /= b then Just b else Nothing; \
   }
+
+-- | Wrap the result of 'diff'. Useful in combination with HKD
+newtype WrapDelta h x = WrapDelta {unwrapDelta :: Maybe (Delta (h x))}
+
+deriving instance Show (Delta (h x)) => Show (WrapDelta h x)
+deriving instance Eq (Delta (h x)) => Eq (WrapDelta h x)
+deriving instance Ord (Delta (h x)) => Ord (WrapDelta h x)
+deriving instance J.FromJSON (Delta (h x)) => J.FromJSON (WrapDelta h x)
+deriving instance J.ToJSON (Delta (h x)) => J.ToJSON (WrapDelta h x)
 
 TRIVIAL_EQ(Bool)
 TRIVIAL_EQ(Char)
