Extending the do-notation

Robert Ennals rje33@cam.ac.uk
Sun, 7 Jan 2001 14:41:48 +0000 (GMT)


On Sun, 7 Jan 2001, Sebastien Carlier wrote:

> 
> Sometimes I need to write code which looks like this:
> >    do x <- m1
> >       let y = unzip x
> >       ... -- never using x anymore 
> 
> I thinks the following extension to do-notation would be useful:
> >    pat <- exp1 # exp2 ; exp3
> would be rewritten as
> >    exp2 >>= ((\pat -> exp3) . exp1)
> 
> so that the above example could be rewritten more compactly:
> >    do y <- unzip # m1
> 
> I think the biggest problem with this extension is the choice
> of a proper symbol.

Why not just use a user defined operator. eg:

infixr #

(#) :: Monad m => (a -> b) -> m a -> m b
f # p = p >>= (return . f)


Alternatively, define it to be "fmap", and be a bit more general.


-Rob