9 | escapeArg : String -> String
10 | escapeArg cmd = let escapedCmdChars = pack $
unpack cmd >>= escapeArgChar in
12 | then escapedCmdChars
13 | else "\"" ++ escapedCmdChars ++ "\""
15 | escapeArgChar : Char -> List Char
18 | then if c == '%' || c == '^' || c == '&' || c == '<' || c == '>' || c == '|' ||
19 | c == '\'' || c == '"' || c == '`' ||
20 | c == ' ' || c == '\t' || c == '\n' || c == ';' || c == ',' || c == '=' || c == '\x0B' || c == '\x0C' || c == '\xFF' ||
21 | c == '(' || c == ')' || c == '!'
24 | else if c == '$' || c == '`' || c == '\\' || c == '"'
32 | escapeCmd : List String -> String
33 | escapeCmd cmd = concat $
intersperse " " $
map escapeArg cmd