
On Fri, 8 Oct 2010 01:13:20 +0300, Lauri Alanko
On Thu, Oct 07, 2010 at 02:45:58PM -0700, Nicolas Pouillard wrote:
On Thu, 07 Oct 2010 18:03:48 +0100, Peter Wortmann
wrote: Might be off-topic here, but I have wondered for a while why Haskell doesn't support something like follows:
do case (<- m) of ...
With the more general rule being:
do ... e (<- m) g => ... m >>= \tmp -> e tmp g
Your "general" rule doesn't subsume your case example, since a case expression is not an application. I think you mean something like
do C[(<- m)] => m >>= \tmp -> C[tmp]
where C is an arbitrary expression context. It could further be generalized to allow several (<- ...) subterms in an expression, with implied left-to right sequencing. Frankly, that seems like a very attractive way to make the do-notation into a more practical imperative sub-language.
This is clearer. However this does not seems very robust against manual refactoring of the "do" notation. Imagine find this code: do s1 C[(<- s2)] And I don't see the (<- s2) in C, and so I refactor it as: s1 >> C[(<- s2)] And so the s2 get affected somewhere else. -- Nicolas Pouillard http://nicolaspouillard.fr