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. -- Peter
On Thu, Nov 18, 2010 at 5:40 AM, steffen <steffen.sier...@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 > needs), > 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 > Transformer. > > On Nov 18, 3:03 am, Peter Schmitz <ps.hask...@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...@haskell.orghttp:// > www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe