Cabal-1.16.0: A framework for packaging Haskell software

Portability | portable
Maintainer | cabal-devel@haskell.org
Safe Haskell | None

Distribution.PackageDescription.Parse

Contents

- Package descriptions
  - Parsing
  - Supplementary build information

Description

This defined parsers and partial pretty printers for the `.cabal` format. Some of the complexity in this module is due to the fact that we have to be backwards compatible with old `.cabal` files, so there's code to translate into the newer structure.

Synopsis

- readPackageDescription :: Verbosity -> FilePath -> IO GenericPackageDescription
- writePackageDescription :: FilePath -> PackageDescription -> IO ()
- parsePackageDescription :: String -> ParseResult GenericPackageDescription
- showPackageDescription :: PackageDescription -> String
- data ParseResult a
  - = ParseFailed PError
  - | ParseOk [PWarning] a
- data FieldDescr a = FieldDescr {
  - fieldName :: String
  - fieldGet :: a -> Doc
  - fieldSet :: LineNo -> String -> a -> ParseResult a
  }
- type LineNo = Int
- readHookedBuildInfo :: Verbosity -> FilePath -> IO HookedBuildInfo
- parseHookedBuildInfo :: String -> ParseResult HookedBuildInfo
- writeHookedBuildInfo :: FilePath -> HookedBuildInfo -> IO ()
- showHookedBuildInfo :: HookedBuildInfo -> String
- pkgDescrFieldDescrs :: [FieldDescr PackageDescription]
- libFieldDescrs :: [FieldDescr Library]
- executableFieldDescrs :: [FieldDescr Executable]
- binfoFieldDescrs :: [FieldDescr BuildInfo]
- sourceRepoFieldDescrs :: [FieldDescr SourceRepo]
- testSuiteFieldDescrs :: [FieldDescr TestSuiteStanza]
- flagFieldDescrs :: [FieldDescr Flag]

# Package descriptions

readPackageDescription :: Verbosity -> FilePath -> IO GenericPackageDescription

Parse the given package file.

writePackageDescription :: FilePath -> PackageDescription -> IO ()

parsePackageDescription :: String -> ParseResult GenericPackageDescription

Parses the given file into a `GenericPackageDescription`.

In Cabal 1.2 the syntax for package descriptions was changed to a format with sections and possibly indented property descriptions.

showPackageDescription :: PackageDescription -> String

## Parsing

data ParseResult a

Constructors

ParseFailed PError |
ParseOk [PWarning] a |

Instances

Monad ParseResult |
Show a => Show (ParseResult a) |

data FieldDescr a

Field descriptor. The parameter `a` parameterizes over where the field's value is stored in.

Constructors

FieldDescr |

Fields

fieldName :: String
fieldGet :: a -> Doc
fieldSet :: LineNo -> String -> a -> ParseResult a

  `fieldSet n str x` Parses the field value from the given input string `str` and stores the result in `x` if the parse was successful. Otherwise, reports an error on line number `n`.

type LineNo = Int

## Supplementary build information

readHookedBuildInfo :: Verbosity -> FilePath -> IO HookedBuildInfo

parseHookedBuildInfo :: String -> ParseResult HookedBuildInfo

writeHookedBuildInfo :: FilePath -> HookedBuildInfo -> IO ()

showHookedBuildInfo :: HookedBuildInfo -> String

pkgDescrFieldDescrs :: [FieldDescr PackageDescription]

libFieldDescrs :: [FieldDescr Library]

executableFieldDescrs :: [FieldDescr Executable]

binfoFieldDescrs :: [FieldDescr BuildInfo]

sourceRepoFieldDescrs :: [FieldDescr SourceRepo]

testSuiteFieldDescrs :: [FieldDescr TestSuiteStanza]

flagFieldDescrs :: [FieldDescr Flag]