
* Ross Paterson
On Sat, Apr 26, 2014 at 09:12:12PM +0300, Michael Snoyman wrote:
I think it's worth resurrecting Gabriel's proposed modification to have the strict writer transformer exposed as an abstract type, built on top of StateT (or using the same implementation as StateT). I've been bitten by the laziness of strict Writer in the past, and thanks to Gabriel's email, I knew how to solve the problem. But I think many people will be misled by the name, documentation improvements notwithstanding.
Indeed it's a trap. But an abstract type would be less transparent than the other transformers, and would be incompatible with the lazy WriterT in subtle ways.
How about just deprecating strict WriterT in favour of strict StateT?
I don't understand the issue here. Why does it have to be abstract or based on StateT? We could simply make a new module with the same WriterT type and the instance instance (Monoid w, Monad m) => Monad (WriterT w m) where m >>= k = WriterT $ do (a, w) <- runWriterT m (b, w') <- runWriterT (k a) let w'' = w `mappend` w' w'' `seq` return (b, w'') I'll leave it up to others to bikeshed the name of such a module (or maybe we should simply replace the current Writer.Strict?) Roman