diff --git a/Control/Category/Dual.hs b/Control/Category/Dual.hs
--- a/Control/Category/Dual.hs
+++ b/Control/Category/Dual.hs
@@ -1,5 +1,4 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-
+{-# LANGUAGE DerivingVia #-}
 module Control.Category.Dual where
 
 import Prelude (Eq, Ord, Read, Show, Bounded, ($))
@@ -14,7 +13,8 @@
 import Data.Monoid (Monoid)
 
 newtype Dual k a b = Dual { dual :: k b a }
-  deriving (Eq, Ord, Read, Show, Bounded, Semigroup, Monoid)
+  deriving (Eq, Ord, Read, Show)
+  deriving (Bounded, Semigroup, Monoid) via (k b a)
 
 instance Category k => Category (Dual k) where
     id = Dual id
diff --git a/dual.cabal b/dual.cabal
--- a/dual.cabal
+++ b/dual.cabal
@@ -1,5 +1,5 @@
 name:                dual
-version:             0.1.0.2
+version:             0.1.0.3
 synopsis:            Dual category
 -- description:         
 license:             BSD3
