Cabal-1.16.0: A framework for packaging Haskell software

Portabilityportable
Maintainercabal-devel@haskell.org
Safe HaskellNone

Distribution.ParseUtils

Description

Utilities for parsing PackageDescription and InstalledPackageInfo.

The .cabal file format is not trivial, especially with the introduction of configurations and the section syntax that goes with that. This module has a bunch of parsing functions that is used by the .cabal parser and a couple others. It has the parsing framework code and also little parsers for many of the formats we get in various .cabal file fields, like module names, comma separated lists etc.

Synopsis

Documentation

type LineNo = Int

runP :: LineNo -> String -> ReadP a a -> String -> ParseResult a

data ParseResult a

Constructors

ParseFailed PError 
ParseOk [PWarning] a 

Instances

data Field

Constructors

F LineNo String String

A regular property: value field

Section LineNo String String [Field]

A section with a name and possible parameter. The syntactic structure is:

   sectionname arg {
     field*
   }
IfBlock LineNo String [Field] [Field]

A conditional block with an optional else branch:

  if condition {
    field*
  } else {
    field*
  }

Instances

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.

ppFields :: [FieldDescr a] -> a -> Doc

parseModuleNameQ :: ReadP r ModuleName

parse a module name

parseSepList

Arguments

:: ReadP r b 
-> ReadP r a

The parser for the stuff between commas

-> ReadP r [a] 

parseCommaList

Arguments

:: ReadP r a

The parser for the stuff between commas

-> ReadP r [a] 

parseOptCommaList

Arguments

:: ReadP r a

The parser for the stuff between commas

-> ReadP r [a] 

showFreeText :: String -> Doc

Pretty-print free-format text, ensuring that it is vertically aligned, and with blank lines replaced by dots for correct re-parsing.

field :: String -> (a -> Doc) -> ReadP a a -> FieldDescr a

simpleField :: String -> (a -> Doc) -> ReadP a a -> (b -> a) -> (a -> b -> b) -> FieldDescr b

listField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr b

spaceListField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr b

commaListField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr b

optsField :: String -> CompilerFlavor -> (b -> [(CompilerFlavor, [String])]) -> ([(CompilerFlavor, [String])] -> b -> b) -> FieldDescr b

liftField :: (b -> a) -> (a -> b -> b) -> FieldDescr a -> FieldDescr b

boolField :: String -> (b -> Bool) -> (Bool -> b -> b) -> FieldDescr b

parseQuoted :: ReadP r a -> ReadP r a

type UnrecFieldParser a = (String, String) -> a -> Maybe a

The type of a function which, given a name-value pair of an unrecognized field, and the current structure being built, decides whether to incorporate the unrecognized field (by returning Just x, where x is a possibly modified version of the structure being built), or not (by returning Nothing).

warnUnrec :: UnrecFieldParser a

A default unrecognized field parser which simply returns Nothing, i.e. ignores all unrecognized fields, so warnings will be generated.

ignoreUnrec :: UnrecFieldParser a

A default unrecognized field parser which silently (i.e. no warnings will be generated) ignores unrecognized fields, by returning the structure being built unmodified.