Bulat Ziganshin wrote:
• The syntax gains very little over the nice consistent syntax we already have – all you do is move a symbol a little to the left.

action x y >>= \v -> do
action x y $ \v -> do

One way to settle this kind of dispute would be a real macro system. Bulat could define and use the desired syntax without modifying the language definition in a way that would disturb others. Template Haskell is great for some things, but it's unsuitable and unsatisfying in a case like this.

This is out of scope for Haskell', of course, but it's something the community should consider adding at some point.

I've uploaded a package called preprocessor-tools[1] to Hackage that provides very quick-and-dirty syntax extension using a preprocessor. I used it to define a do-notation for parameterized monads, back before GHC supported that.

At one point I used it to define syntax for a "continuation let", which binds the "result" of a CPS-style function [2]:

  clet P = E1 in E   ===   E1 (\P -> E)

I think this is what Bulat wants. (Bulat, if you want to try this, let me know and I'll try to resurrect the code.)

Cheers,
Jesse

[1] http://hackage.haskell.org/cgi-bin/hackage-scripts/package/preprocessor-tools

[2] It seems to generalize nicely:

  clet P1 = E1
       ...
       Pn = En
    in E
  ===
  E1 (\P1 -> ... -> En (\Pn -> E) ... )
  ===
  flip runCont id $ do
    P1 <- Cont E1
    ...
    Pn <- Cont En
    return E

_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-prime

Reply via email to