{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UndecidableSuperClasses #-}
module HaskellCI.OptionsGrammar (
OptionsGrammar (..),
(C.^^^),
metaActionHelp,
ParsecPretty,
Help, MetaVar, BashCompletionAction
) where
import HaskellCI.Prelude
import qualified Distribution.Compat.Lens as C
import qualified Distribution.FieldGrammar as C
import qualified Distribution.Fields as C
import qualified Distribution.Parsec as C
import qualified Distribution.Pretty as C
import qualified Distribution.Types.PackageName as C
import qualified Distribution.Types.VersionRange as C
import qualified Options.Applicative as O
import HaskellCI.Newtypes
type Help = String
type MetaVar = String
type BashCompletionAction = String
class
( C.FieldGrammar c p
, c Range, c (Identity C.VersionRange)
, c (C.List C.NoCommaFSep C.Token' String)
, c (C.List C.FSep C.Token' String)
, c (AlaSet C.NoCommaFSep C.Token' String)
, c (AlaSet C.NoCommaFSep (Identity Version) Version)
, c (C.List C.CommaVCat NoCommas String)
, c (C.List C.NoCommaFSep (Identity C.PackageName) C.PackageName)
, c (C.List C.FSep (Identity C.PackageName) C.PackageName)
)
=> OptionsGrammar c p | p -> c
where
metaCompleterHelp :: MetaVar -> O.Completer -> Help -> p s a -> p s a
metaCompleterHelp MetaVar
_ Completer
_ MetaVar
_ = p s a -> p s a
forall a. a -> a
id
metahelp :: MetaVar -> Help -> p s a -> p s a
metahelp MetaVar
_ MetaVar
_ = p s a -> p s a
forall a. a -> a
id
help :: Help -> p s a -> p s a
help MetaVar
_ = p s a -> p s a
forall a. a -> a
id
rangeField :: C.FieldName -> C.ALens' s C.VersionRange -> C.VersionRange -> p s C.VersionRange
rangeField FieldName
fn = FieldName
-> (VersionRange -> Range)
-> ALens' s VersionRange
-> VersionRange
-> p s VersionRange
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
C.optionalFieldDefAla FieldName
fn VersionRange -> Range
Range
metaActionHelp :: OptionsGrammar c p => MetaVar -> BashCompletionAction -> Help -> p s a -> p s a
metaActionHelp :: MetaVar -> MetaVar -> MetaVar -> p s a -> p s a
metaActionHelp MetaVar
m MetaVar
a = MetaVar -> Completer -> MetaVar -> p s a -> p s a
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
MetaVar -> Completer -> MetaVar -> p s a -> p s a
metaCompleterHelp MetaVar
m (MetaVar -> Completer
O.bashCompleter MetaVar
a)
instance OptionsGrammar C.Parsec C.ParsecFieldGrammar
class (C.Parsec a, C.Pretty a) => ParsecPretty a
instance (C.Parsec a, C.Pretty a) => ParsecPretty a