Data.Attoparsec.Interpreter

Description

This module implements parsing of additional arguments embedded in a comment when stack is invoked as a script interpreter

### Specifying arguments in script interpreter mode

stack can execute a Haskell source file using runghc and if required it can also install and setup the compiler and any package dependencies automatically.

For using a Haskell source file as an executable script on a Unix like OS, the first line of the file must specify stack as the interpreter using a shebang directive e.g.

#!/usr/bin/env stack

Additional arguments can be specified in a haskell comment following the #! line. The contents inside the comment must be a single valid stack command line, starting with stack as the command and followed by the options to use for executing this file.

The comment must be on the line immediately following the #! line. The comment must start in the first column of the line. When using a block style comment the command can be split on multiple lines.

Here is an example of a single line comment:

#!/usr/bin/env stack
-- stack --resolver lts-3.14 --install-ghc runghc --package random

Here is an example of a multi line block comment:

  #!/usr/bin/env stack
{- stack
--resolver lts-3.14
--install-ghc
runghc
--package random
-}


When the #! line is not present, the file can still be executed using stack <file name> command if the file starts with a valid stack interpreter comment. This can be used to execute the file on Windows for example.

Nested block comments are not supported.

Synopsis

# Documentation

Parser to extract the stack command line embedded inside a comment after validating the placement and formatting rules for a valid interpreter specification.

Extract stack arguments from a correctly placed and correctly formatted comment when it is being used as an interpreter