[Haskell-cafe] $ do?
brandon_m_moore at yahoo.com
Thu Dec 16 07:31:14 CET 2010
> From: Roman Cheplyaka <roma at ro-che.info>
> Sent: Wed, December 15, 2010 1:36:55 AM
> * Jonathan Geddes <geddes.jonathan at gmail.com> [2010-12-14 19:59:14-0700]
> > Quick question:
> > Why do I need the $ in the following bits of code?
> > > main = withSocketsDo $ do
> > > --do something with sockets
> > > foo = fromMaybe 0 $ do
> > > --do something in the maybe monad
> > I don't see (after admittedly only a minute or so thinking about it)
> > where any grammar ambiguities would be if 'do' had an implicit $ in
> > front of it:
> > > foo = fromMaybe 0 do
> > > --do something in maybe
> > Though now that I've written it down, that is hard for me to visually
> > parse at a glance. I'm still curious though.
> Hi Jonathan,
> it's not clear whether you ask how this implies from the standard or
> what the rationale of such syntax is.
> Regarding the former, there are two distinct syntactic categories in
> Haskell: lexp and aexp. aexp produces all the constructs that can be
> used as function arguments and does not include do expressions. lexp is
> more broad and produces do expressions as well. Next look at these
> productions to see the difference between function application and
> operator application (sections 3.3 and 3.4 of 2010 report):
> fexp → [fexp] aexp
> inﬁxexp → lexp qop inﬁxexp
> Regarding the rationale, I'm not so sure and I'd like to hear an
> explanation from someone competent. But I assume it has something
> to do with the fact that if you supply a 'do' argument, you cannot
> supply any more arguments (because 'do' extends to the right as far as
> possible). Not that I'm convinced that it is a valid reason to prohibit
> such construct.
Years ago, I built GHC with a modified grammar including do and lambdas as aexp.
It seemed to work. There were certainly conflicts reported by Happy, but
seemed to work nicely and I couldn't think of any actual ambiguity.
More information about the Haskell-Cafe