stack-1.4.0: The Haskell Tool Stack

Safe Haskell | None
Language | Haskell2010

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

- interpreterArgsParser :: Bool -> String -> Parser String
- getInterpreterArgs :: String -> IO [String]

# Documentation

interpreterArgsParser :: Bool -> String -> Parser String #

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

getInterpreterArgs :: String -> IO [String] #

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