HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

ModuleCabal-syntax-3.12.1.0Haskell2010

Distribution.Parsec

  • 5 types
  • 2 classes
  • 29 values
classclass Parsec a where
#

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

For parsing .cabal like file structure, see Distribution.Fields.

Methods

Instances78FieldGrammar, Parsec, …
  • Parsec OpenModuleDefined in Cabal-syntax-3.12.1.0 · Distribution.Backpack
    Example1 expression
    eitherParsec "Includes2-0.1.0.0-inplace-mysql:Database.MySQL" :: Either String OpenModuleRight (OpenModule (DefiniteUnitId (DefUnitId {unDefUnitId = UnitId "Includes2-0.1.0.0-inplace-mysql"})) (ModuleName "Database.MySQL"))
  • Parsec OpenUnitIdDefined in Cabal-syntax-3.12.1.0 · Distribution.Backpack
    Example1 expression
    eitherParsec "foobar" :: Either String OpenUnitIdRight (DefiniteUnitId (DefUnitId {unDefUnitId = UnitId "foobar"}))
    Example1 expression
    eitherParsec "foo[Str=text-1.2.3:Data.Text.Text]" :: Either String OpenUnitIdRight (IndefFullUnitId (ComponentId "foo") (fromList [(ModuleName "Str",OpenModule (DefiniteUnitId (DefUnitId {unDefUnitId = UnitId "text-1.2.3"})) (ModuleName "Data.Text.Text"))]))
  • Parsec AbiTagDefined in Cabal-syntax-3.12.1.0 · Distribution.Compiler
  • Parsec CompilerFlavorDefined in Cabal-syntax-3.12.1.0 · Distribution.Compiler
  • Parsec CompilerIdDefined in Cabal-syntax-3.12.1.0 · Distribution.Compiler
  • Parsec FilePathNTDefined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Newtypes
  • Parsec SpecLicenseDefined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Newtypes
  • Parsec SpecVersionDefined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Newtypes
  • Parsec TestedWithDefined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Newtypes
  • Parsec TokenDefined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Newtypes
  • Parsec Token'Defined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Newtypes
  • Parsec LicenseDefined in Cabal-syntax-3.12.1.0 · Distribution.License
  • Parsec ModuleNameDefined in Cabal-syntax-3.12.1.0 · Distribution.ModuleName
  • Parsec CompatFilePathDefined in Cabal-syntax-3.12.1.0 · Distribution.PackageDescription.FieldGrammar
  • Parsec CompatLicenseFileDefined in Cabal-syntax-3.12.1.0 · Distribution.PackageDescription.FieldGrammar
  • Parsec LicenseDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.License
    Example1 expression
    eitherParsec "BSD-3-Clause AND MIT" :: Either String LicenseRight (License (EAnd (ELicense (ELicenseId BSD_3_Clause) Nothing) (ELicense (ELicenseId MIT) Nothing)))
    Example1 expression
    eitherParsec "NONE" :: Either String LicenseRight NONE
  • Parsec LicenseExceptionIdDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseExceptionId
  • Parsec LicenseExpressionDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseExpression
  • Parsec SimpleLicenseExpressionDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseExpression
  • Parsec LicenseIdDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseId
    Example1 expression
    eitherParsec "BSD-3-Clause" :: Either String LicenseIdRight BSD_3_Clause
    Example1 expression
    eitherParsec "BSD3" :: Either String LicenseIdLeft "...Unknown SPDX license identifier: 'BSD3' Do you mean BSD-3-Clause?"
  • Parsec LicenseRefDefined in Cabal-syntax-3.12.1.0 · Distribution.SPDX.LicenseReference
  • Parsec ArchDefined in Cabal-syntax-3.12.1.0 · Distribution.System
  • Parsec OSDefined in Cabal-syntax-3.12.1.0 · Distribution.System
  • Parsec PlatformDefined in Cabal-syntax-3.12.1.0 · Distribution.System
  • Parsec AbiDependencyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.AbiDependency
  • Parsec AbiHashDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.AbiHash
  • Parsec BenchmarkTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.BenchmarkType
  • Parsec BuildTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.BuildType
  • Parsec ComponentIdDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ComponentId
  • Parsec ComponentNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ComponentName
  • Parsec DependencyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.Dependency
    Example1 expression
    simpleParsec "mylib:sub" :: Maybe DependencyJust (Dependency (PackageName "mylib") (OrLaterVersion (mkVersion [0])) (fromNonEmpty (LSubLibName (UnqualComponentName "sub") :| [])))
    Example1 expression
    simpleParsec "mylib:{sub1,sub2}" :: Maybe DependencyJust (Dependency (PackageName "mylib") (OrLaterVersion (mkVersion [0])) (fromNonEmpty (LSubLibName (UnqualComponentName "sub1") :| [LSubLibName (UnqualComponentName "sub2")])))
    Example1 expression
    simpleParsec "mylib:{ sub1 , sub2 }" :: Maybe DependencyJust (Dependency (PackageName "mylib") (OrLaterVersion (mkVersion [0])) (fromNonEmpty (LSubLibName (UnqualComponentName "sub1") :| [LSubLibName (UnqualComponentName "sub2")])))
    Example1 expression
    simpleParsec "mylib:{ sub1 , sub2 } ^>= 42" :: Maybe DependencyJust (Dependency (PackageName "mylib") (MajorBoundVersion (mkVersion [42])) (fromNonEmpty (LSubLibName (UnqualComponentName "sub1") :| [LSubLibName (UnqualComponentName "sub2")])))
    Example1 expression
    simpleParsec "mylib:{ } ^>= 42" :: Maybe DependencyNothing
    Example1 expression
    traverse_ print (map simpleParsec ["mylib:mylib", "mylib:{mylib}", "mylib:{mylib,sublib}" ] :: [Maybe Dependency])Just (Dependency (PackageName "mylib") (OrLaterVersion (mkVersion [0])) (fromNonEmpty (LMainLibName :| [])))Just (Dependency (PackageName "mylib") (OrLaterVersion (mkVersion [0])) (fromNonEmpty (LMainLibName :| [])))Just (Dependency (PackageName "mylib") (OrLaterVersion (mkVersion [0])) (fromNonEmpty (LMainLibName :| [LSubLibName (UnqualComponentName "sublib")])))

    Spaces around colon are not allowed:

    Example1 expression
    map simpleParsec ["mylib: sub", "mylib :sub", "mylib: {sub1,sub2}", "mylib :{sub1,sub2}"] :: [Maybe Dependency][Nothing,Nothing,Nothing,Nothing]

    Sublibrary syntax is accepted since cabal-version: 3.0

    Example1 expression
    map (`simpleParsec'` "mylib:sub") [CabalSpecV2_4, CabalSpecV3_0] :: [Maybe Dependency][Nothing,Just (Dependency (PackageName "mylib") (OrLaterVersion (mkVersion [0])) (fromNonEmpty (LSubLibName (UnqualComponentName "sub") :| [])))]
  • Parsec ExeDependencyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ExeDependency

    Examples

    Example1 expression
    simpleParsec "happy:happy" :: Maybe ExeDependencyJust (ExeDependency (PackageName "happy") (UnqualComponentName "happy") (OrLaterVersion (mkVersion [0])))
    Example1 expression
    simpleParsec "happy:happy >= 1.19.12" :: Maybe ExeDependencyJust (ExeDependency (PackageName "happy") (UnqualComponentName "happy") (OrLaterVersion (mkVersion [1,19,12])))
    Example1 expression
    simpleParsec "happy:happy>=1.19.12" :: Maybe ExeDependencyJust (ExeDependency (PackageName "happy") (UnqualComponentName "happy") (OrLaterVersion (mkVersion [1,19,12])))
    Example1 expression
    simpleParsec "happy : happy >= 1.19.12" :: Maybe ExeDependencyNothing
    Example1 expression
    simpleParsec "happy: happy >= 1.19.12" :: Maybe ExeDependencyNothing
    Example1 expression
    simpleParsec "happy :happy >= 1.19.12" :: Maybe ExeDependencyNothing
  • Parsec ExecutableScopeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ExecutableScope
  • Parsec ExposedModuleDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ExposedModule
  • Parsec FlagAssignmentDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.Flag
    Example1 expression
    simpleParsec "" :: Maybe FlagAssignmentJust (fromList [])
    Example1 expression
    simpleParsec "+foo -bar" :: Maybe FlagAssignmentJust (fromList [(FlagName "bar",(1,False)),(FlagName "foo",(1,True))])
    Example1 expression
    simpleParsec "-none -any" :: Maybe FlagAssignmentJust (fromList [(FlagName "any",(1,False)),(FlagName "none",(1,False))])
    Example1 expression
    simpleParsec "+foo -foo +foo +foo" :: Maybe FlagAssignmentJust (fromList [(FlagName "foo",(4,True))])
    Example1 expression
    simpleParsec "+foo -bar baz" :: Maybe FlagAssignmentNothing

    Issue #7279 was fixed in Cabal-3.8

    Example1 expression
    explicitEitherParsec (parsecCommaList parsec) "+foo , -bar" :: Either String [FlagAssignment]Right [fromList [(FlagName "foo",(1,True))],fromList [(FlagName "bar",(1,False))]]
    Example1 expression
    explicitEitherParsec (parsecCommaList parsecFlagAssignmentNonEmpty) "+foo , -bar" :: Either String [FlagAssignment]Right [fromList [(FlagName "foo",(1,True))],fromList [(FlagName "bar",(1,False))]]
    Example1 expression
    simpleParsec "+foo+foo" :: Maybe FlagAssignmentNothing
  • Parsec FlagNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.Flag
  • Parsec LibVersionInfoDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ForeignLib
  • Parsec ForeignLibOptionDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ForeignLibOption
  • Parsec ForeignLibTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ForeignLibType
  • Parsec IncludeRenamingDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.IncludeRenaming
  • Parsec CompatPackageKeyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.InstalledPackageInfo.FieldGrammar
  • Parsec ExposedModulesDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.InstalledPackageInfo.FieldGrammar
  • Parsec InstWithDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.InstalledPackageInfo.FieldGrammar
  • Parsec SpecLicenseLenientDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.InstalledPackageInfo.FieldGrammar
  • Parsec LegacyExeDependencyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.LegacyExeDependency
  • Parsec LibraryVisibilityDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.LibraryVisibility
  • Parsec MixinDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.Mixin
    Example1 expression
    simpleParsec "mylib" :: Maybe MixinJust (Mixin {mixinPackageName = PackageName "mylib", mixinLibraryName = LMainLibName, mixinIncludeRenaming = IncludeRenaming {includeProvidesRn = DefaultRenaming, includeRequiresRn = DefaultRenaming}})
    Example1 expression
    simpleParsec "thatlib:sublib" :: Maybe MixinJust (Mixin {mixinPackageName = PackageName "thatlib", mixinLibraryName = LSubLibName (UnqualComponentName "sublib"), mixinIncludeRenaming = IncludeRenaming {includeProvidesRn = DefaultRenaming, includeRequiresRn = DefaultRenaming}})
    Example1 expression
    simpleParsec "thatlib:thatlib" :: Maybe MixinJust (Mixin {mixinPackageName = PackageName "thatlib", mixinLibraryName = LMainLibName, mixinIncludeRenaming = IncludeRenaming {includeProvidesRn = DefaultRenaming, includeRequiresRn = DefaultRenaming}})

    Sublibrary syntax is accepted since cabal-version: 3.4.

    Example1 expression
    map (`simpleParsec'` "mylib:sub") [CabalSpecV3_0, CabalSpecV3_4] :: [Maybe Mixin][Nothing,Just (Mixin {mixinPackageName = PackageName "mylib", mixinLibraryName = LSubLibName (UnqualComponentName "sub"), mixinIncludeRenaming = IncludeRenaming {includeProvidesRn = DefaultRenaming, includeRequiresRn = DefaultRenaming}})]
  • Parsec ModuleDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.Module
  • Parsec ModuleReexportDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ModuleReexport
  • Parsec ModuleRenamingDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.ModuleRenaming
  • Parsec MungedPackageIdDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.MungedPackageId
    Example1 expression
    simpleParsec "foo-bar-0" :: Maybe MungedPackageIdJust (MungedPackageId {mungedName = MungedPackageName (PackageName "foo-bar") LMainLibName, mungedVersion = mkVersion [0]})
    Example1 expression
    simpleParsec "foo-bar" :: Maybe MungedPackageIdJust (MungedPackageId {mungedName = MungedPackageName (PackageName "foo-bar") LMainLibName, mungedVersion = mkVersion []})
    Example1 expression
    simpleParsec "z-foo-bar-z-baz-0" :: Maybe MungedPackageIdJust (MungedPackageId {mungedName = MungedPackageName (PackageName "foo-bar") (LSubLibName (UnqualComponentName "baz")), mungedVersion = mkVersion [0]})
    Example1 expression
    simpleParsec "foo-bar-0-0" :: Maybe MungedPackageIdNothing
    Example1 expression
    simpleParsec "foo-bar.0" :: Maybe MungedPackageIdNothing
    Example1 expression
    simpleParsec "foo-bar.4-2" :: Maybe MungedPackageIdNothing
  • Parsec MungedPackageNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.MungedPackageName
    Example1 expression
    simpleParsec "servant" :: Maybe MungedPackageNameJust (MungedPackageName (PackageName "servant") LMainLibName)
    Example1 expression
    simpleParsec "z-servant-z-lackey" :: Maybe MungedPackageNameJust (MungedPackageName (PackageName "servant") (LSubLibName (UnqualComponentName "lackey")))
    Example1 expression
    simpleParsec "z-servant-zz" :: Maybe MungedPackageNameJust (MungedPackageName (PackageName "z-servant-zz") LMainLibName)
  • Parsec PackageIdentifierDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PackageId
    Example1 expression
    simpleParsec "foo-bar-0" :: Maybe PackageIdentifierJust (PackageIdentifier {pkgName = PackageName "foo-bar", pkgVersion = mkVersion [0]})
    Example1 expression
    simpleParsec "foo-bar" :: Maybe PackageIdentifierJust (PackageIdentifier {pkgName = PackageName "foo-bar", pkgVersion = mkVersion []})

    Note: Stricter than Text instance

    Example1 expression
    simpleParsec "foo-bar-0-0" :: Maybe PackageIdentifierNothing
    Example1 expression
    simpleParsec "foo-bar.0" :: Maybe PackageIdentifierNothing
    Example1 expression
    simpleParsec "foo-bar.4-2" :: Maybe PackageIdentifierNothing
    Example1 expression
    simpleParsec "1.2.3" :: Maybe PackageIdentifierNothing
  • Parsec PackageNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PackageName
  • Parsec PackageVersionConstraintDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PackageVersionConstraint
    Example1 expression
    simpleParsec "foo" :: Maybe PackageVersionConstraintJust (PackageVersionConstraint (PackageName "foo") (OrLaterVersion (mkVersion [0])))
    Example1 expression
    simpleParsec "foo >=2.0" :: Maybe PackageVersionConstraintJust (PackageVersionConstraint (PackageName "foo") (OrLaterVersion (mkVersion [2,0])))
    Example1 expression
    simpleParsec "foo-2.0" :: Maybe PackageVersionConstraintJust (PackageVersionConstraint (PackageName "foo") (ThisVersion (mkVersion [2,0])))
  • Parsec PkgconfigDependencyDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PkgconfigDependency
  • Parsec PkgconfigNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PkgconfigName
  • Parsec PkgconfigVersionDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PkgconfigVersion
    Example1 expression
    simpleParsec "1.0.2n" :: Maybe PkgconfigVersionJust (PkgconfigVersion "1.0.2n")
    Example1 expression
    simpleParsec "0.3.5+ds" :: Maybe PkgconfigVersionNothing
  • Parsec PkgconfigVersionRangeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.PkgconfigVersionRange
  • Parsec KnownRepoTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.SourceRepo
  • Parsec RepoKindDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.SourceRepo
  • Parsec RepoTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.SourceRepo
  • Parsec TestTypeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.TestType
  • Parsec DefUnitIdDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.UnitId
  • Parsec UnitIdDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.UnitId

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

  • Parsec UnqualComponentNameDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.UnqualComponentName
  • Parsec VersionDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.Version
  • Parsec VersionRangeDefined in Cabal-syntax-3.12.1.0 · Distribution.Types.VersionRange.Internal
    Example1 expression
    simpleParsec "^>= 3.4" :: Maybe VersionRangeJust (MajorBoundVersion (mkVersion [3,4]))

    Small history:

    -any and -none removed in 3.4 Use >=0 and <0 instead.

    Example1 expression
    map (`simpleParsec'` "-none") [CabalSpecV3_0, CabalSpecV3_4] :: [Maybe VersionRange][Just (EarlierVersion (mkVersion [0])),Nothing]

    Set operations are introduced in 3.0

    Example1 expression
    map (`simpleParsec'` "^>= { 1.2 , 1.3 }") [CabalSpecV2_4, CabalSpecV3_0] :: [Maybe VersionRange][Nothing,Just (UnionVersionRanges (MajorBoundVersion (mkVersion [1,2])) (MajorBoundVersion (mkVersion [1,3])))]

    ^>= is introduced in 2.0

    Example1 expression
    map (`simpleParsec'` "^>=1.2") [CabalSpecV1_24, CabalSpecV2_0] :: [Maybe VersionRange][Nothing,Just (MajorBoundVersion (mkVersion [1,2]))]

    -none is introduced in 1.22

    Example1 expression
    map (`simpleParsec'` "-none") [CabalSpecV1_20, CabalSpecV1_22] :: [Maybe VersionRange][Nothing,Just (EarlierVersion (mkVersion [0]))]

    Operators are introduced in 1.8. Issues only a warning.

    Example1 expression
    map (`simpleParsecW'` "== 1 || ==2") [CabalSpecV1_6, CabalSpecV1_8] :: [Maybe VersionRange][Nothing,Just (UnionVersionRanges (ThisVersion (mkVersion [1])) (ThisVersion (mkVersion [2])))]

    Wild-version ranges are introduced in 1.6. Issues only a warning.

    Example1 expression
    map (`simpleParsecW'` "== 1.2.*") [CabalSpecV1_4, CabalSpecV1_6] :: [Maybe VersionRange][Nothing,Just (IntersectVersionRanges (OrLaterVersion (mkVersion [1,2])) (EarlierVersion (mkVersion [1,3])))]
  • Parsec ExtensionDefined in Cabal-syntax-3.12.1.0 · Language.Haskell.Extension
  • Parsec LanguageDefined in Cabal-syntax-3.12.1.0 · Language.Haskell.Extension
  • Parsec BoolDefined in Cabal-syntax-3.12.1.0 · Distribution.Parsec
  • FieldGrammar Parsec ParsecFieldGrammarDefined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Parsec
  • Parsec a => Parsec (MQuoted a)Defined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Newtypes
  • Parsec a => Parsec (Identity a)Defined in Cabal-syntax-3.12.1.0 · Distribution.Parsec
  • Parsec (SymbolicPath from to)Defined in Cabal-syntax-3.12.1.0 · Distribution.Utils.Path
  • (Newtype a b, Sep sep, Parsec b) => Parsec (List sep b a)Defined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Newtypes
  • (Newtype a b, Sep sep, Parsec b) => Parsec (NonEmpty' sep b a)Defined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Newtypes
  • (Newtype a b, Ord a, Sep sep, Parsec b) => Parsec (Set' sep b a)Defined in Cabal-syntax-3.12.1.0 · Distribution.FieldGrammar.Newtypes
newtypenewtype ParsecParser a
#
Instances9Monad, Functor, MonadFail, Applicative, Alternative, MonadPlus, …

CabalParsing and diagnostics

1 declaration

Warnings

datadata PWarnType
#

Type of parser warning. We do classify warnings.

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

Constructors

Instances9Bounded, Enum, Eq, Ord, Show, Generic, …
datadata PWarning
#

Parser warning.

Instances7Eq, Ord, Show, Generic, NFData, Binary, …

Errors

datadata PError
#

Parser error.

Constructors

Instances5Show, Generic, NFData, Binary, Rep

Position

5 declarations
datadata Position
#

1-indexed row and column positions in a file.

Constructors

Instances7Eq, Ord, Show, Generic, NFData, Binary, …

Utilities

13 declarations