[Haskell-cafe] Re: How to generalize executing a series of
commands, based on a list?
ps.haskell at gmail.com
Thu Nov 18 15:20:10 EST 2010
Thank you very much for the help. Good tips for improving my code design.
I'm new to sequence, mapM, and mapM_; I've seen mapM a lot while reading
code and wanted to learn it; now I have a reason! Thanks.
On Thu, Nov 18, 2010 at 5:40 AM, steffen <steffen.siering at googlemail.com>wrote:
> 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://
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe