MonadWriter instance for ListT

Nicolas Frisby nicolas.frisby at
Fri Mar 12 20:00:30 EST 2010

*> runWriter . runErrorT $ censor (filter (/=3)) $ tell [1,2,3] >> throwError ""
(Left "",[1,2,3])

That's kind of weird, right? I understand why it is that way. I think
this is reason enough to make censor part of the class, since it
wouldn't have this short-coming if it weren't defined in terms of

*> let censorErrorT f (ErrorT m) = ErrorT (censor f m)
*> runWriter . runErrorT $ censorErrorT (filter (/=3)) $ tell [1,2,3]
>> throwError ""
(Left "",[1,2])

Or is it preferable for censor and pass to misbehave in the same way?

More information about the Libraries mailing list