Distribution.PackageDescription.Parsec

Cabal-3.5.0.0: A framework for packaging Haskell software

Copyright | Isaac Jones 2003-2005
License | BSD3
Maintainer | cabal-devel@haskell.org
Portability | portable
Safe Haskell | Safe-Inferred
Language | Haskell2010

Distribution.PackageDescription.Parsec

Contents

- Package descriptions
  - Parsing
- New-style spec-version
  - Supplementary build information

Description

This defined parsers and partial pretty printers for the `.cabal` format.

Synopsis

- readGenericPackageDescription :: Verbosity -> FilePath -> IO GenericPackageDescription
- parseGenericPackageDescription :: ByteString -> ParseResult GenericPackageDescription
- parseGenericPackageDescriptionMaybe :: ByteString -> Maybe GenericPackageDescription
- data ParseResult a
- runParseResult :: ParseResult a -> ([PWarning], Either (Maybe Version, NonEmpty PError) a)
- scanSpecVersion :: ByteString -> Maybe Version
- readHookedBuildInfo :: Verbosity -> FilePath -> IO HookedBuildInfo
- parseHookedBuildInfo :: ByteString -> ParseResult HookedBuildInfo

# Package descriptions

readGenericPackageDescription :: Verbosity -> FilePath -> IO GenericPackageDescription Source #

Parse the given package file.

parseGenericPackageDescription :: ByteString -> ParseResult GenericPackageDescription Source #

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.

parseGenericPackageDescriptionMaybe :: ByteString -> Maybe GenericPackageDescription Source #

`Maybe` variant of `parseGenericPackageDescription`

## Parsing

data ParseResult a Source #

A monad with failure and accumulating errors and warnings.

#### Instances

Instances details

Applicative ParseResult # |
Instance details Defined in Distribution.Fields.ParseResult Methods pure :: a -> ParseResult a Source # (<*>) :: ParseResult (a -> b) -> ParseResult a -> ParseResult b Source # liftA2 :: (a -> b -> c) -> ParseResult a -> ParseResult b -> ParseResult c Source # (*>) :: ParseResult a -> ParseResult b -> ParseResult b Source # (<*) :: ParseResult a -> ParseResult b -> ParseResult a Source #
Functor ParseResult # |
Instance details Defined in Distribution.Fields.ParseResult Methods fmap :: (a -> b) -> ParseResult a -> ParseResult b Source # (<$) :: a -> ParseResult b -> ParseResult a Source #
Monad ParseResult # |
Instance details Defined in Distribution.Fields.ParseResult Methods (>>=) :: ParseResult a -> (a -> ParseResult b) -> ParseResult b Source # (>>) :: ParseResult a -> ParseResult b -> ParseResult b Source # return :: a -> ParseResult a Source #

runParseResult :: ParseResult a -> ([PWarning], Either (Maybe Version, NonEmpty PError) a) Source #

Destruct a `ParseResult` into the emitted warnings and either a successful value or list of errors and possibly recovered a spec-version declaration.

# New-style spec-version

scanSpecVersion :: ByteString -> Maybe Version Source #

Quickly scan new-style spec-version

A new-style spec-version declaration begins the .cabal file and follow the following case-insensitive grammar (expressed in RFC5234 ABNF):

    newstyle-spec-version-decl = "cabal-version" *WS ":" *WS newstyle-pec-version *WS

    spec-version               = NUM "." NUM [ "." NUM ]

    NUM    = DIGIT0 / DIGITP 1*DIGIT0
    DIGIT0 = %x30-39
    DIGITP = %x31-39
    WS = %20

## Supplementary build information

readHookedBuildInfo :: Verbosity -> FilePath -> IO HookedBuildInfo Source #

parseHookedBuildInfo :: ByteString -> ParseResult HookedBuildInfo Source #