Cabal
Safe HaskellSafe-Inferred
LanguageHaskell2010

Distribution.Compat.ResponseFile

Synopsis

Documentation

expandResponse :: [String] -> IO [String] Source #

This is a more elaborate version of expandResponse, which not only substitute @foo with the contents of file foo, but performs such substitution recursively. In doing so we keep closer to the reference implementation of expandargv in argv.c from binutils, although this additional functionality likely remains unused by Haskell tooling.

escapeArgs :: [String] -> String #

Given a list of strings, concatenate them into a single string with escaping of certain characters, and the addition of a newline between each string. The escaping is done by adding a single backslash character before any whitespace, single quote, double quote, or backslash character, so this escaping character must be removed. Unescaped whitespace (in this case, newline) is part of this "transport" format to indicate the end of the previous string and the start of a new string.

While unescapeArgs allows using quoting (i.e., convenient escaping of many characters) by having matching sets of single- or double-quotes,escapeArgs does not use the quoting mechanism, and thus will always escape any whitespace, quotes, and backslashes.

escapeArgs ["hello \"world\""] == "hello\\ \\\"world\\\"\n"