diff --git a/lib/Polysemy/Conc.hs b/lib/Polysemy/Conc.hs
--- a/lib/Polysemy/Conc.hs
+++ b/lib/Polysemy/Conc.hs
@@ -7,7 +7,6 @@
   -- $queue
   Queue,
   QueueResult,
-  resultToMaybe,
 
   -- ** Interpreters
   interpretQueueTBM,
@@ -18,6 +17,7 @@
   interpretQueueListReadOnlyStateWith,
 
   -- ** Combinators
+  resultToMaybe,
   loop,
   loopOr,
 
@@ -58,6 +58,7 @@
   -- ** Interpreters
   interpretInterrupt,
   interpretInterruptOnce,
+  interpretInterruptNull,
 
   -- * Event Channels
   Events,
@@ -162,7 +163,7 @@
 import Polysemy.Conc.Events (subscribeLoop, subscribeWhile)
 import Polysemy.Conc.Interpreter.Critical (interpretCritical, interpretCriticalNull)
 import Polysemy.Conc.Interpreter.Events (ChanConsumer, ChanEvents, EventChan, EventConsumer, interpretEventsChan)
-import Polysemy.Conc.Interpreter.Interrupt (interpretInterrupt, interpretInterruptOnce)
+import Polysemy.Conc.Interpreter.Interrupt (interpretInterrupt, interpretInterruptNull, interpretInterruptOnce)
 import Polysemy.Conc.Interpreter.Mask (interpretMaskFinal, interpretUninterruptibleMaskFinal)
 import Polysemy.Conc.Interpreter.Monitor (interpretMonitorPure, interpretMonitorRestart)
 import Polysemy.Conc.Interpreter.Queue.Pure (
diff --git a/lib/Polysemy/Conc/Effect/Monitor.hs b/lib/Polysemy/Conc/Effect/Monitor.hs
--- a/lib/Polysemy/Conc/Effect/Monitor.hs
+++ b/lib/Polysemy/Conc/Effect/Monitor.hs
@@ -2,10 +2,12 @@
 -- |Description: Monitor Effect, Internal
 module Polysemy.Conc.Effect.Monitor where
 
+import Polysemy (makeSem_)
 import Polysemy.Time (NanoSeconds)
 
 import Polysemy.Conc.Effect.Scoped (Scoped, scoped)
 
+-- |Marker type for the restarting action for 'Monitor'.
 data Restart =
   Restart
   deriving (Eq, Show)
@@ -17,7 +19,14 @@
 data Monitor (action :: Type) :: Effect where
   Monitor :: m a -> Monitor action m a
 
-makeSem ''Monitor
+makeSem_ ''Monitor
+
+-- |Mark a region as being subject to intervention by a monitoring program.
+monitor ::
+  ∀ action r a .
+  Member (Monitor action) r =>
+  Sem r a ->
+  Sem r a
 
 -- |Marker type for a 'Scoped' 'Monitor'.
 newtype MonitorResource a =
diff --git a/lib/Polysemy/Conc/Interpreter/Interrupt.hs b/lib/Polysemy/Conc/Interpreter/Interrupt.hs
--- a/lib/Polysemy/Conc/Interpreter/Interrupt.hs
+++ b/lib/Polysemy/Conc/Interpreter/Interrupt.hs
@@ -12,7 +12,7 @@
 import Polysemy.AtomicState (runAtomicStateTVar)
 import Polysemy.Internal.Tactics (liftT)
 import Polysemy.Time (Seconds (Seconds))
-import System.Posix.Signals (Handler (CatchInfo, CatchInfoOnce, CatchOnce), SignalInfo, installHandler, keyboardSignal)
+import System.Posix.Signals (Handler (CatchInfo, CatchInfoOnce, CatchOnce, Catch), SignalInfo, installHandler, keyboardSignal)
 
 import qualified Polysemy.Conc.Effect.Critical as Critical
 import Polysemy.Conc.Effect.Critical (Critical)
@@ -167,6 +167,10 @@
   (const thunk)
 originalHandler (CatchInfoOnce thunk) =
   thunk
+originalHandler (Catch thunk) =
+  (const thunk)
+originalHandler (CatchInfo thunk) =
+  thunk
 originalHandler _ =
   const pass
 {-# inline originalHandler #-}
@@ -214,3 +218,21 @@
   InterpreterFor Interrupt r
 interpretInterruptOnce =
   interpretInterruptWith CatchInfoOnce
+
+-- |Eliminate 'Interrupt' without interpreting.
+interpretInterruptNull ::
+  InterpreterFor Interrupt r
+interpretInterruptNull =
+  interpretH \case
+    Register _ _ ->
+      pureT ()
+    Unregister _ ->
+      pureT ()
+    WaitQuit ->
+      pureT ()
+    Quit ->
+      pureT ()
+    Interrupted ->
+      pureT False
+    KillOnQuit _ _ ->
+      pureT Nothing
diff --git a/lib/Polysemy/Conc/Interpreter/Monitor.hs b/lib/Polysemy/Conc/Interpreter/Monitor.hs
--- a/lib/Polysemy/Conc/Interpreter/Monitor.hs
+++ b/lib/Polysemy/Conc/Interpreter/Monitor.hs
@@ -53,7 +53,7 @@
       void (embedFinal @IO (tryTakeMVar sig))
       leftM (spin sig) =<< errorToIOFinal @MonitorCancel (fromExceptionSem @MonitorCancel (raise (run res)))
 
--- |Interpret @'Scoped' 'Monitor'@ with the 'Restart' strategy.
+-- |Interpret @'Polysemy.Conc.Scoped' 'Monitor'@ with the 'Polysemy.Conc.Restart' strategy.
 -- This takes a check action that may put an 'MVar' when the scoped region should be restarted.
 -- The check is executed in a loop, with an interval given in 'MonitorCheck'.
 interpretMonitorRestart ::
diff --git a/lib/Polysemy/Conc/Interpreter/Queue/Pure.hs b/lib/Polysemy/Conc/Interpreter/Queue/Pure.hs
--- a/lib/Polysemy/Conc/Interpreter/Queue/Pure.hs
+++ b/lib/Polysemy/Conc/Interpreter/Queue/Pure.hs
@@ -105,7 +105,6 @@
 -- |Variant of 'interpretQueueListReadOnlyAtomicWith' that interprets the 'State'.
 interpretQueueListReadOnlyState ::
   ∀ d r .
-  Member (Embed IO) r =>
   [d] ->
   InterpreterFor (Queue d) r
 interpretQueueListReadOnlyState ds sem = do
diff --git a/lib/Polysemy/Conc/Monitor.hs b/lib/Polysemy/Conc/Monitor.hs
--- a/lib/Polysemy/Conc/Monitor.hs
+++ b/lib/Polysemy/Conc/Monitor.hs
@@ -1,11 +1,13 @@
+{-# options_haddock prune #-}
+-- |Description: Monitor Implementations, Internal
 module Polysemy.Conc.Monitor where
 
+import Data.Default (Default (def))
 import qualified Polysemy.Time as Time
-import Polysemy.Time (NanoSeconds, Time, TimeUnit, convert, Minutes (Minutes), Seconds (Seconds))
+import Polysemy.Time (Minutes (Minutes), NanoSeconds, Seconds (Seconds), Time, TimeUnit, convert)
 import Torsor (Torsor, difference, minus)
 
 import Polysemy.Conc.Effect.Monitor (MonitorCheck (MonitorCheck))
-import Data.Default (Default (def))
 
 -- |Config for 'monitorClockSkew'.
 data ClockSkewConfig =
diff --git a/polysemy-conc.cabal b/polysemy-conc.cabal
--- a/polysemy-conc.cabal
+++ b/polysemy-conc.cabal
@@ -5,14 +5,14 @@
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-conc
-version:        0.5.0.0
+version:        0.5.1.0
 synopsis:       Polysemy Effects for Concurrency
 description:    See <https://hackage.haskell.org/package/polysemy-conc/docs/Polysemy-Conc.html>
 category:       Concurrency
 homepage:       https://github.com/tek/polysemy-conc#readme
 bug-reports:    https://github.com/tek/polysemy-conc/issues
 author:         Torsten Schmits
-maintainer:     tek@tryp.io
+maintainer:     haskell@tryp.io
 copyright:      2021 Torsten Schmits
 license:        BSD-2-Clause-Patent
 license-file:   LICENSE
