[Haskell] return?

Tomasz Zielonka t.zielonka at students.mimuw.edu.pl
Fri Apr 30 12:26:07 EDT 2004

On Thu, Apr 29, 2004 at 06:27:32PM -0500, Ben_Yu at asc.aon.com wrote:
> Hi,
> While writing monad programs, I sometimes want to do a return as it is in
> imperative program. i.e.,
> do{return 1; return 2} is same as return 1
> Is this possible at all?

Someone already proposed an Error monad, but I think that Continuation
monad is more appropriate, as it's easier to ,,return'' values of
different types. It also allows you to choose the place you want to
,,return'' to.

You'll probably want to use features of other monad, so use a ContT
monad transformer.

Here's an example:

    import Control.Monad.Cont

    code = (\m -> runContT m return) $ do
	x <- callCC $ \exit -> do
	    exit 1
	    return 2
	lift (print x)

This will print 1, not 2.

Best regards,

.signature: Too many levels of symbolic links

More information about the Haskell mailing list