diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.4.0.0
+
+* Generalized all types by not returning the value (since it can't be used anyway).
+
 # 0.3.0.0
 
 * Added `lucidT`.
diff --git a/Spock-lucid.cabal b/Spock-lucid.cabal
--- a/Spock-lucid.cabal
+++ b/Spock-lucid.cabal
@@ -1,5 +1,5 @@
 name:                Spock-lucid
-version:             0.3.0.0
+version:             0.4.0.0
 synopsis:            Lucid support for Spock
 description:
   Lucid support for Spock
@@ -26,7 +26,6 @@
   -- other-extensions:    
   build-depends:       Spock >= 0.9
                      , base >= 4.7 && < 4.10
-                     , blaze-builder
                      , lucid == 2.*
                      , transformers
   ghc-options:         -Wall -fno-warn-unused-do-bind
diff --git a/lib/Web/Spock/Lucid.hs b/lib/Web/Spock/Lucid.hs
--- a/lib/Web/Spock/Lucid.hs
+++ b/lib/Web/Spock/Lucid.hs
@@ -1,8 +1,5 @@
-{-# LANGUAGE
-CPP,
-OverloadedStrings,
-RankNTypes
-  #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RankNTypes #-}
 
 
 module Web.Spock.Lucid
@@ -19,37 +16,26 @@
 import Control.Monad.Trans.Class
 import Web.Spock
 import Lucid.Base
-import Blaze.ByteString.Builder
 
-#if !MIN_VERSION_base(4,8,0)
-import Data.Monoid (mempty)
-#endif
 
-
 -- | Render HTML and send as response body. Content-type will be @text/html@.
-lucid :: MonadIO m => Html a -> ActionCtxT cxt m a
+lucid :: MonadIO m => Html a -> ActionCtxT cxt m b
 lucid x = do
   setHeader "Content-Type" "text/html; charset=utf-8"
-  let Identity (render, a) = runHtmlT x
-  lazyBytes (toLazyByteString (render mempty))
-  return a
+  lazyBytes (renderBS x)
 {-# INLINE lucid #-}
 
 -- | Like 'lucid', but for @HtmlT IO@.
-lucidIO :: MonadIO m => HtmlT IO a -> ActionCtxT cxt m a
+lucidIO :: MonadIO m => HtmlT IO a -> ActionCtxT cxt m b
 lucidIO x = do
   setHeader "Content-Type" "text/html; charset=utf-8"
-  (render, a) <- liftIO (runHtmlT x)
-  lazyBytes (toLazyByteString (render mempty))
-  return a
+  lazyBytes =<< liftIO (renderBST x)
 {-# INLINE lucidIO #-}
 
 -- | Like 'lucid', but for arbitrary monads. Might require some additional
 -- boilerplate.
-lucidT :: MonadIO m => HtmlT m a -> ActionCtxT cxt m a
+lucidT :: MonadIO m => HtmlT m a -> ActionCtxT cxt m b
 lucidT x = do
   setHeader "Content-Type" "text/html; charset=utf-8"
-  (render, a) <- lift (runHtmlT x)
-  lazyBytes (toLazyByteString (render mempty))
-  return a
+  lazyBytes =<< lift (renderBST x)
 {-# INLINE lucidT #-}
