I'm not quite sure if it exists but with working with lifted monads/lifted arrows it would be useful.
Let f be function from m a to n a where m and n are monad (arrows respectivly) for any a then: > do v <- something 0 > lift (f) g <- somethingElse > h <- somethingInLift > i <- somethingCompletlyDifferent v > doSomething g h is syntaxt sugar of > do v <- something 0 > (g, h) <- f $ do g <- somethingElse > h <- something > i <- somethingCompletlyDifferent v > return (g, h) > doSomething g h and > proc (x) -> do v <- something -< x > lift (f) g <- somethingElse -< () > h <- somethingInLift -< () > i <- doSomething -< v > somethingCompletlyDifferent -< (g, h) is syntax sugar of > proc (x) -> do v <- something -< g > (g, h) <- f (proc (v) -> do g <- somethingElse -< () > h <- somethingInLift -< () > i <- doSomething -< v > returnA -< (g, h)) -< v > somethingCompletlyDifferent -< (g, h) I am aware that syntatic sugar is evil (http://www.haskell.org/haskellwiki/Syntactic_sugar/Cons) and therefore I'd prefere to post it here before submitting feature request to ghc (I'll also threat no resoponses as nobody care so why pollute syntax). Regards PS. I'm aware that lift is existing function (Control.Monad.Trans) so possibly other name will be choosen. PPS. Syntax is similar to rec as last line can be binding _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe