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

Reply via email to