">>" and "do" notation

Wolfgang Jeltsch wolfgang@jeltsch.net
Fri, 29 Mar 2002 00:19:14 +0100

On Thursday, March 28, 2002, 16:37 CET James B. White III wrote:
> [...]
> I think the default definition of ">>" is just that, a default, and not a
> law.

I suppose, a >> b = a >>= \_ -> b is intended to be a law. This would mean
that every redefined (>>) would have to obey this law.

> [...]
> If it is a law, why are users given the power to change it!

For performance reasons, I would suppose.

> Also, I think that the Report *specifies* the translation of "do" to ">>",
> not merely suggests it.

The report specifies certain identities and suggests to use these identities
for translations into the kernel. If it is also a law that a >> b and a >>=
\_ -> b are identical even with respect to laziness then, I think, a
conforming Haskell implementation could use the latter instead of the former
to realize do expressions. But I would prefer implementations using (>>).

> [...]
> ">>" should no longer be a class function with a default value that can be
> changed; it should be syntactic sugar built into Haskell, like "do"
> notation.

It shouldn't be syntactic suger but at most an operator which does not belong
to the monad class. One could define (>>) just as an ordinary function
instead of a class member.

> [...]

By the way, why uses the report the complicated looking \_ -> b instead of
just const b.