[Haskell-cafe] Can it be proven there are no intermediate "useful" type classes between Applicative Functors & Monads?
KC
kc1956 at gmail.com
Mon Jun 6 19:33:39 CEST 2011
On Mon, Jun 6, 2011 at 9:19 AM, Brent Yorgey <byorgey at 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
More information about the Haskell-Cafe
mailing list