[Haskell-cafe] GHC Extension Proposal: ArgumentBlock

Andrew Gibiansky andrew.gibiansky at gmail.com
Sat Sep 5 22:55:37 UTC 2015


I'd like to propose a GHC extension called (for now) `ArgumentBody`.
`ArgumentBody` is a simple syntax extension, than, when enabled, permits
the following code:

main = when True do
  putStrLn "Hello!"


main = forM values \value ->
  print value


main = forM values \case
    Just x -> print x
    Nothing -> print y


In this code we do not need `$` before `do`, lambda, or lambda-case (if
-XLambdaCase is enabled). This change would *not* extend to `let`, `if`,
`case`, or any other constructs.

Pros:

1. Code is simpler and it greatly reduces the need for "operator line
noise" of $ everywhere.
2. We can avoid using the type-checker hack for $
<http://stackoverflow.com/questions/9468963/runst-and-function-composition>
for things such as runSt.

Cons:

1. Adds complexity to the compiler. (NB: The change is minimal and not
invasive at all.)
2. Contributes to a proliferation of extensions that other tools must
support.  (NB: This is just a parser change so should be easy for all tools
to support.)

I'm very interested in hearing both favoring and dissenting opinions on
this proposed change. If this change is approved of, names besides
-XArgumentBody can be considered.

See more info on Trac <https://ghc.haskell.org/trac/ghc/ticket/10843#ticket>
.

-- Andrew Gibiansky
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150905/225f0760/attachment.html>


More information about the Haskell-Cafe mailing list