diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,15 +1,20 @@
 # Changelog for type-sets
 
+## 0.1.1.0 --- 2019-08-11
+
+- Added `WhenStuck`, which plugins can use to offer error messages when the
+    plugin isn't enabled.
+
 ## 0.1.0.2 --- 2019-08-06
 
-Fixed a bug in the cabal metadata
+- Fixed a bug in the cabal metadata
 
 ## 0.1.0.1 --- 2019-08-05
 
-Update documentation
+- Update documentation
 
 ## 0.1.0.0 --- 2019-08-05
 
-Initial release!
+- Initial release!
 
 ## Unreleased changes
diff --git a/magic-tyfams.cabal b/magic-tyfams.cabal
--- a/magic-tyfams.cabal
+++ b/magic-tyfams.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 2dfc658ae69265b2c9624dc6348cb97250e213c293af25c93fa9d71e85823b5b
+-- hash: 4a58f9ee8308918934404095fd5f211da3a72a6cf10e2cee5015c87d4a448332
 
 name:           magic-tyfams
-version:        0.1.0.2
+version:        0.1.1.0
 synopsis:       Write plugins for magic type families with ease
 description:    Please see the README on GitHub at <https://github.com/isovector/type-sets/tree/master/magic-tyfams#readme>
 category:       Compiler Plugin
diff --git a/src/Plugin/MagicTyFam.hs b/src/Plugin/MagicTyFam.hs
--- a/src/Plugin/MagicTyFam.hs
+++ b/src/Plugin/MagicTyFam.hs
@@ -1,6 +1,8 @@
 {-# LANGUAGE BangPatterns  #-}
 {-# LANGUAGE LambdaCase    #-}
+{-# LANGUAGE PolyKinds     #-}
 {-# LANGUAGE TupleSections #-}
+{-# LANGUAGE TypeFamilies  #-}
 {-# OPTIONS_GHC -Wall      #-}
 
 module Plugin.MagicTyFam
@@ -14,6 +16,9 @@
   , solveWanteds
   , loadTyCon
 
+    -- * Error messages
+  , WhenStuck
+
     -- * Re-exports
   , Plugin
   , TyCon
@@ -110,4 +115,67 @@
   , _mtfrOriginal :: Type
   , _mtfrSolved   :: Type
   }
+
+
+------------------------------------------------------------------------------
+-- | Type family for observing stuckness of a constraint. This can be used to
+-- construct error messages helpfully pointing out that your plugin isn't
+-- enabled. For example:
+--
+-- @
+-- type family MyMagicFam a b c where
+--   MyMagicFam a b c =
+--     'WhenStuck' (MyMagicFamImpl a b c)
+--               ('GHC.TypeLits.TypeError' (''GHC.TypeLits.Text' "The plugin isn't enabled!"))
+--
+-- type family MyMagicFam a b c where
+-- @
+--
+-- and now solve @MyMagicFamImpl@ via 'magicTyFamPlugin'. The error message
+-- will only appear when @MyMagicFamImpl@ is stuck, which is to say, if your
+-- plugin isn't enabled.
+type family WhenStuck (expr :: k) (b :: k) :: k where
+  -- The type pattern @_ Foo@ is interpretered by the compiler as being of
+  -- any kind. This is great and exactly what we want here, except that things
+  -- like @forall s. Maybe s@ will get stuck on it.
+  --
+  -- So instead, we just propagate out 100 of these type variables and assume
+  -- that 100 type variables ought to be enough for anyone.
+  WhenStuck (_ AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind
+               AnythingOfAnyKind) b = b
+  WhenStuck a                     b = a
+
+data AnythingOfAnyKind
 
