diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for polysemy
 
+## 1.2.1.0 (2019-09-15)
+
+- Added `InterpreterFor` (thanks to @bolt12)
+- Bumped bounds for first-class-families
 
 ## 1.2.0.0 (2019-09-04)
 
diff --git a/polysemy.cabal b/polysemy.cabal
--- a/polysemy.cabal
+++ b/polysemy.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: a8b3a81d8983405247d7e8cb0010669caf9e8f62f85762990fadbeccdafc6094
+-- hash: 7ce7e4fdc1a3ebff15b38a550ed247a4ad04bb4c383ad4440212926b3eeea93c
 
 name:           polysemy
-version:        1.2.0.0
+version:        1.2.1.0
 synopsis:       Higher-order, low-boilerplate, zero-cost free monads.
 description:    Please see the README on GitHub at <https://github.com/isovector/polysemy#readme>
 category:       Language
@@ -82,7 +82,7 @@
       async >=2.2 && <3
     , base >=4.9 && <5
     , containers >=0.5 && <0.7
-    , first-class-families >=0.5.0.0 && <0.6
+    , first-class-families >=0.5.0.0 && <0.7
     , mtl >=2.2.2 && <3
     , stm >=2 && <3
     , syb >=0.7 && <0.8
@@ -143,7 +143,7 @@
     , base >=4.9 && <5
     , containers >=0.5 && <0.7
     , doctest >=0.16.0.1 && <0.17
-    , first-class-families >=0.5.0.0 && <0.6
+    , first-class-families >=0.5.0.0 && <0.7
     , hspec >=2.6.0 && <3
     , inspection-testing >=0.4.2 && <0.5
     , mtl >=2.2.2 && <3
@@ -177,7 +177,7 @@
     , base >=4.9 && <5
     , containers >=0.5 && <0.7
     , criterion
-    , first-class-families >=0.5.0.0 && <0.6
+    , first-class-families >=0.5.0.0 && <0.7
     , free
     , freer-simple
     , mtl
diff --git a/src/Polysemy.hs b/src/Polysemy.hs
--- a/src/Polysemy.hs
+++ b/src/Polysemy.hs
@@ -9,11 +9,15 @@
   , runM
   , runFinal
 
+  -- * Type synonyms for user convenience
+  , InterpreterFor
+
   -- * Interoperating With Other Monads
   -- ** Embed
   , Embed (..)
   , embed
   , embedToFinal
+
   -- ** Final
   -- | For advanced uses of 'Final', including creating your own interpreters
   -- that make use of it, see "Polysemy.Final"
@@ -132,11 +136,11 @@
   , Inspector (..)
   ) where
 
+import Polysemy.Final
 import Polysemy.Internal
 import Polysemy.Internal.Combinators
 import Polysemy.Internal.Forklift
 import Polysemy.Internal.Kind
-import Polysemy.Internal.TH.Effect
 import Polysemy.Internal.Tactics
-import Polysemy.Final
+import Polysemy.Internal.TH.Effect
 
diff --git a/src/Polysemy/Internal.hs b/src/Polysemy/Internal.hs
--- a/src/Polysemy/Internal.hs
+++ b/src/Polysemy/Internal.hs
@@ -23,6 +23,7 @@
   , usingSem
   , liftSem
   , hoistSem
+  , InterpreterFor
   , (.@)
   , (.@@)
   ) where
@@ -434,6 +435,17 @@
       pure $ f $ a <$ s
 {-# INLINE runM #-}
 
+------------------------------------------------------------------------------
+-- | Type synonym for interpreters that consume an effect without changing the 
+-- return value. Offered for user convenience. 
+--
+-- @r@ Is kept polymorphic so it's possible to place constraints upon it:
+--
+-- @
+-- teletypeToIO :: 'Member' (Embed IO) r
+--              => 'InterpreterFor' Teletype r
+-- @
+type InterpreterFor e r = forall a. Sem (e ': r) a -> Sem r a
 
 ------------------------------------------------------------------------------
 -- | Some interpreters need to be able to lower down to the base monad (often
