Cabal-2.2.0.0: A framework for packaging Haskell software

Safe HaskellNone
LanguageHaskell2010

Distribution.Parsec.Class

Contents

Synopsis

Documentation

class Parsec a where #

Class for parsing with parsec. Mainly used for .cabal file fields.

Minimal complete definition

parsec

Methods

parsec :: CabalParsing m => m a #

Instances

Parsec Bool # 

Methods

parsec :: CabalParsing m => m Bool #

Parsec Version # 

Methods

parsec :: CabalParsing m => m Version #

Parsec VersionRange # 
Parsec RepoType # 

Methods

parsec :: CabalParsing m => m RepoType #

Parsec RepoKind # 

Methods

parsec :: CabalParsing m => m RepoKind #

Parsec PkgconfigName # 
Parsec ForeignLibType # 
Parsec ForeignLibOption # 
Parsec ExecutableScope # 
Parsec ComponentId # 

Methods

parsec :: CabalParsing m => m ComponentId #

Parsec BuildType # 

Methods

parsec :: CabalParsing m => m BuildType #

Parsec AbiHash # 

Methods

parsec :: CabalParsing m => m AbiHash #

Parsec Platform # 

Methods

parsec :: CabalParsing m => m Platform #

Parsec Arch # 

Methods

parsec :: CabalParsing m => m Arch #

Parsec OS # 

Methods

parsec :: CabalParsing m => m OS #

Parsec LicenseRef # 

Methods

parsec :: CabalParsing m => m LicenseRef #

Parsec LicenseId #
>>> eitherParsec "BSD-3-Clause" :: Either String LicenseId
Right BSD_3_Clause
>>> eitherParsec "BSD3" :: Either String LicenseId
Left "...Unknown SPDX license identifier: 'BSD3' Do you mean BSD-3-Clause?"

Methods

parsec :: CabalParsing m => m LicenseId #

Parsec LicenseExceptionId # 
Parsec SimpleLicenseExpression # 
Parsec LicenseExpression # 
Parsec License #
>>> eitherParsec "BSD-3-Clause AND MIT" :: Either String License
Right (License (EAnd (ELicense (ELicenseId BSD_3_Clause) Nothing) (ELicense (ELicenseId MIT) Nothing)))
>>> eitherParsec "NONE" :: Either String License
Right NONE

Methods

parsec :: CabalParsing m => m License #

Parsec ModuleName # 

Methods

parsec :: CabalParsing m => m ModuleName #

Parsec ModuleRenaming # 
Parsec IncludeRenaming # 
Parsec TestType # 

Methods

parsec :: CabalParsing m => m TestType #

Parsec PkgconfigDependency # 
Parsec BenchmarkType # 
Parsec License # 

Methods

parsec :: CabalParsing m => m License #

Parsec Extension # 

Methods

parsec :: CabalParsing m => m Extension #

Parsec Language # 

Methods

parsec :: CabalParsing m => m Language #

Parsec CompilerFlavor # 
Parsec FilePathNT # 

Methods

parsec :: CabalParsing m => m FilePathNT #

Parsec FreeText # 

Methods

parsec :: CabalParsing m => m FreeText #

Parsec TestedWith # 

Methods

parsec :: CabalParsing m => m TestedWith #

Parsec SpecLicense # 

Methods

parsec :: CabalParsing m => m SpecLicense #

Parsec SpecVersion # 

Methods

parsec :: CabalParsing m => m SpecVersion #

Parsec Token' # 

Methods

parsec :: CabalParsing m => m Token' #

Parsec Token # 

Methods

parsec :: CabalParsing m => m Token #

Parsec PackageName # 

Methods

parsec :: CabalParsing m => m PackageName #

Parsec UnqualComponentName # 
Parsec DefUnitId # 

Methods

parsec :: CabalParsing m => m DefUnitId #

Parsec UnitId #

The textual format for UnitId coincides with the format GHC accepts for -package-id.

Methods

parsec :: CabalParsing m => m UnitId #

Parsec Module # 

Methods

parsec :: CabalParsing m => m Module #

Parsec OpenModule #
>>> eitherParsec "Includes2-0.1.0.0-inplace-mysql:Database.MySQL" :: Either String OpenModule
Right (OpenModule (DefiniteUnitId (DefUnitId {unDefUnitId = UnitId "Includes2-0.1.0.0-inplace-mysql"})) (ModuleName ["Database","MySQL"]))

Methods

parsec :: CabalParsing m => m OpenModule #

Parsec OpenUnitId #
>>> eitherParsec "foobar" :: Either String OpenUnitId
Right (DefiniteUnitId (DefUnitId {unDefUnitId = UnitId "foobar"}))
>>> eitherParsec "foo[Str=text-1.2.3:Data.Text.Text]" :: Either String OpenUnitId
Right (IndefFullUnitId (ComponentId "foo") (fromList [(ModuleName ["Str"],OpenModule (DefiniteUnitId (DefUnitId {unDefUnitId = UnitId "text-1.2.3"})) (ModuleName ["Data","Text","Text"]))]))

Methods

parsec :: CabalParsing m => m OpenUnitId #

Parsec ModuleReexport # 
Parsec Mixin # 

Methods

parsec :: CabalParsing m => m Mixin #

Parsec ExeDependency # 
Parsec Dependency # 

Methods

parsec :: CabalParsing m => m Dependency #

Parsec MungedPackageName # 
Parsec AbiDependency # 
Parsec LegacyExeDependency # 
Parsec LibVersionInfo # 
Parsec FlagName # 

Methods

parsec :: CabalParsing m => m FlagName #

Parsec ExposedModule # 
Parsec TestShowDetails # 
Parsec a => Parsec (Identity a) # 

Methods

parsec :: CabalParsing m => m (Identity a) #

Parsec a => Parsec (MQuoted a) # 

Methods

parsec :: CabalParsing m => m (MQuoted a) #

(Newtype b a, Sep sep, Parsec b) => Parsec (List sep b a) # 

Methods

parsec :: CabalParsing m => m (List sep b a) #

newtype ParsecParser a #

Constructors

PP 

Instances

Monad ParsecParser # 
Functor ParsecParser # 

Methods

fmap :: (a -> b) -> ParsecParser a -> ParsecParser b #

(<$) :: a -> ParsecParser b -> ParsecParser a #

MonadFail ParsecParser # 

Methods

fail :: String -> ParsecParser a #

Applicative ParsecParser # 
Alternative ParsecParser # 
MonadPlus ParsecParser # 
Parsing ParsecParser # 
CharParsing ParsecParser # 
CabalParsing ParsecParser # 

simpleParsec :: Parsec a => String -> Maybe a #

Parse a String with lexemeParsec.

lexemeParsec :: (CabalParsing m, Parsec a) => m a #

parsec could consume trailing spaces, this function will consume.

explicitEitherParsec :: ParsecParser a -> String -> Either String a #

Parse a String with given ParsecParser. Trailing whitespace is accepted.

CabalParsing & warnings

class (CharParsing m, MonadPlus m) => CabalParsing m where #

Parsing class which

  • can report Cabal parser warnings.
  • knows cabal-version we work with

Minimal complete definition

parsecWarning, askCabalSpecVersion

data PWarnType #

Type of parser warning. We do classify warnings.

Different application may decide not to show some, or have fatal behaviour on others

Constructors

PWTOther

Unclassified warning

PWTUTF

Invalid UTF encoding

PWTBoolCase

true or false, not True or False

PWTVersionTag

there are version with tags

PWTNewSyntax

New syntax used, but no cabal-version: >= 1.2 specified

PWTOldSyntax

Old syntax used, and cabal-version >= 1.2 specified

PWTDeprecatedField 
PWTInvalidSubsection 
PWTUnknownField 
PWTUnknownSection 
PWTTrailingFields 
PWTExtraMainIs

extra main-is field

PWTExtraTestModule

extra test-module field

PWTExtraBenchmarkModule

extra benchmark-module field

PWTLexNBSP 
PWTLexBOM 
PWTLexTab 
PWTQuirkyCabalFile

legacy cabal file that we know how to patch

PWTDoubleDash

Double dash token, most likely it's a mistake - it's not a comment

PWTMultipleSingularField

e.g. name or version should be specified only once.

PWTBuildTypeDefault

Workaround for derive-package having build-type: Default. See https://github.com/haskell/cabal/issues/5020.

PWTVersionLeadingZeros

See https://github.com/haskell-infra/hackage-trustees/issues/128

Instances

Bounded PWarnType # 
Enum PWarnType # 
Eq PWarnType # 
Ord PWarnType # 
Show PWarnType # 
Generic PWarnType # 

Associated Types

type Rep PWarnType :: * -> * #

Binary PWarnType # 
NFData PWarnType # 

Methods

rnf :: PWarnType -> () #

type Rep PWarnType # 
type Rep PWarnType = D1 * (MetaData "PWarnType" "Distribution.Parsec.Common" "Cabal-2.2.0.0-KtVb5LuYqFjKrhxFyS8D9H" False) ((:+:) * ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "PWTOther" PrefixI False) (U1 *)) (C1 * (MetaCons "PWTUTF" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "PWTBoolCase" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "PWTVersionTag" PrefixI False) (U1 *)) (C1 * (MetaCons "PWTNewSyntax" PrefixI False) (U1 *))))) ((:+:) * ((:+:) * (C1 * (MetaCons "PWTOldSyntax" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "PWTDeprecatedField" PrefixI False) (U1 *)) (C1 * (MetaCons "PWTInvalidSubsection" PrefixI False) (U1 *)))) ((:+:) * (C1 * (MetaCons "PWTUnknownField" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "PWTUnknownSection" PrefixI False) (U1 *)) (C1 * (MetaCons "PWTTrailingFields" PrefixI False) (U1 *)))))) ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "PWTExtraMainIs" PrefixI False) (U1 *)) (C1 * (MetaCons "PWTExtraTestModule" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "PWTExtraBenchmarkModule" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "PWTLexNBSP" PrefixI False) (U1 *)) (C1 * (MetaCons "PWTLexBOM" PrefixI False) (U1 *))))) ((:+:) * ((:+:) * (C1 * (MetaCons "PWTLexTab" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "PWTQuirkyCabalFile" PrefixI False) (U1 *)) (C1 * (MetaCons "PWTDoubleDash" PrefixI False) (U1 *)))) ((:+:) * (C1 * (MetaCons "PWTMultipleSingularField" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "PWTBuildTypeDefault" PrefixI False) (U1 *)) (C1 * (MetaCons "PWTVersionLeadingZeros" PrefixI False) (U1 *)))))))

Utilities

parsecQuoted :: CabalParsing m => m a -> m a #

Content isn't unquoted

parsecMaybeQuoted :: CabalParsing m => m a -> m a #

parsecMaybeQuoted p = parsecQuoted p | p.

parsecCommaList :: CabalParsing m => m a -> m [a] #

parsecLeadingCommaList :: CabalParsing m => m a -> m [a] #

Like parsecCommaList but accept leading or trailing comma.

p (comma p)*  -- p sepBy comma
(comma p)*    -- leading comma
(p comma)*    -- trailing comma

parsecOptCommaList :: CabalParsing m => m a -> m [a] #

parsecStandard :: (CabalParsing m, Parsec ver) => (ver -> String -> a) -> m a #

Parse a benchmark/test-suite types.