Distribution.Parsec.Newtypes

Cabal-2.2.0.1: A framework for packaging Haskell software

Safe Haskell | None
Language | Haskell2010

Distribution.Parsec.Newtypes

Contents

- List
  - Modifiers
  - Type
- Version & License
- Identifiers

Description

This module provides `newtype` wrappers to be used with Distribution.FieldGrammar.

Synopsis

- alaList :: sep -> [a] -> List sep (Identity a) a
- alaList' :: sep -> (a -> b) -> [a] -> List sep b a
- data CommaVCat = CommaVCat
- data CommaFSep = CommaFSep
- data VCat = VCat
- data FSep = FSep
- data NoCommaFSep = NoCommaFSep
- data List sep b a
- newtype SpecVersion = SpecVersion {
  - getSpecVersion :: Either Version VersionRange
  }
- newtype TestedWith = TestedWith {
  - getTestedWith :: (CompilerFlavor, VersionRange)
  }
- newtype SpecLicense = SpecLicense {
  - getSpecLicense :: Either License License
  }
- newtype Token = Token {
  - getToken :: String
  }
- newtype Token' = Token' {
  - getToken' :: String
  }
- newtype MQuoted a = MQuoted {
  - getMQuoted :: a
  }
- newtype FreeText = FreeText {
  - getFreeText :: String
  }
- newtype FilePathNT = FilePathNT {
  - getFilePathNT :: String
  }

# List

alaList :: sep -> [a] -> List sep (Identity a) a #

`alaList` and `alaList'` are simply `List`, with additional phantom arguments to constraint the resulting type

    >>> :t alaList VCat
    alaList VCat :: [a] -> List VCat (Identity a) a

    >>> :t alaList' FSep Token
    alaList' FSep Token :: [String] -> List FSep Token String

alaList' :: sep -> (a -> b) -> [a] -> List sep b a #

More general version of `alaList`.

## Modifiers

data CommaVCat #

Vertical list with commas. Displayed with `vcat`

Constructors

CommaVCat |

data CommaFSep #

Paragraph fill list with commas. Displayed with `fsep`

Constructors

CommaFSep |

data VCat #

Vertical list with optional commas. Displayed with `vcat`.

Constructors

VCat |

data FSep #

Paragraph fill list with optional commas. Displayed with `fsep`.

Constructors

FSep |

data NoCommaFSep #

Paragraph fill list without commas. Displayed with `fsep`.

Constructors

NoCommaFSep |

## Type

data List sep b a #

List separated with optional commas. Displayed with `sep`, arguments of type `a` are parsed and pretty-printed as `b`.

Instances

(Newtype b a, Sep sep, Pretty b) => Pretty (List sep b a) # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pretty :: List sep b a -> Doc #
(Newtype b a, Sep sep, Parsec b) => Parsec (List sep b a) # |
Instance details Defined in Distribution.Parsec.Newtypes Methods parsec :: CabalParsing m => m (List sep b a) #
Newtype (List sep wrapper a) [a] # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: [a] -> List sep wrapper a # unpack :: List sep wrapper a -> [a] #

# Version & License

newtype SpecVersion #

Version range or just version, i.e. `cabal-version` field.

There are few things to consider:

- Starting with 2.2 the cabal-version field should be the first field in the file and only exact version is accepted. Therefore if we get e.g. `>= 2.2`, we fail. See https://github.com/haskell/cabal/issues/4899

Constructors

SpecVersion |
Fields getSpecVersion :: Either Version VersionRange

Instances

Pretty SpecVersion # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pretty :: SpecVersion -> Doc #
Parsec SpecVersion # |
Instance details Defined in Distribution.Parsec.Newtypes Methods parsec :: CabalParsing m => m SpecVersion #
Newtype SpecVersion (Either Version VersionRange) # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: Either Version VersionRange -> SpecVersion # unpack :: SpecVersion -> Either Version VersionRange #

newtype TestedWith #

Version range or just version

Constructors

TestedWith |
Fields getTestedWith :: (CompilerFlavor, VersionRange)

Instances

Pretty TestedWith # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pretty :: TestedWith -> Doc #
Parsec TestedWith # |
Instance details Defined in Distribution.Parsec.Newtypes Methods parsec :: CabalParsing m => m TestedWith #
Newtype TestedWith (CompilerFlavor, VersionRange) # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: (CompilerFlavor, VersionRange) -> TestedWith # unpack :: TestedWith -> (CompilerFlavor, VersionRange) #

newtype SpecLicense #

SPDX License expression or legacy license

Constructors

SpecLicense |
Fields getSpecLicense :: Either License License

Instances

Pretty SpecLicense # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pretty :: SpecLicense -> Doc #
Parsec SpecLicense # |
Instance details Defined in Distribution.Parsec.Newtypes Methods parsec :: CabalParsing m => m SpecLicense #
Newtype SpecLicense (Either License License) # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: Either License0 License -> SpecLicense # unpack :: SpecLicense -> Either License0 License #

# Identifiers

newtype Token #

Haskell string or `[^ ,]+`

Constructors

Token |
Fields getToken :: String

Instances

Pretty Token # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pretty :: Token -> Doc #
Parsec Token # |
Instance details Defined in Distribution.Parsec.Newtypes Methods parsec :: CabalParsing m => m Token #
Newtype Token String # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: String -> Token # unpack :: Token -> String #

newtype Token' #

Haskell string or `[^ ]+`

Constructors

Token' |
Fields getToken' :: String

Instances

Pretty Token' # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pretty :: Token' -> Doc #
Parsec Token' # |
Instance details Defined in Distribution.Parsec.Newtypes Methods parsec :: CabalParsing m => m Token' #
Newtype Token' String # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: String -> Token' # unpack :: Token' -> String #

newtype MQuoted a #

Either `"quoted"` or `un-quoted`.

Constructors

MQuoted |
Fields getMQuoted :: a

Instances

Pretty a => Pretty (MQuoted a) # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pretty :: MQuoted a -> Doc #
Parsec a => Parsec (MQuoted a) # |
Instance details Defined in Distribution.Parsec.Newtypes Methods parsec :: CabalParsing m => m (MQuoted a) #
Newtype (MQuoted a) a # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: a -> MQuoted a # unpack :: MQuoted a -> a #

newtype FreeText #

This is almost ``many` `anyChar``, but it

- trims whitespace from ends of the lines,
- converts lines with only single dot into empty line.

Constructors

FreeText |
Fields getFreeText :: String

Instances

Pretty FreeText # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pretty :: FreeText -> Doc #
Parsec FreeText # |
Instance details Defined in Distribution.Parsec.Newtypes Methods parsec :: CabalParsing m => m FreeText #
Newtype FreeText String # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: String -> FreeText # unpack :: FreeText -> String #

newtype FilePathNT #

Filepath are parsed as `Token`.

Constructors

FilePathNT |
Fields getFilePathNT :: String

Instances

Pretty FilePathNT # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pretty :: FilePathNT -> Doc #
Parsec FilePathNT # |
Instance details Defined in Distribution.Parsec.Newtypes Methods parsec :: CabalParsing m => m FilePathNT #
Newtype FilePathNT String # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: String -> FilePathNT # unpack :: FilePathNT -> String #