Hi Michael,

On 25 Jun 2007, at 06:39, Michael T. Richter wrote:

do
  x <- performActionA
  y <- performActionB
  z <- performActionC
  return $ calculateStuff x y z

I don't know about you're exact example, but here's what I'd do.

Control.Monad has functions like when, unless, and guard that you can use to check whether the "precondition" holds. I find an "ifM" combinator quite useful sometimes:

ifM :: Monad m => m Bool -> m a -> m a -> ma
ifM cond thenBranch elseBranch = do
  b <- cond
  if cond
    then thenBranch
    else elseBranch

If everything checks out, you can then execute your A, B, and C actions.

I don't think you really want arrows here. The right idiom is applicative functors (see Control.Applicative). You could then write the above as:

calculateStuff <$> x <*> y <*> z

Hope this helps,

  Wouter

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to