Problem with ghc on Windows ME

Glynn Clements glynn.clements at
Thu Jan 29 17:04:43 EST 2004

C.Reinke wrote:

> Therefore, my suggestion would be to keep the rawSystem from
> ghc-6.0.1 (which doesn't seem to do any interpretation?), and
> to provide a system-specific escape function
>   System.Cmd.escape :: String -> String -> String
>   -- (System.Cmd.escape chars string) escapes occurrences of 
>   -- chars in string, according to convention on the current
>   -- system
> If really necessary, there could be a convenience function
> somewhat like:
>   -- try to do "the right thing"
>   System.Cmd.rawSystem' :: String -> [String] -> IO ExitCode
>   System.Cmd.rawSystem' path args =
>     rawSystem $ concat (path:[' ':(escape "\\\"" a) | a <- args])

That sounds is if it makes sense, but it doesn't. At least, not on
Unix. On Unix, there are two basic options for invoking another

1. Use the shell, i.e. system(). Pass a single string which will
undergo all of the various forms of processing which the shell

2. Don't use the shell. Pass a list of strings which become the
argv[i] of the called program.

If you don't want any processing, the correct solution is to bypass
the shell altogether, *not* to attempt to subject the string to an
inverse transformation in the hope that the shell will eventually end
up passing the desired argv[i] to the called program.

Glynn Clements <glynn.clements at>

More information about the Glasgow-haskell-users mailing list