Cabal-1.8.0.2: A framework for packaging Haskell softwareSource codeContentsIndex
Distribution.ParseUtils
Portabilityportable
Maintainercabal-devel@haskell.org
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
type LineNo = Int
data PError
= AmbigousParse String LineNo
| NoParse String LineNo
| TabsError LineNo
| FromString String (Maybe LineNo)
data PWarning
= PWarning String
| UTFWarning LineNo String
locatedErrorMsg :: PError -> (Maybe LineNo, String)
syntaxError :: LineNo -> String -> ParseResult a
warning :: String -> ParseResult ()
runP :: LineNo -> String -> ReadP a a -> String -> ParseResult a
runE :: LineNo -> String -> ReadE a -> String -> ParseResult a
data ParseResult a
= ParseFailed PError
| ParseOk [PWarning] a
catchParseError :: ParseResult a -> (PError -> ParseResult a) -> ParseResult a
parseFail :: PError -> ParseResult a
showPWarning :: FilePath -> PWarning -> String
data Field
= F LineNo String String
| Section LineNo String String [Field]
| IfBlock LineNo String [Field] [Field]
fName :: Field -> String
lineNo :: Field -> LineNo
data FieldDescr a = FieldDescr {
fieldName :: String
fieldGet :: a -> Doc
fieldSet :: LineNo -> String -> a -> ParseResult a
}
ppField :: String -> Doc -> Doc
ppFields :: [FieldDescr a] -> a -> Doc
readFields :: String -> ParseResult [Field]
showFields :: [FieldDescr a] -> a -> String
showSingleNamedField :: [FieldDescr a] -> String -> Maybe (a -> String)
parseFields :: [FieldDescr a] -> a -> String -> ParseResult a
parseFilePathQ :: ReadP r FilePath
parseTokenQ :: ReadP r String
parseTokenQ' :: ReadP r String
parseModuleNameQ :: ReadP r ModuleName
parseBuildTool :: ReadP r Dependency
parsePkgconfigDependency :: ReadP r Dependency
parseOptVersion :: ReadP r Version
parsePackageNameQ :: ReadP r PackageName
parseVersionRangeQ :: ReadP r VersionRange
parseTestedWithQ :: ReadP r (CompilerFlavor, VersionRange)
parseLicenseQ :: ReadP r License
parseExtensionQ :: ReadP r Extension
parseSepList :: ReadP r b -> ReadP r a -> ReadP r [a]
parseCommaList :: ReadP r a -> ReadP r [a]
parseOptCommaList :: ReadP r a -> ReadP r [a]
showFilePath :: FilePath -> Doc
showToken :: String -> Doc
showTestedWith :: (CompilerFlavor, VersionRange) -> Doc
showFreeText :: String -> Doc
parseFreeText :: ReadP s String
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
warnUnrec :: UnrecFieldParser a
ignoreUnrec :: UnrecFieldParser a
Documentation
type LineNo = IntSource
data PError Source
Constructors
AmbigousParse String LineNo
NoParse String LineNo
TabsError LineNo
FromString String (Maybe LineNo)
show/hide Instances
data PWarning Source
Constructors
PWarning String
UTFWarning LineNo String
show/hide Instances
locatedErrorMsg :: PError -> (Maybe LineNo, String)Source
syntaxError :: LineNo -> String -> ParseResult aSource
warning :: String -> ParseResult ()Source
runP :: LineNo -> String -> ReadP a a -> String -> ParseResult aSource
runE :: LineNo -> String -> ReadE a -> String -> ParseResult aSource
data ParseResult a Source
Constructors
ParseFailed PError
ParseOk [PWarning] a
show/hide Instances
catchParseError :: ParseResult a -> (PError -> ParseResult a) -> ParseResult aSource
parseFail :: PError -> ParseResult aSource
showPWarning :: FilePath -> PWarning -> StringSource
data Field Source
Constructors
F LineNo String StringA 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*
  }
show/hide Instances
fName :: Field -> StringSource
lineNo :: Field -> LineNoSource
data FieldDescr a Source
Field descriptor. The parameter a parameterizes over where the field's value is stored in.
Constructors
FieldDescr
fieldName :: String
fieldGet :: a -> Doc
fieldSet :: LineNo -> String -> a -> ParseResult afieldSet 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.
ppField :: String -> Doc -> DocSource
ppFields :: [FieldDescr a] -> a -> DocSource
readFields :: String -> ParseResult [Field]Source
showFields :: [FieldDescr a] -> a -> StringSource
showSingleNamedField :: [FieldDescr a] -> String -> Maybe (a -> String)Source
parseFields :: [FieldDescr a] -> a -> String -> ParseResult aSource
parseFilePathQ :: ReadP r FilePathSource
parseTokenQ :: ReadP r StringSource
parseTokenQ' :: ReadP r StringSource
parseModuleNameQ :: ReadP r ModuleNameSource
parse a module name
parseBuildTool :: ReadP r DependencySource
parsePkgconfigDependency :: ReadP r DependencySource
parseOptVersion :: ReadP r VersionSource
parsePackageNameQ :: ReadP r PackageNameSource
parseVersionRangeQ :: ReadP r VersionRangeSource
parseTestedWithQ :: ReadP r (CompilerFlavor, VersionRange)Source
parseLicenseQ :: ReadP r LicenseSource
parseExtensionQ :: ReadP r ExtensionSource
parseSepListSource
::
=> ReadP r bThe parser for the stuff between commas
-> ReadP r a
-> ReadP r [a]
parseCommaListSource
::
=> ReadP r a
-> ReadP r [a]
parseOptCommaListSource
::
=> ReadP r a
-> ReadP r [a]
showFilePath :: FilePath -> DocSource
showToken :: String -> DocSource
showTestedWith :: (CompilerFlavor, VersionRange) -> DocSource
showFreeText :: String -> DocSource
Pretty-print free-format text, ensuring that it is vertically aligned, and with blank lines replaced by dots for correct re-parsing.
parseFreeText :: ReadP s StringSource
field :: String -> (a -> Doc) -> ReadP a a -> FieldDescr aSource
simpleField :: String -> (a -> Doc) -> ReadP a a -> (b -> a) -> (a -> b -> b) -> FieldDescr bSource
listField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr bSource
spaceListField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr bSource
commaListField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr bSource
optsField :: String -> CompilerFlavor -> (b -> [(CompilerFlavor, [String])]) -> ([(CompilerFlavor, [String])] -> b -> b) -> FieldDescr bSource
liftField :: (b -> a) -> (a -> b -> b) -> FieldDescr a -> FieldDescr bSource
boolField :: String -> (b -> Bool) -> (Bool -> b -> b) -> FieldDescr bSource
parseQuoted :: ReadP r a -> ReadP r aSource
type UnrecFieldParser a = (String, String) -> a -> Maybe aSource
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 aSource
A default unrecognized field parser which simply returns Nothing, i.e. ignores all unrecognized fields, so warnings will be generated.
ignoreUnrec :: UnrecFieldParser aSource
A default unrecognized field parser which silently (i.e. no warnings will be generated) ignores unrecognized fields, by returning the structure being built unmodified.
Produced by Haddock version 2.6.0