[Haskell-cafe] How to generalize executing a series of commands, based on a list?

Peter Schmitz ps.haskell at gmail.com
Wed Nov 17 21:03:44 EST 2010


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


More information about the Haskell-Cafe mailing list