Is this possible at all?
I don't think so, in the form that you suggest.
Ultimately, it all comes down to function applications, for which there is no such "bail out". Rather, I think something like this is required:
do { ... ; if cond then return 1 else do (the rest) }
Here's an example from some real (tested) code: [[ -- Open and read file, returning its handle and content, or Nothing -- WARNING: the handle must not be closed until input is fully evaluated repOpenFile :: String -> RepStateIO (Maybe (Handle,String)) repOpenFile fnam = do { (hnd,hop) <- lift $ if null fnam then return (stdin,True) else do { o <- try (openFile fnam ReadMode) ; case o of Left e -> return (stdin,False) Right h -> return (h,True) } ; hrd <- lift $ hIsReadable hnd ; res <- if hop && hrd then do { ; fc <- lift $ hGetContents hnd ; return $ Just (hnd,fc) } else do { lift $ hClose hnd ; repError ("Cannot read file: "++fnam) 3 ; return Nothing } ; return res } ]]
#g --
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
This seems useful to me when I need to do something like do mwhen cond $ return 1 ...... -- subsequent actions
I know I can do if cond then return 1 else ( ...--subsequent actions )
However, that syntax does not look very pleasant to me due to this extra indentation and the pair of parens.
Is this possible at all?
Ben.
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
------------ Graham Klyne For email: http://www.ninebynine.org/#Contact
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell