Cabal-2.2.0.1: 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 # 
Instance details

Methods

parsec :: CabalParsing m => m Bool #

Parsec Version # 
Instance details

Methods

parsec :: CabalParsing m => m Version #

Parsec VersionRange # 
Instance details
Parsec RepoType # 
Instance details

Methods

parsec :: CabalParsing m => m RepoType #

Parsec RepoKind # 
Instance details

Methods

parsec :: CabalParsing m => m RepoKind #

Parsec PkgconfigName # 
Instance details
Parsec ForeignLibType # 
Instance details
Parsec ForeignLibOption # 
Instance details
Parsec ExecutableScope # 
Instance details
Parsec ComponentId # 
Instance details

Methods

parsec :: CabalParsing m => m ComponentId #

Parsec BuildType # 
Instance details

Methods

parsec :: CabalParsing m => m BuildType #

Parsec AbiHash # 
Instance details

Methods

parsec :: CabalParsing m => m AbiHash #

Parsec Platform # 
Instance details

Methods

parsec :: CabalParsing m => m Platform #

Parsec Arch # 
Instance details

Methods

parsec :: CabalParsing m => m Arch #

Parsec OS # 
Instance details

Methods

parsec :: CabalParsing m => m OS #

Parsec LicenseRef # 
Instance details

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?"
Instance details

Methods

parsec :: CabalParsing m => m LicenseId #

Parsec LicenseExceptionId # 
Instance details
Parsec SimpleLicenseExpression # 
Instance details
Parsec LicenseExpression # 
Instance details
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
Instance details

Methods

parsec :: CabalParsing m => m License #

Parsec ModuleName # 
Instance details

Methods

parsec :: CabalParsing m => m ModuleName #

Parsec ModuleRenaming # 
Instance details
Parsec IncludeRenaming # 
Instance details
Parsec TestType # 
Instance details

Methods

parsec :: CabalParsing m => m TestType #

Parsec PkgconfigDependency # 
Instance details
Parsec BenchmarkType # 
Instance details
Parsec License # 
Instance details

Methods

parsec :: CabalParsing m => m License #

Parsec Extension # 
Instance details

Methods

parsec :: CabalParsing m => m Extension #

Parsec Language # 
Instance details

Methods

parsec :: CabalParsing m => m Language #

Parsec CompilerFlavor # 
Instance details
Parsec FilePathNT # 
Instance details

Methods

parsec :: CabalParsing m => m FilePathNT #

Parsec FreeText # 
Instance details

Methods

parsec :: CabalParsing m => m FreeText #

Parsec TestedWith # 
Instance details

Methods

parsec :: CabalParsing m => m TestedWith #

Parsec SpecLicense # 
Instance details

Methods

parsec :: CabalParsing m => m SpecLicense #

Parsec SpecVersion # 
Instance details

Methods

parsec :: CabalParsing m => m SpecVersion #

Parsec Token' # 
Instance details

Methods

parsec :: CabalParsing m => m Token' #

Parsec Token # 
Instance details

Methods

parsec :: CabalParsing m => m Token #

Parsec PackageName # 
Instance details

Methods

parsec :: CabalParsing m => m PackageName #

Parsec UnqualComponentName # 
Instance details
Parsec DefUnitId # 
Instance details

Methods

parsec :: CabalParsing m => m DefUnitId #

Parsec UnitId #

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

Instance details

Methods

parsec :: CabalParsing m => m UnitId #

Parsec Module # 
Instance details

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"]))
Instance details

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"]))]))
Instance details

Methods

parsec :: CabalParsing m => m OpenUnitId #

Parsec ModuleReexport # 
Instance details
Parsec Mixin # 
Instance details

Methods

parsec :: CabalParsing m => m Mixin #

Parsec ExeDependency # 
Instance details
Parsec Dependency # 
Instance details

Methods

parsec :: CabalParsing m => m Dependency #

Parsec MungedPackageName # 
Instance details
Parsec AbiDependency # 
Instance details
Parsec LegacyExeDependency # 
Instance details
Parsec LibVersionInfo # 
Instance details
Parsec FlagName # 
Instance details

Methods

parsec :: CabalParsing m => m FlagName #

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

Methods

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

Parsec a => Parsec (MQuoted a) # 
Instance details

Methods

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

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

Methods

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

newtype ParsecParser a #

Constructors

PP 
Instances
Monad ParsecParser # 
Instance details
Functor ParsecParser # 
Instance details

Methods

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

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

MonadFail ParsecParser # 
Instance details

Methods

fail :: String -> ParsecParser a #

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

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 # 
Instance details
Enum PWarnType # 
Instance details
Eq PWarnType # 
Instance details
Ord PWarnType # 
Instance details
Show PWarnType # 
Instance details
Generic PWarnType # 
Instance details

Associated Types

type Rep PWarnType :: * -> * #

Binary PWarnType # 
Instance details
NFData PWarnType # 
Instance details

Methods

rnf :: PWarnType -> () #

type Rep PWarnType # 
Instance details
type Rep PWarnType = D1 (MetaData "PWarnType" "Distribution.Parsec.Common" "Cabal-2.2.0.1-JS0vobxWxH7sbYKd0omMO" 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.