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