Re: How to generalize executing a series of commands,
based on a list?
steffen.siering at googlemail.com
Thu Nov 18 07:40:52 EST 2010
1. Write one routine, which does all the work for just one command.
2. use sequence or mapM, mapM_ from Control.Monad (depending on your
to apply your function to a list of commands
accumulating results you may want to process the output of "sequence"
or use the WriterT Monad Transformer.
If you want to stop processing the rest of the list on error, either
write a recursive function yourself or use foldM or use ErrorT Monad
On Nov 18, 3:03 am, Peter Schmitz <ps.hask... at gmail.com> wrote:
> I am able to use System.Cmd (system) to invoke a shell command
> and interpret the results.
> Please see the code below that works okay for one such command.
> (I invoke a program, passing two args.)
> I am wondering how to generalize this to do likewise for a
> series of commands, where the varying args (filenames, in this
> case) are in a list ('inOutLeafs').
> I will also want to accumulate some results; probably just a
> failure count at this time.
> Any advice or pointers to examples would be much appreciated.
> Thanks in advance,
> -- Peter
> > run :: ... -> IO (Int) -- will return a fail count
> > run
> > -- some args to this function here...
> > = do
> > -- ... set up: inputLeafs, outputLeafs, etc.
> > -- zip two lists of filenames:
> > let inOutLeafs = zip inputLeafs outputLeafs
> > -- the first pair for the first command:
> > let (inFile1,outFile1) = head inOutLeafs
> > -- build 1st command using 1st pair of filenames:
> > let cmd1 = ...
> > exitCode <- system cmd1
> > case (exitCode) of
> > ExitSuccess -> do
> > putStrLn $ "-- OK."
> > return 0
> > ExitFailure failCnt -> do
> > putStrLn $ "-- Failed: " ++ show failCnt
> > return 1
> Haskell-Cafe mailing list
> Haskell-C... at haskell.orghttp://www.haskell.org/mailman/listinfo/haskell-cafe
More information about the Haskell-Cafe