[Haskell-cafe] Re: monad subexpressions
Chris Smith
cdsmith at twu.net
Fri Aug 3 14:36:30 EDT 2007
Claus Reinke <claus.reinke at talk21.com> wrote:
> to illustrate why some of us are concerned about this extension,
> a few examples might help.
Claus, I've been saving your message in order to respond to it when I
have the time to look over it in detail. I don't think there will be
forthcoming answers from me, though. Ultimately, it may just have to
come down to implementing the extension, making it available as an
extension to GHC and perhaps other Haskell compilers, and then learning
from people's experience.
If there is a really good syntax that avoids the need for language
changes, that would be great. If there's one that's clearly good enough
and pops up before I finish this, then I may even abort the work. As it
stands, though, I'm just not sure how to evaluate ideas without language
changes against an alternative that doesn't exist. This is especially
true when we're talking about non-quantifiable ideas like convenience,
readability, and intuitiveness.
As such, I'm happy to pursue the language change route, so that we'll
have a real implementation and a fully developed idea, instead of a
theory to discuss. I suspect it will then be more productive to talk
about the options, such as whether the language change is really needed
or beneficial.
Neil and I just discussed some of the semantic issues you raise here in
another subthread. Some of them are not quite as intuitive as I'd like,
but the meaning is at least well-defined. As for this thread, yes I
agree with Simon that it's necessary to choose your "option c" and tie
any new syntax rather tightly to the 'do' keyword; anything else
involves becoming a mind-reader.
> if (c), then the following are no longer equivalent
>
> 1. return ...
> 2. do return ...
Yes, that is true.
> if you weren't, here's
> a quick question: we've already seen the left- and right-identity
> laws in danger, so what about associativity?
>
> do { do { a; b}; c }
>
> is still the same as
>
> do { a; do { b; c } }
>
> yes? no? perhaps? sometimes? how long did it take you?
I'm not entirely sure I understand the point here. The monad laws are
defined in terms of >>= and return. They have never had anything to do
with do, let, or <-. All of the monad laws still hold.
--
Chris Smith
More information about the Haskell-Cafe
mailing list