runWriter is:exact

Unwrap a writer computation as a (result, output) pair. (The inverse of writer.)
Unwrap a writer computation as a (result, output) pair. (The inverse of writer.)
Run a Writer effect in the style of WriterT (but without the nasty space leak!)
Encapsulation of a writer computation, providing the accumulated output. Typical usage in arrow notation:
proc p -> do
...
(result, output) <- (|runWriter cmd|)
Run a Writer effect and return the final value along with the final output.
Run a Writer effect with a Monoidal log, applying a continuation to the final log and result.
runWriter k (pure a) = k mempty a
runWriter k (tell w) = k w ()
runWriter k (listen (tell w)) = k w (w, ())
runWriter k (censor f (tell w)) = k (f w) ()
Run a Writer effect with a Monoidal log, producing the final log alongside the result value.
runWriter (tell w) = pure (w, ())
runWriter (pure a) = pure (mempty, a)
Run a Writer effect in the style of WriterT (but without the nasty space leak!)
>>> getAny $ snd $ runPureEff $ runWriter $ \w -> do
-- Non-empty list (the tell event does happen)
for_ [1 .. 10] $ \_ -> tell w (Any True)
True