diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for polysemy-extra
 
+## v0.1.7.0
+
+* Add `irrefutableAbsorbThrow`.
+
 ## v0.1.6.0
 
 * Inline fix for `runInputConstF`.
diff --git a/polysemy-extra.cabal b/polysemy-extra.cabal
--- a/polysemy-extra.cabal
+++ b/polysemy-extra.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-extra
-version:        0.1.6.1
+version:        0.1.7.0
 synopsis:       Extra Input and Output functions for polysemy..
 category:       Polysemy
 author:         Daniel Firth
@@ -29,9 +29,12 @@
       Paths_polysemy_extra
   hs-source-dirs:
       src
+  ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
   build-depends:
       base >=4.7 && <5
     , containers
+    , exceptions
+    , extra
     , polysemy >=1.4.0.0
     , polysemy-zoo
   default-language: Haskell2010
diff --git a/src/Polysemy/Extra.hs b/src/Polysemy/Extra.hs
--- a/src/Polysemy/Extra.hs
+++ b/src/Polysemy/Extra.hs
@@ -6,6 +6,7 @@
 
 Extra convenience functions for polysemy.
 -}
+{-# LANGUAGE AllowAmbiguousTypes #-}
 {-# LANGUAGE BlockArguments      #-}
 {-# LANGUAGE DataKinds           #-}
 {-# LANGUAGE GADTs               #-}
@@ -51,11 +52,19 @@
 , reverseEffects2
 , reverseEffects3
 , reverseEffects4
+
+-- * Exceptions
+, irrefutableAbsorbThrow
 ) where
 
 import Control.Arrow
+import Control.Monad
+import qualified Control.Monad.Catch as C
+import Control.Monad.Extra
 import Data.Map as Map
 import Polysemy
+import Polysemy.ConstraintAbsorber.MonadCatch
+import Polysemy.Error
 import Polysemy.KVStore
 import Polysemy.Input
 import Polysemy.Output
@@ -316,3 +325,20 @@
 reverseEffects4 :: forall e1 e2 e3 e4 r a. Sem (e1 ': e2 ': e3 ': e4 ': r) a -> Sem (e4 ': e3 ': e2 ': e1 ': r) a
 reverseEffects4 = rotateEffects4L >>> rotateEffects3L >>> rotateEffects2
 {-# INLINE reverseEffects4 #-}
+
+-- | Irrefutably absorb a `MonadThrow` constraint as a particular `Exception` type.
+--  This is useful for translating functions that you know use only use
+--  one error type. For more complicated uses of `MonadThrow` it's
+--  probably best to just rewrite the function in terms of `Sem`.
+-- 
+--
+-- @since 0.1.7.0
+irrefutableAbsorbThrow :: forall e r a. (Exception e, Members '[Error e] r)
+                       => (forall m.  C.MonadThrow m => m a)
+                       -> Sem r a
+irrefutableAbsorbThrow f = do
+  k <- runError (absorbMonadThrow f)
+  either (p >=> throw @e) return k
+    where p x = fromMaybeM
+                  (error $ "Irrefutable Cast:  " <> show x)
+                  (return $ C.fromException x)
