# 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