Given
data Writer w a = Writer w a
we have
data Cofree (Writer w) a
= a :< (w, Cofree (Writer w) a)
which is equivalent to
data Stream (w,a)
= Stream (w,a) (Stream (w,a))
which can properly be written as WriterT w Stream
with
data WriterT w m a = WriterT (m (w,a))