diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+0.4.5
+-----
+* Added `witness`
+
 0.4.4
 -----
 * Actually working polymorphic kind support
diff --git a/Data/Tagged.hs b/Data/Tagged.hs
--- a/Data/Tagged.hs
+++ b/Data/Tagged.hs
@@ -26,6 +26,7 @@
     , tagSelf
     , untagSelf
     , asTaggedTypeOf
+    , witness
     ) where
 
 import Control.Applicative ((<$>), liftA2, Applicative(..))
@@ -243,6 +244,10 @@
 asTaggedTypeOf :: s -> Tagged s b -> s
 asTaggedTypeOf = const
 {-# INLINE asTaggedTypeOf #-}
+
+witness :: Tagged a b -> a -> b
+witness (Tagged b) _ = b
+{-# INLINE witness #-}
 
 -- | 'untagSelf' is a type-restricted version of 'untag'.
 untagSelf :: Tagged a a -> a
diff --git a/tagged.cabal b/tagged.cabal
--- a/tagged.cabal
+++ b/tagged.cabal
@@ -1,5 +1,5 @@
 name:           tagged
-version:        0.4.4
+version:        0.4.5
 license:        BSD3
 license-file:   LICENSE
 author:         Edward A. Kmett
