Cabal-3.3.0.0: A framework for packaging Haskell software

Safe HaskellNone
LanguageHaskell2010

Distribution.FieldGrammar

Contents

Description

This module provides a way to specify a grammar of .cabal -like files.

Synopsis

Field grammar type

class FieldGrammar g where #

FieldGrammar is parametrised by

  • s which is a structure we are parsing. We need this to provide prettyprinter functionality
  • a type of the field.

Note: We'd like to have forall s. Applicative (f s) context.

Methods

blurFieldGrammar :: ALens' a b -> g b c -> g a c #

Unfocus, zoom out, blur FieldGrammar.

uniqueFieldAla #

Arguments

:: (Parsec b, Pretty b, Newtype a b) 
=> FieldName

field name

-> (a -> b)

Newtype pack

-> ALens' s a

lens into the field

-> g s a 

Field which should be defined, exactly once.

booleanFieldDef #

Arguments

:: FieldName

field name

-> ALens' s Bool

lens into the field

-> Bool

default

-> g s Bool 

Boolean field with a default value.

optionalFieldAla #

Arguments

:: (Parsec b, Pretty b, Newtype a b) 
=> FieldName

field name

-> (a -> b)

pack

-> ALens' s (Maybe a)

lens into the field

-> g s (Maybe a) 

Optional field.

optionalFieldDefAla #

Arguments

:: (Parsec b, Pretty b, Newtype a b, Eq a) 
=> FieldName

field name

-> (a -> b)

Newtype pack

-> ALens' s a

Lens' s a: lens into the field

-> a

default value

-> g s a 

Optional field with default value.

freeTextField #

Arguments

:: FieldName 
-> ALens' s (Maybe String)

lens into the field

-> g s (Maybe String) 

freeTextFieldDef #

Arguments

:: FieldName 
-> ALens' s String

lens into the field

-> g s String 

freeTextFieldDefST #

Arguments

:: FieldName 
-> ALens' s ShortText

lens into the field

-> g s ShortText 

Since: 3.2.0.0

monoidalFieldAla #

Arguments

:: (Parsec b, Pretty b, Monoid a, Newtype a b) 
=> FieldName

field name

-> (a -> b)

pack

-> ALens' s a

lens into the field

-> g s a 

Monoidal field.

Values are combined with mappend.

Note: optionalFieldAla is a monoidalField with Last monoid.

prefixedFields #

Arguments

:: FieldName

field name prefix

-> ALens' s [(String, String)]

lens into the field

-> g s [(String, String)] 

Parser matching all fields with a name starting with a prefix.

knownField :: FieldName -> g s () #

Known field, which we don't parse, neither pretty print.

hiddenField :: g s a -> g s a #

Field which is parsed but not pretty printed.

deprecatedSince #

Arguments

:: CabalSpecVersion

version

-> String

deprecation message

-> g s a 
-> g s a 

Deprecated since

removedIn #

Arguments

:: CabalSpecVersion

version

-> String

removal message

-> g s a 
-> g s a 

Removed in. If we occur removed field, parsing fails.

availableSince #

Arguments

:: CabalSpecVersion

spec version

-> a

default value

-> g s a 
-> g s a 

Annotate field with since spec-version.

Instances
FieldGrammar PrettyFieldGrammar # 
Instance details

Defined in Distribution.FieldGrammar.Pretty

FieldGrammar ParsecFieldGrammar # 
Instance details

Defined in Distribution.FieldGrammar.Parsec

FieldGrammar FieldDescrs #

Note: default values are printed.

Instance details

Defined in Distribution.FieldGrammar.FieldDescrs

uniqueField #

Arguments

:: (FieldGrammar g, Parsec a, Pretty a) 
=> FieldName

field name

-> ALens' s a

lens into the field

-> g s a 

Field which can be defined at most once.

optionalField #

Arguments

:: (FieldGrammar g, Parsec a, Pretty a) 
=> FieldName

field name

-> ALens' s (Maybe a)

lens into the field

-> g s (Maybe a) 

Field which can be defined at most once.

optionalFieldDef #

Arguments

:: (FieldGrammar g, Functor (g s), Parsec a, Pretty a, Eq a) 
=> FieldName

field name

-> ALens' s a

Lens' s a: lens into the field

-> a

default value

-> g s a 

Optional field with default value.

monoidalField #

Arguments

:: (FieldGrammar g, Parsec a, Pretty a, Monoid a) 
=> FieldName

field name

-> ALens' s a

lens into the field

-> g s a 

Field which can be define multiple times, and the results are mappended.

Concrete grammar implementations

data ParsecFieldGrammar s a #

Instances
FieldGrammar ParsecFieldGrammar # 
Instance details

Defined in Distribution.FieldGrammar.Parsec

Functor (ParsecFieldGrammar s) # 
Instance details

Defined in Distribution.FieldGrammar.Parsec

Methods

fmap :: (a -> b) -> ParsecFieldGrammar s a -> ParsecFieldGrammar s b #

(<$) :: a -> ParsecFieldGrammar s b -> ParsecFieldGrammar s a #

Applicative (ParsecFieldGrammar s) # 
Instance details

Defined in Distribution.FieldGrammar.Parsec

data PrettyFieldGrammar s a #

Instances
FieldGrammar PrettyFieldGrammar # 
Instance details

Defined in Distribution.FieldGrammar.Pretty

Functor (PrettyFieldGrammar s) # 
Instance details

Defined in Distribution.FieldGrammar.Pretty

Methods

fmap :: (a -> b) -> PrettyFieldGrammar s a -> PrettyFieldGrammar s b #

(<$) :: a -> PrettyFieldGrammar s b -> PrettyFieldGrammar s a #

Applicative (PrettyFieldGrammar s) # 
Instance details

Defined in Distribution.FieldGrammar.Pretty

prettyFieldGrammar :: CabalSpecVersion -> PrettyFieldGrammar s a -> s -> [PrettyField ()] #

We can use PrettyFieldGrammar to pp print the s.

Note: there is not trailing ($+$ text "").

Auxlilary

(^^^) :: a -> (a -> b) -> b infixl 5 #

Reverse function application which binds tighter than <$> and <*>. Useful for refining grammar specification.

<*> monoidalFieldAla "extensions"           (alaList' FSep MQuoted)       oldExtensions
    ^^^ deprecatedSince [1,12] "Please use 'default-extensions' or 'other-extensions' fields."

data Section ann #

The Section constructor of Field.

Constructors

MkSection !(Name ann) [SectionArg ann] [Field ann] 
Instances
Functor Section # 
Instance details

Defined in Distribution.FieldGrammar.Parsec

Methods

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

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

Eq ann => Eq (Section ann) # 
Instance details

Defined in Distribution.FieldGrammar.Parsec

Methods

(==) :: Section ann -> Section ann -> Bool #

(/=) :: Section ann -> Section ann -> Bool #

Show ann => Show (Section ann) # 
Instance details

Defined in Distribution.FieldGrammar.Parsec

Methods

showsPrec :: Int -> Section ann -> ShowS #

show :: Section ann -> String #

showList :: [Section ann] -> ShowS #

partitionFields :: [Field ann] -> (Fields ann, [[Section ann]]) #

Partition field list into field map and groups of sections.

takeFields :: [Field ann] -> (Fields ann, [Field ann]) #

Take all fields from the front.

defaultFreeTextFieldDefST #

Arguments

:: (Functor (g s), FieldGrammar g) 
=> FieldName 
-> ALens' s ShortText

lens into the field

-> g s ShortText 

Default implementation for freeTextFieldDefST.