
Yitzchak Gale wrote:
Ben Franksen wrote:
...and the Unimo paper[1] explains how to easily write a 'correct' ListT.
Are you sure? Maybe I am missing something, but I don't see any claim that the Unimo ListT satisfies the laws any more than the old mtl ListT.
ListT-Done-Right could also be defined via the Unimo framework, and then it would satisfy the monad laws.
The list monad transformer implemented with Unimo (figure 13) is different from ListT m a = m [a] (figure 11 for reference). Note that I say "the list monad transformer". I don't understand what's so special about "ListT m does not fulfill the monad laws", it just shows that naïvely using m [a] to implement the list monad transformer is incorrect for general m . In other words, there is a big bug in Control.Monad.List and that's all there is to it. Regards, apfelmus