One more 'do' pattern

Jesse Tov tov at ccs.neu.edu
Sat Mar 28 13:04:27 EDT 2009


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



More information about the Haskell-prime mailing list