On Mon, Apr 6, 2009 at 1:46 PM, Luke Palmer <lrpalmer@gmail.com> wrote:
On Mon, Apr 6, 2009 at 11:42 AM, David Menendez <dave@zednenem.com> wrote:
Of course, this suggests that mfix should be fixM, so perhaps a better distinction is that mplus and mfix need to be defined per-monad, whereas filterM and replicateM are generic.
Don't you think that is an incidental distinction, not an essential one? It would be like naming our favorite operations mbind and joinM, just because of the way we happened to write the monad class.
Fair enough. I only added that comment when I noticed that my explanation for picking replicateM over mreplicate also applied to mfix. Looking through Control.Monad, I see that all the *M functions require Monad, whereas the m* functions require MonadPlus (or MonadFix). I wonder to what extent that pattern holds in other libraries? -- Dave Menendez <dave@zednenem.com> <http://www.eyrie.org/~zednenem/>