module Distribution.FieldGrammar.Class (
FieldGrammar (..),
uniqueField,
optionalField,
optionalFieldDef,
monoidalField,
defaultFreeTextFieldDefST,
) where
import Distribution.Compat.Lens
import Distribution.Compat.Prelude
import Prelude ()
import Distribution.CabalSpecVersion (CabalSpecVersion)
import Distribution.Compat.Newtype (Newtype)
import Distribution.Fields.Field
import Distribution.Parsec (Parsec)
import Distribution.Pretty (Pretty)
import Distribution.Utils.ShortText
class FieldGrammar g where
blurFieldGrammar :: ALens' a b -> g b c -> g a c
uniqueFieldAla
:: (Parsec b, Pretty b, Newtype a b)
=> FieldName
-> (a -> b)
-> ALens' s a
-> g s a
booleanFieldDef
:: FieldName
-> ALens' s Bool
-> Bool
-> g s Bool
optionalFieldAla
:: (Parsec b, Pretty b, Newtype a b)
=> FieldName
-> (a -> b)
-> ALens' s (Maybe a)
-> g s (Maybe a)
optionalFieldDefAla
:: (Parsec b, Pretty b, Newtype a b, Eq a)
=> FieldName
-> (a -> b)
-> ALens' s a
-> a
-> g s a
freeTextField
:: FieldName
-> ALens' s (Maybe String)
-> g s (Maybe String)
freeTextFieldDef
:: FieldName
-> ALens' s String
-> g s String
freeTextFieldDefST
:: FieldName
-> ALens' s ShortText
-> g s ShortText
monoidalFieldAla
:: (Parsec b, Pretty b, Monoid a, Newtype a b)
=> FieldName
-> (a -> b)
-> ALens' s a
-> g s a
prefixedFields
:: FieldName
-> ALens' s [(String, String)]
-> g s [(String, String)]
knownField :: FieldName -> g s ()
hiddenField :: g s a -> g s a
deprecatedSince
:: CabalSpecVersion
-> String
-> g s a
-> g s a
removedIn
:: CabalSpecVersion
-> String
-> g s a
-> g s a
availableSince
:: CabalSpecVersion
-> a
-> g s a
-> g s a
uniqueField
:: (FieldGrammar g, Parsec a, Pretty a)
=> FieldName
-> ALens' s a
-> g s a
uniqueField fn = uniqueFieldAla fn Identity
optionalField
:: (FieldGrammar g, Parsec a, Pretty a)
=> FieldName
-> ALens' s (Maybe a)
-> g s (Maybe a)
optionalField fn = optionalFieldAla fn Identity
optionalFieldDef
:: (FieldGrammar g, Functor (g s), Parsec a, Pretty a, Eq a)
=> FieldName
-> ALens' s a
-> a
-> g s a
optionalFieldDef fn = optionalFieldDefAla fn Identity
monoidalField
:: (FieldGrammar g, Parsec a, Pretty a, Monoid a)
=> FieldName
-> ALens' s a
-> g s a
monoidalField fn = monoidalFieldAla fn Identity
defaultFreeTextFieldDefST
:: (Functor (g s), FieldGrammar g)
=> FieldName
-> ALens' s ShortText
-> g s ShortText
defaultFreeTextFieldDefST fn l =
toShortText <$> freeTextFieldDef fn (cloneLens l . st)
where
st :: Lens' ShortText String
st f s = toShortText <$> f (fromShortText s)