diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+# 0.4.2.0
+
+* Add `Bluefin.DslBuilderEff`
+
+* Add `Bluefin.Prim`
+
 # 0.4.1.0
 
 * Depend on `bluefin-internal >= 0.4.1.0` to pick up `MonadFix`
diff --git a/bluefin.cabal b/bluefin.cabal
--- a/bluefin.cabal
+++ b/bluefin.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               bluefin
-version:            0.4.1.0
+version:            0.4.2.0
 license:            MIT
 license-file:       LICENSE
 author:             Tom Ellis
@@ -26,6 +26,7 @@
       Bluefin.Coroutine,
       Bluefin.CloneableHandle,
       Bluefin.DslBuilder,
+      Bluefin.DslBuilderEff,
       Bluefin.EarlyReturn,
       Bluefin.Eff,
       Bluefin.Exception,
@@ -35,6 +36,7 @@
       Bluefin.Jump,
       Bluefin.Pipes,
       Bluefin.Pipes.Prelude,
+      Bluefin.Prim,
       Bluefin.Reader,
       Bluefin.State,
       Bluefin.StateSource,
diff --git a/src/Bluefin/DslBuilderEff.hs b/src/Bluefin/DslBuilderEff.hs
new file mode 100644
--- /dev/null
+++ b/src/Bluefin/DslBuilderEff.hs
@@ -0,0 +1,11 @@
+-- | Like "Bluefin.DslBuilder", but when you want to be able to run
+-- additional effects as well.
+
+module Bluefin.DslBuilderEff (
+    DslBuilderEff,
+    dslBuilderEff,
+    runDslBuilderEff,
+  )
+where
+
+import Bluefin.Internal.DslBuilderEff
diff --git a/src/Bluefin/Pipes.hs b/src/Bluefin/Pipes.hs
--- a/src/Bluefin/Pipes.hs
+++ b/src/Bluefin/Pipes.hs
@@ -1,7 +1,13 @@
 -- | Reimplementation of the @pipes@ (@Pipes@) ecosystem in Bluefin.
--- It primarily serves as an example of what you can do with Bluefin
--- and you probably won't want to use it directly.  Instead you are
--- recommended to use
+--
+-- You should not use this module.  It will be deprecated and removed
+-- in future versions.
+--
+-- This module is just an example of what you can do with Bluefin and
+-- as such it should be obtained from
+-- [@bluefin-examples@](https://github.com/tomjaguarpaw/bluefin/tree/master/bluefin-examples)
+-- if you want it.  Instead of using it directly you are recommended
+-- to use
 --
 -- * 'Bluefin.Stream', 'Bluefin.Stream.yield'
 -- * 'Bluefin.Consume', 'Bluefin.Consume.await'
diff --git a/src/Bluefin/Pipes/Prelude.hs b/src/Bluefin/Pipes/Prelude.hs
--- a/src/Bluefin/Pipes/Prelude.hs
+++ b/src/Bluefin/Pipes/Prelude.hs
@@ -1,7 +1,13 @@
--- | Reimplementation of the @pipes@ prelude (@Pipes.Prelude@) in
--- Bluefin.  It primarily serves as an example of what you can do with
--- Bluefin and you probably won't want to use it directly.  Instead
--- you are recommended to use
+-- | Reimplementation of the @pipes@ (@Pipes@) ecosystem in Bluefin.
+--
+-- You should not use this module.  It will be deprecated and removed
+-- in future versions.
+--
+-- This module is just an example of what you can do with Bluefin and
+-- as such it should be obtained from
+-- [@bluefin-examples@](https://github.com/tomjaguarpaw/bluefin/tree/master/bluefin-examples)
+-- if you want it.  Instead of using it directly you are recommended
+-- to use
 --
 -- * 'Bluefin.Stream', 'Bluefin.Stream.yield'
 -- * 'Bluefin.Consume', 'Bluefin.Consume.await'
diff --git a/src/Bluefin/Prim.hs b/src/Bluefin/Prim.hs
new file mode 100644
--- /dev/null
+++ b/src/Bluefin/Prim.hs
@@ -0,0 +1,25 @@
+-- | For defining @PrimMonad@ instances, for example:
+--
+-- @
+-- -- Define a handle which includes Prim
+-- data ExAndPrim e = MkExAndPrim (Exception String e) (Prim e)
+--   -- Give it a Handle instance, as per Bluefin.Compound
+--   deriving (Handle) via OneWayCoercibleHandle ExAndPrim
+--   deriving stock (Generic)
+--
+-- instance (e :> es) => OneWayCoercible (ExAndPrim e) (ExAndPrim es) where
+--   oneWayCoercibleImpl = gOneWayCoercible
+--
+-- -- Define a monad M containing the Prim handle
+-- newtype M es a = MkM (DslBuilderEff ExAndPrim es a)
+--   deriving newtype (Functor, Applicative, Monad)
+--
+-- -- Give M a PrimMonad instance
+-- instance PrimMonad (M es) where
+--   type PrimState (M es) = PrimStateEff es
+--   primitive f =
+--     MkM (dslBuilderEff (\\(MkExAndPrim _ prim) -> P.primitive prim f))
+-- @
+module Bluefin.Prim (Prim, PrimStateEff, primitive) where
+
+import Bluefin.Internal.Prim
