On Mon, Jun 6, 2011 at 9:19 AM, Brent Yorgey <byor...@seas.upenn.edu> wrote: > On Sun, Jun 05, 2011 at 12:51:47PM -0700, KC wrote: >> If new intermediate classes crop up then there would be no point in fixing >> >> class (Applicative m) => Monad m where >> >> since it would have to be changed if new intermediate classes are >> found. > > There actually is at least one intermediate class that I know of, > > class Applicative m => Branching m where > branch :: m Bool -> m a -> m a -> m a > > subject to the laws > > branch (m *> pure True) t f == m *> t > branch (m *> pure False) t f == m *> f > > or something like that. The idea is that Applicative computations > have a fixed structure which is independent of intermediate results; > Monad computations correspond to (potentially) infinitely branching > trees, since intermediate results (which could be of an infinite-sized > type) can be used to compute the next action; but Branching > computations correspond to *finitely* branching trees, since future > computation can depend on intermediate results, but only one binary > choice at a time. > > However, I doubt this qualifies as "useful" no matter how you define > it, although I would not be sad to be proven wrong. In any case, I > think it is ethically indefensible to procrastinate in doing something > good just in case you might miss an opportunity to do something > perfect later. > > -Brent >
I take it you would prefer the following signature class (Applicative m) => Monad m where -- -- Regards, KC _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe