[GHC] #10843: Allow do blocks without dollar signs as arguments
GHC
ghc-devs at haskell.org
Fri Sep 18 14:04:46 UTC 2015
#10843: Allow do blocks without dollar signs as arguments
-------------------------------------+-------------------------------------
Reporter: agibiansky | Owner: agibiansky
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.2
(Parser) |
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Revisions: Phab:D1219
-------------------------------------+-------------------------------------
Comment (by bgamari):
I tried to count the +1s and -1s but it seems to be fairly evenly split.
Moreover, it seems like many users are fairly ambivalent on the matter.
Andrew's message from Sept 7 nicely reviews the various arguments for and
against the proposal. I'll reproduce it and a few other notable points
here,
== Pro ==
- It's easier to read than the alternative.
- This extension removes syntactic noise.
- This makes basic `do`-syntax more approachable to newbies; it is a
commonly asked question as to why the `$` is necessary.
- This simplifies the resulting AST, potentially making it simpler for
editors and other tools to do refactoring.
- It's something that belongs in the main language, and if its
something we'd consider for a mythical Haskell', it has to start as an
extension.
- It gets rid of some cases where using `$` doesn't work because `$`
interacts with other infix operators being used in the same expression.
- This would make do blocks consistent with record creation, where
parentheses are skipped, allowing things such as `return R { x = y}`
- This does not change the meaning of any old programs, only allows
new ones that were previously forbidden.
- This gets rid of the need for a specially-typed `$` allowing `runSt
$ do ...`
- Richard Eisenberg points out that the proposal arguably makes the
language **more** consistent, not less,
> I think that it makes the language *more* regular, not less: Look
at
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-220003,
the Haskell 2010 Report on expression syntax. This proposal (if we include
`if`, `let`, and `case`, along with `\` and `do`, which would seem to make
it more consistent) amounts to dropping the /lexp/ nonterminal and
combining it with /aexp/.
== Con ==
- It's harder to read than the alternative.
- Creating a language extension to get rid of a single character is
overkill and unnecessary.
- You can already get rid of the `$` by just adding parentheses.
- More and more syntactic "improvements" just fragment the language.
- Although this is consistent with record syntax, record syntax
without parents was a mistake originally.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10843#comment:12>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list