diff --git a/lib/Polysemy/Log/Data/LogMetadata.hs b/lib/Polysemy/Log/Data/LogMetadata.hs
--- a/lib/Polysemy/Log/Data/LogMetadata.hs
+++ b/lib/Polysemy/Log/Data/LogMetadata.hs
@@ -2,13 +2,21 @@
 {-# options_haddock prune #-}
 module Polysemy.Log.Data.LogMetadata where
 
+import Polysemy.Internal (send)
+
 -- |Internal effect used as an intermediate stage between 'Polysemy.Log.Log' and 'Polysemy.Log.DataLog', for the purpose
 -- of isolating the metadata annotation task.
 --
 -- The type of metadata is arbitrary and chosen in interpreters, but this exposes a 'HasCallStack' dependency since it's
 -- the primary purpose.
-data LogMetadata a :: Effect where
+data LogMetadata msg :: Effect where
   -- |Schedule a message to be annotated and logged.
-  Annotated :: HasCallStack => a -> LogMetadata a m ()
+  Annotated :: HasCallStack => msg -> LogMetadata msg m ()
 
-makeSem ''LogMetadata
+annotated ::
+  HasCallStack =>
+  Member (LogMetadata msg) r =>
+  msg ->
+  Sem r ()
+annotated msg =
+  send (Annotated msg)
diff --git a/polysemy-log.cabal b/polysemy-log.cabal
--- a/polysemy-log.cabal
+++ b/polysemy-log.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-log
-version:        0.2.2.0
+version:        0.2.2.1
 synopsis:       Polysemy effects for logging
 description:    See <https://hackage.haskell.org/package/polysemy-log/docs/Polysemy-Log.html>
 category:       Logging
@@ -107,13 +107,13 @@
       ViewPatterns
   ghc-options: -flate-specialise -fspecialise-aggressively -Wall -Wredundant-constraints
   build-depends:
-      ansi-terminal >=0.10.0 && <0.11
+      ansi-terminal
     , base ==4.*
-    , polysemy >=1.3 && <1.6
+    , polysemy ==1.5.*
     , polysemy-conc >=0.1.0.0 && <0.2
     , polysemy-time >=0.1.1.0 && <0.2
-    , relude >=0.5 && <0.8
-    , string-interpolate >=0.2.1
+    , relude >=0.7 && <1.2
+    , string-interpolate
     , template-haskell
     , text
     , time
@@ -193,16 +193,16 @@
       ViewPatterns
   ghc-options: -flate-specialise -fspecialise-aggressively -Wall -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
   build-depends:
-      ansi-terminal >=0.10.0 && <0.11
+      ansi-terminal
     , base ==4.*
     , hedgehog
-    , polysemy >=1.3 && <1.6
+    , polysemy ==1.5.*
     , polysemy-conc >=0.1.0.0 && <0.2
     , polysemy-log
     , polysemy-test
     , polysemy-time >=0.1.1.0 && <0.2
-    , relude >=0.5 && <0.8
-    , string-interpolate >=0.2.1
+    , relude >=0.7 && <1.2
+    , string-interpolate
     , tasty
     , tasty-hedgehog
     , template-haskell
diff --git a/readme.md b/readme.md
--- a/readme.md
+++ b/readme.md
@@ -4,19 +4,48 @@
 
 # About
 
-A common interface for the polysemy logging backend adapters:
+A common interface for the polysemy logging backend adapters.
 
+An example program using [co-log], for the simple logger with predefined formatting and a custom data type:
+
 ```haskell
-import Polysemy.Log
-import Polysemy.Log.Colog
+import Colog (logTextStdout)
+import Colog.Polysemy (runLogAction)
+import Polysemy (runM)
 
-prog :: Member Log r => Sem r ()
-prog = do
-  Log.debug "debugging"
-  Log.error "failing"
+import Polysemy.Log.Colog (interpretDataLogColog, interpretLogStdout)
+import qualified Polysemy.Log.Data.DataLog as DataLog
+import Polysemy.Log.Data.DataLog (DataLog)
+import qualified Polysemy.Log.Data.Log as Log
+import Polysemy.Log.Data.Log (Log)
 
-interpretLogColog prog :: Sem [Colog.Log (LogEntry LogMessage), Embed IO] ()
-interpretLogStdout prog :: Sem '[Embed IO] ()
+progSimple ::
+  Member Log r =>
+  Sem r ()
+progSimple = do
+  Log.debug "debug"
+  Log.warn "warn"
+
+data Message =
+  Message {
+    severity :: Text,
+    message :: Text
+  }
+  deriving (Eq, Show)
+
+progData ::
+  Member (DataLog Message) r =>
+  Sem r ()
+progData = do
+  DataLog.dataLog (Message "warn" "warning!")
+  DataLog.local (\ msg@Message{message} -> msg {message = "context: " <> message}) do
+    DataLog.dataLog (Message "error" "segfault!")
+
+main :: IO ()
+main =
+  runM do
+    interpretLogStdout progSimple
+    runLogAction @IO (contramap message logTextStdout) $ interpretDataLogColog @Message $ progData
 ```
 
 For more documentation, please consult Hackage:
@@ -49,3 +78,4 @@
 ```
 
 [nix]: https://nixos.org/manual/nix/unstable
+[co-log]: https://hackage.haskell.org/package/co-log
