| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Distribution.Parsec
Synopsis
- class Parsec a where
- parsec :: CabalParsing m => m a
- newtype ParsecParser a = PP {
- unPP :: CabalSpecVersion -> Parsec FieldLineStream [PWarning] a
- runParsecParser :: ParsecParser a -> FilePath -> FieldLineStream -> Either ParseError a
- runParsecParser' :: CabalSpecVersion -> ParsecParser a -> FilePath -> FieldLineStream -> Either ParseError a
- simpleParsec :: Parsec a => String -> Maybe a
- simpleParsecBS :: Parsec a => ByteString -> Maybe a
- simpleParsec' :: Parsec a => CabalSpecVersion -> String -> Maybe a
- simpleParsecW' :: Parsec a => CabalSpecVersion -> String -> Maybe a
- lexemeParsec :: (CabalParsing m, Parsec a) => m a
- eitherParsec :: Parsec a => String -> Either String a
- explicitEitherParsec :: ParsecParser a -> String -> Either String a
- explicitEitherParsec' :: CabalSpecVersion -> ParsecParser a -> String -> Either String a
- class (CharParsing m, MonadPlus m, MonadFail m) => CabalParsing m where
- parsecWarning :: PWarnType -> String -> m ()
- parsecHaskellString :: m String
- askCabalSpecVersion :: m CabalSpecVersion
- data PWarnType
- = PWTOther
- | PWTUTF
- | PWTBoolCase
- | PWTVersionTag
- | PWTNewSyntax
- | PWTOldSyntax
- | PWTDeprecatedField
- | PWTInvalidSubsection
- | PWTUnknownField
- | PWTUnknownSection
- | PWTTrailingFields
- | PWTExtraMainIs
- | PWTExtraTestModule
- | PWTExtraBenchmarkModule
- | PWTLexNBSP
- | PWTLexBOM
- | PWTLexTab
- | PWTQuirkyCabalFile
- | PWTDoubleDash
- | PWTMultipleSingularField
- | PWTBuildTypeDefault
- | PWTVersionOperator
- | PWTVersionWildcard
- | PWTSpecVersion
- | PWTExperimental
- data PWarning = PWarning !PWarnType !Position String
- showPWarning :: FilePath -> PWarning -> String
- data PError = PError Position String
- showPError :: FilePath -> PError -> String
- data Position = Position !Int !Int
- incPos :: Int -> Position -> Position
- retPos :: Position -> Position
- showPos :: Position -> String
- zeroPos :: Position
- parsecToken :: CabalParsing m => m String
- parsecToken' :: CabalParsing m => m String
- parsecFilePath :: CabalParsing m => m FilePath
- parsecQuoted :: CabalParsing m => m a -> m a
- parsecMaybeQuoted :: CabalParsing m => m a -> m a
- parsecCommaList :: CabalParsing m => m a -> m [a]
- parsecCommaNonEmpty :: CabalParsing m => m a -> m (NonEmpty a)
- parsecLeadingCommaList :: CabalParsing m => m a -> m [a]
- parsecLeadingCommaNonEmpty :: CabalParsing m => m a -> m (NonEmpty a)
- parsecOptCommaList :: CabalParsing m => m a -> m [a]
- parsecLeadingOptCommaList :: CabalParsing m => m a -> m [a]
- parsecStandard :: (CabalParsing m, Parsec ver) => (ver -> String -> a) -> m a
- parsecUnqualComponentName :: forall m. CabalParsing m => m String
Documentation
Class for parsing with parsec. Mainly used for .cabal file fields.
For parsing .cabal like file structure, see Distribution.Fields.
Methods
parsec :: CabalParsing m => m a #
Instances
| Parsec OpenModule # |
|
Defined in Distribution.Backpack Methods parsec :: CabalParsing m => m OpenModule # | |
| Parsec OpenUnitId # |
|
Defined in Distribution.Backpack Methods parsec :: CabalParsing m => m OpenUnitId # | |
| Parsec AbiTag # | |
Defined in Distribution.Compiler Methods parsec :: CabalParsing m => m AbiTag # | |
| Parsec CompilerFlavor # | |
Defined in Distribution.Compiler Methods parsec :: CabalParsing m => m CompilerFlavor # | |
| Parsec CompilerId # | |
Defined in Distribution.Compiler Methods parsec :: CabalParsing m => m CompilerId # | |
| Parsec FilePathNT # | |
Defined in Distribution.FieldGrammar.Newtypes Methods parsec :: CabalParsing m => m FilePathNT # | |
| Parsec SpecLicense # | |
Defined in Distribution.FieldGrammar.Newtypes Methods parsec :: CabalParsing m => m SpecLicense # | |
| Parsec SpecVersion # | |
Defined in Distribution.FieldGrammar.Newtypes Methods parsec :: CabalParsing m => m SpecVersion # | |
| Parsec TestedWith # | |
Defined in Distribution.FieldGrammar.Newtypes Methods parsec :: CabalParsing m => m TestedWith # | |
| Parsec Token # | |
Defined in Distribution.FieldGrammar.Newtypes Methods parsec :: CabalParsing m => m Token # | |
| Parsec Token' # | |
Defined in Distribution.FieldGrammar.Newtypes Methods parsec :: CabalParsing m => m Token' # | |
| Parsec License # | |
Defined in Distribution.License Methods parsec :: CabalParsing m => m License # | |
| Parsec ModuleName # | |
Defined in Distribution.ModuleName Methods parsec :: CabalParsing m => m ModuleName # | |
| Parsec License # |
|
Defined in Distribution.SPDX.License Methods parsec :: CabalParsing m => m License # | |
| Parsec LicenseExceptionId # | |
Defined in Distribution.SPDX.LicenseExceptionId Methods parsec :: CabalParsing m => m LicenseExceptionId # | |
| Parsec LicenseExpression # | |
Defined in Distribution.SPDX.LicenseExpression Methods parsec :: CabalParsing m => m LicenseExpression # | |
| Parsec SimpleLicenseExpression # | |
Defined in Distribution.SPDX.LicenseExpression Methods parsec :: CabalParsing m => m SimpleLicenseExpression # | |
| Parsec LicenseId # |
|
Defined in Distribution.SPDX.LicenseId Methods parsec :: CabalParsing m => m LicenseId # | |
| Parsec LicenseRef # | |
Defined in Distribution.SPDX.LicenseReference Methods parsec :: CabalParsing m => m LicenseRef # | |
| Parsec HaddockTarget # | |
Defined in Distribution.Simple.Setup Methods parsec :: CabalParsing m => m HaddockTarget # | |
| Parsec TestShowDetails # | |
Defined in Distribution.Simple.Setup Methods parsec :: CabalParsing m => m TestShowDetails # | |
| Parsec Arch # | |
Defined in Distribution.System Methods parsec :: CabalParsing m => m Arch # | |
| Parsec OS # | |
Defined in Distribution.System Methods parsec :: CabalParsing m => m OS # | |
| Parsec Platform # | |
Defined in Distribution.System Methods parsec :: CabalParsing m => m Platform # | |
| Parsec AbiDependency # | |
Defined in Distribution.Types.AbiDependency Methods parsec :: CabalParsing m => m AbiDependency # | |
| Parsec AbiHash # | |
Defined in Distribution.Types.AbiHash Methods parsec :: CabalParsing m => m AbiHash # | |
| Parsec BenchmarkType # | |
Defined in Distribution.Types.BenchmarkType Methods parsec :: CabalParsing m => m BenchmarkType # | |
| Parsec BuildType # | |
Defined in Distribution.Types.BuildType Methods parsec :: CabalParsing m => m BuildType # | |
| Parsec ComponentId # | |
Defined in Distribution.Types.ComponentId Methods parsec :: CabalParsing m => m ComponentId # | |
| Parsec ComponentName # | |
Defined in Distribution.Types.ComponentName Methods parsec :: CabalParsing m => m ComponentName # | |
| Parsec Dependency # |
Spaces around colon are not allowed:
Sublibrary syntax is accepted since
|
Defined in Distribution.Types.Dependency Methods parsec :: CabalParsing m => m Dependency # | |
| Parsec ExeDependency # | Examples
|
Defined in Distribution.Types.ExeDependency Methods parsec :: CabalParsing m => m ExeDependency # | |
| Parsec ExecutableScope # | |
Defined in Distribution.Types.ExecutableScope Methods parsec :: CabalParsing m => m ExecutableScope # | |
| Parsec ExposedModule # | |
Defined in Distribution.Types.ExposedModule Methods parsec :: CabalParsing m => m ExposedModule # | |
| Parsec FlagAssignment # |
Since: Cabal-3.4.0.0 |
Defined in Distribution.Types.Flag Methods parsec :: CabalParsing m => m FlagAssignment # | |
| Parsec FlagName # | |
Defined in Distribution.Types.Flag Methods parsec :: CabalParsing m => m FlagName # | |
| Parsec LibVersionInfo # | |
Defined in Distribution.Types.ForeignLib Methods parsec :: CabalParsing m => m LibVersionInfo # | |
| Parsec ForeignLibOption # | |
Defined in Distribution.Types.ForeignLibOption Methods parsec :: CabalParsing m => m ForeignLibOption # | |
| Parsec ForeignLibType # | |
Defined in Distribution.Types.ForeignLibType Methods parsec :: CabalParsing m => m ForeignLibType # | |
| Parsec IncludeRenaming # | |
Defined in Distribution.Types.IncludeRenaming Methods parsec :: CabalParsing m => m IncludeRenaming # | |
| Parsec LegacyExeDependency # | |
Defined in Distribution.Types.LegacyExeDependency Methods parsec :: CabalParsing m => m LegacyExeDependency # | |
| Parsec LibraryVisibility # | |
Defined in Distribution.Types.LibraryVisibility Methods parsec :: CabalParsing m => m LibraryVisibility # | |
| Parsec Mixin # |
Sublibrary syntax is accepted since
|
Defined in Distribution.Types.Mixin Methods parsec :: CabalParsing m => m Mixin # | |
| Parsec Module # | |
Defined in Distribution.Types.Module Methods parsec :: CabalParsing m => m Module # | |
| Parsec ModuleReexport # | |
Defined in Distribution.Types.ModuleReexport Methods parsec :: CabalParsing m => m ModuleReexport # | |
| Parsec ModuleRenaming # | |
Defined in Distribution.Types.ModuleRenaming Methods parsec :: CabalParsing m => m ModuleRenaming # | |
| Parsec MungedPackageId # |
|
Defined in Distribution.Types.MungedPackageId Methods parsec :: CabalParsing m => m MungedPackageId # | |
| Parsec MungedPackageName # |
|
Defined in Distribution.Types.MungedPackageName Methods parsec :: CabalParsing m => m MungedPackageName # | |
| Parsec PackageIdentifier # |
Note: Stricter than
|
Defined in Distribution.Types.PackageId Methods parsec :: CabalParsing m => m PackageIdentifier # | |
| Parsec PackageName # | |
Defined in Distribution.Types.PackageName Methods parsec :: CabalParsing m => m PackageName # | |
| Parsec PackageVersionConstraint # |
|
Defined in Distribution.Types.PackageVersionConstraint Methods parsec :: CabalParsing m => m PackageVersionConstraint # | |
| Parsec PkgconfigDependency # | |
Defined in Distribution.Types.PkgconfigDependency Methods parsec :: CabalParsing m => m PkgconfigDependency # | |
| Parsec PkgconfigName # | |
Defined in Distribution.Types.PkgconfigName Methods parsec :: CabalParsing m => m PkgconfigName # | |
| Parsec PkgconfigVersion # |
|
Defined in Distribution.Types.PkgconfigVersion Methods parsec :: CabalParsing m => m PkgconfigVersion # | |
| Parsec PkgconfigVersionRange # | |
Defined in Distribution.Types.PkgconfigVersionRange Methods parsec :: CabalParsing m => m PkgconfigVersionRange # | |
| Parsec KnownRepoType # | |
Defined in Distribution.Types.SourceRepo Methods parsec :: CabalParsing m => m KnownRepoType # | |
| Parsec RepoKind # | |
Defined in Distribution.Types.SourceRepo Methods parsec :: CabalParsing m => m RepoKind # | |
| Parsec RepoType # | |
Defined in Distribution.Types.SourceRepo Methods parsec :: CabalParsing m => m RepoType # | |
| Parsec TestType # | |
Defined in Distribution.Types.TestType Methods parsec :: CabalParsing m => m TestType # | |
| Parsec DefUnitId # | |
Defined in Distribution.Types.UnitId Methods parsec :: CabalParsing m => m DefUnitId # | |
| Parsec UnitId # | The textual format for |
Defined in Distribution.Types.UnitId Methods parsec :: CabalParsing m => m UnitId # | |
| Parsec UnqualComponentName # | |
Defined in Distribution.Types.UnqualComponentName Methods parsec :: CabalParsing m => m UnqualComponentName # | |
| Parsec Version # | |
Defined in Distribution.Types.Version Methods parsec :: CabalParsing m => m Version # | |
| Parsec VersionRange # |
Small history:
Set operations are introduced in 3.0
Operators are introduced in 1.8. Issues only a warning.
Wild-version ranges are introduced in 1.6. Issues only a warning.
|
Defined in Distribution.Types.VersionRange.Internal Methods parsec :: CabalParsing m => m VersionRange # | |
| Parsec Verbosity # | Parser verbosity
Note: this parser will eat trailing spaces. |
Defined in Distribution.Verbosity Methods parsec :: CabalParsing m => m Verbosity # | |
| Parsec Extension # | |
Defined in Language.Haskell.Extension Methods parsec :: CabalParsing m => m Extension # | |
| Parsec Language # | |
Defined in Language.Haskell.Extension Methods parsec :: CabalParsing m => m Language # | |
| Parsec Bool # | |
Defined in Distribution.Parsec Methods parsec :: CabalParsing m => m Bool # | |
| FieldGrammar Parsec ParsecFieldGrammar # | |
Defined in Distribution.FieldGrammar.Parsec Methods blurFieldGrammar :: ALens' a b -> ParsecFieldGrammar b d -> ParsecFieldGrammar a d # uniqueFieldAla :: (Parsec b, Newtype a b) => FieldName -> (a -> b) -> ALens' s a -> ParsecFieldGrammar s a # booleanFieldDef :: FieldName -> ALens' s Bool -> Bool -> ParsecFieldGrammar s Bool # optionalFieldAla :: (Parsec b, Newtype a b) => FieldName -> (a -> b) -> ALens' s (Maybe a) -> ParsecFieldGrammar s (Maybe a) # optionalFieldDefAla :: (Parsec b, Newtype a b, Eq a) => FieldName -> (a -> b) -> ALens' s a -> a -> ParsecFieldGrammar s a # freeTextField :: FieldName -> ALens' s (Maybe String) -> ParsecFieldGrammar s (Maybe String) # freeTextFieldDef :: FieldName -> ALens' s String -> ParsecFieldGrammar s String # freeTextFieldDefST :: FieldName -> ALens' s ShortText -> ParsecFieldGrammar s ShortText # monoidalFieldAla :: (Parsec b, Monoid a, Newtype a b) => FieldName -> (a -> b) -> ALens' s a -> ParsecFieldGrammar s a # prefixedFields :: FieldName -> ALens' s [(String, String)] -> ParsecFieldGrammar s [(String, String)] # knownField :: FieldName -> ParsecFieldGrammar s () # hiddenField :: ParsecFieldGrammar s a -> ParsecFieldGrammar s a # deprecatedSince :: CabalSpecVersion -> String -> ParsecFieldGrammar s a -> ParsecFieldGrammar s a # removedIn :: CabalSpecVersion -> String -> ParsecFieldGrammar s a -> ParsecFieldGrammar s a # availableSince :: CabalSpecVersion -> a -> ParsecFieldGrammar s a -> ParsecFieldGrammar s a # availableSinceWarn :: CabalSpecVersion -> ParsecFieldGrammar s a -> ParsecFieldGrammar s a # | |
| Parsec a => Parsec (MQuoted a) # | |
Defined in Distribution.FieldGrammar.Newtypes Methods parsec :: CabalParsing m => m (MQuoted a) # | |
| Parsec a => Parsec (Identity a) # | |
Defined in Distribution.Parsec Methods parsec :: CabalParsing m => m (Identity a) # | |
| (Newtype a b, Sep sep, Parsec b) => Parsec (List sep b a) # | |
Defined in Distribution.FieldGrammar.Newtypes Methods parsec :: CabalParsing m => m (List sep b a) # | |
| (Newtype a b, Ord a, Sep sep, Parsec b) => Parsec (Set' sep b a) # | |
Defined in Distribution.FieldGrammar.Newtypes Methods parsec :: CabalParsing m => m (Set' sep b a) # | |
newtype ParsecParser a #
Constructors
| PP | |
Fields
| |
Instances
runParsecParser :: ParsecParser a -> FilePath -> FieldLineStream -> Either ParseError a #
Run ParsecParser with cabalSpecLatest.
runParsecParser' :: CabalSpecVersion -> ParsecParser a -> FilePath -> FieldLineStream -> Either ParseError a #
Like runParsecParser but lets specify CabalSpecVersion used.
Since: Cabal-3.0.0.0
simpleParsec :: Parsec a => String -> Maybe a #
Parse a String with lexemeParsec.
simpleParsecBS :: Parsec a => ByteString -> Maybe a #
Like simpleParsec but for ByteString
simpleParsec' :: Parsec a => CabalSpecVersion -> String -> Maybe a #
Parse a String with lexemeParsec using specific CabalSpecVersion.
Since: Cabal-3.4.0.0
simpleParsecW' :: Parsec a => CabalSpecVersion -> String -> Maybe a #
Parse a String with lexemeParsec using specific CabalSpecVersion.
Fail if there are any warnings.
Since: Cabal-3.4.0.0
lexemeParsec :: (CabalParsing m, Parsec a) => m a #
parsec could consume trailing spaces, this function will consume.
eitherParsec :: Parsec a => String -> Either String a #
Parse a String with lexemeParsec.
explicitEitherParsec :: ParsecParser a -> String -> Either String a #
Parse a String with given ParsecParser. Trailing whitespace is accepted.
explicitEitherParsec' :: CabalSpecVersion -> ParsecParser a -> String -> Either String a #
Parse a String with given ParsecParser and CabalSpecVersion. Trailing whitespace is accepted.
See explicitEitherParsec.
Since: Cabal-3.4.0.0
CabalParsing and diagnostics
class (CharParsing m, MonadPlus m, MonadFail m) => CabalParsing m where #
Parsing class which
- can report Cabal parser warnings.
- knows
cabal-versionwe work with
Minimal complete definition
Instances
| CabalParsing ParsecParser # | |
Defined in Distribution.Parsec Methods parsecWarning :: PWarnType -> String -> ParsecParser () # | |
Warnings
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 |
|
| PWTVersionTag | there are version with tags |
| PWTNewSyntax | New syntax used, but no |
| PWTOldSyntax | Old syntax used, and |
| 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. |
| PWTVersionOperator | Version operators used (without cabal-version: 1.8) |
| PWTVersionWildcard | Version wildcard used (without cabal-version: 1.6) |
| PWTSpecVersion | Warnings about cabal-version format. |
| PWTExperimental | Experimental feature |
Instances
Parser warning.
Instances
| Generic PWarning # | |
| Show PWarning # | |
| Binary PWarning # | |
| NFData PWarning # | |
Defined in Distribution.Parsec.Warning | |
| type Rep PWarning # | |
Defined in Distribution.Parsec.Warning type Rep PWarning = D1 ('MetaData "PWarning" "Distribution.Parsec.Warning" "Cabal-3.4.1.0" 'False) (C1 ('MetaCons "PWarning" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 PWarnType) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Position) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))) | |
showPWarning :: FilePath -> PWarning -> String #
Errors
Parser error.
Instances
| Generic PError # | |
| Show PError # | |
| Binary PError # | |
| NFData PError # | |
Defined in Distribution.Parsec.Error | |
| type Rep PError # | |
Defined in Distribution.Parsec.Error type Rep PError = D1 ('MetaData "PError" "Distribution.Parsec.Error" "Cabal-3.4.1.0" 'False) (C1 ('MetaCons "PError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Position) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String))) | |
showPError :: FilePath -> PError -> String #
Position
1-indexed row and column positions in a file.
Instances
| Generic Position # | |
| Show Position # | |
| Binary Position # | |
| NFData Position # | |
Defined in Distribution.Parsec.Position | |
| Eq Position # | |
| Ord Position # | |
Defined in Distribution.Parsec.Position | |
| type Rep Position # | |
Defined in Distribution.Parsec.Position type Rep Position = D1 ('MetaData "Position" "Distribution.Parsec.Position" "Cabal-3.4.1.0" 'False) (C1 ('MetaCons "Position" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedStrict) (Rec0 Int))) | |
Utilities
parsecToken :: CabalParsing m => m String #
[^ ,]
parsecToken' :: CabalParsing m => m String #
[^ ]
parsecFilePath :: CabalParsing m => m FilePath #
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] #
parsecCommaNonEmpty :: CabalParsing m => m a -> m (NonEmpty 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
parsecLeadingCommaNonEmpty :: CabalParsing m => m a -> m (NonEmpty a) #
Since: Cabal-3.4.0.0
parsecOptCommaList :: CabalParsing m => m a -> m [a] #
parsecLeadingOptCommaList :: CabalParsing m => m a -> m [a] #
Like parsecOptCommaList but
- require all or none commas
- accept leading or trailing comma.
p (comma p)* -- p sepBy comma
(comma p)* -- leading comma
(p comma)* -- trailing comma
p* -- no commas: many p
Since: Cabal-3.0.0.0
parsecStandard :: (CabalParsing m, Parsec ver) => (ver -> String -> a) -> m a #
Parse a benchmark/test-suite types.
parsecUnqualComponentName :: forall m. CabalParsing m => m String #