module PostgresqlSyntax.Ast.IndexElem where

import qualified HeadedMegaparsec as Parser
import PostgresqlSyntax.Algebra
import PostgresqlSyntax.Ast.AnyName
import PostgresqlSyntax.Ast.AscDesc
import PostgresqlSyntax.Ast.IndexElemDef
import PostgresqlSyntax.Ast.NullsOrder
import qualified PostgresqlSyntax.Helpers.Gens as Gens
import qualified PostgresqlSyntax.Helpers.Parsers as Parsers
import qualified PostgresqlSyntax.Helpers.TextBuilders as TextBuilders
import PostgresqlSyntax.Prelude
import qualified Test.QuickCheck as Qc

-- |
-- ==== References
-- @
-- index_elem:
--   | ColId opt_collate opt_class opt_asc_desc opt_nulls_order
--   | func_expr_windowless opt_collate opt_class opt_asc_desc opt_nulls_order
--   | '(' a_expr ')' opt_collate opt_class opt_asc_desc opt_nulls_order
-- @
--
-- @opt_collate@\/@opt_class@ are bare aliases to
-- 'PostgresqlSyntax.Ast.AnyName'.
data IndexElem = IndexElem IndexElemDef (Maybe AnyName) (Maybe AnyName) (Maybe AscDesc) (Maybe NullsOrder)
  deriving (Int -> IndexElem -> ShowS
[IndexElem] -> ShowS
IndexElem -> String
(Int -> IndexElem -> ShowS)
-> (IndexElem -> String)
-> ([IndexElem] -> ShowS)
-> Show IndexElem
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> IndexElem -> ShowS
showsPrec :: Int -> IndexElem -> ShowS
$cshow :: IndexElem -> String
show :: IndexElem -> String
$cshowList :: [IndexElem] -> ShowS
showList :: [IndexElem] -> ShowS
Show, (forall x. IndexElem -> Rep IndexElem x)
-> (forall x. Rep IndexElem x -> IndexElem) -> Generic IndexElem
forall x. Rep IndexElem x -> IndexElem
forall x. IndexElem -> Rep IndexElem x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. IndexElem -> Rep IndexElem x
from :: forall x. IndexElem -> Rep IndexElem x
$cto :: forall x. Rep IndexElem x -> IndexElem
to :: forall x. Rep IndexElem x -> IndexElem
Generic, IndexElem -> IndexElem -> Bool
(IndexElem -> IndexElem -> Bool)
-> (IndexElem -> IndexElem -> Bool) -> Eq IndexElem
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: IndexElem -> IndexElem -> Bool
== :: IndexElem -> IndexElem -> Bool
$c/= :: IndexElem -> IndexElem -> Bool
/= :: IndexElem -> IndexElem -> Bool
Eq, Eq IndexElem
Eq IndexElem =>
(IndexElem -> IndexElem -> Ordering)
-> (IndexElem -> IndexElem -> Bool)
-> (IndexElem -> IndexElem -> Bool)
-> (IndexElem -> IndexElem -> Bool)
-> (IndexElem -> IndexElem -> Bool)
-> (IndexElem -> IndexElem -> IndexElem)
-> (IndexElem -> IndexElem -> IndexElem)
-> Ord IndexElem
IndexElem -> IndexElem -> Bool
IndexElem -> IndexElem -> Ordering
IndexElem -> IndexElem -> IndexElem
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: IndexElem -> IndexElem -> Ordering
compare :: IndexElem -> IndexElem -> Ordering
$c< :: IndexElem -> IndexElem -> Bool
< :: IndexElem -> IndexElem -> Bool
$c<= :: IndexElem -> IndexElem -> Bool
<= :: IndexElem -> IndexElem -> Bool
$c> :: IndexElem -> IndexElem -> Bool
> :: IndexElem -> IndexElem -> Bool
$c>= :: IndexElem -> IndexElem -> Bool
>= :: IndexElem -> IndexElem -> Bool
$cmax :: IndexElem -> IndexElem -> IndexElem
max :: IndexElem -> IndexElem -> IndexElem
$cmin :: IndexElem -> IndexElem -> IndexElem
min :: IndexElem -> IndexElem -> IndexElem
Ord, Typeable IndexElem
Typeable IndexElem =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> IndexElem -> c IndexElem)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c IndexElem)
-> (IndexElem -> Constr)
-> (IndexElem -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c IndexElem))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c IndexElem))
-> ((forall b. Data b => b -> b) -> IndexElem -> IndexElem)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> IndexElem -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> IndexElem -> r)
-> (forall u. (forall d. Data d => d -> u) -> IndexElem -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> IndexElem -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> IndexElem -> m IndexElem)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> IndexElem -> m IndexElem)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> IndexElem -> m IndexElem)
-> Data IndexElem
IndexElem -> Constr
IndexElem -> DataType
(forall b. Data b => b -> b) -> IndexElem -> IndexElem
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> IndexElem -> u
forall u. (forall d. Data d => d -> u) -> IndexElem -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IndexElem -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IndexElem -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> IndexElem -> m IndexElem
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IndexElem -> m IndexElem
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c IndexElem
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IndexElem -> c IndexElem
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c IndexElem)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c IndexElem)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IndexElem -> c IndexElem
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IndexElem -> c IndexElem
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c IndexElem
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c IndexElem
$ctoConstr :: IndexElem -> Constr
toConstr :: IndexElem -> Constr
$cdataTypeOf :: IndexElem -> DataType
dataTypeOf :: IndexElem -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c IndexElem)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c IndexElem)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c IndexElem)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c IndexElem)
$cgmapT :: (forall b. Data b => b -> b) -> IndexElem -> IndexElem
gmapT :: (forall b. Data b => b -> b) -> IndexElem -> IndexElem
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IndexElem -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IndexElem -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IndexElem -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IndexElem -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> IndexElem -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> IndexElem -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> IndexElem -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> IndexElem -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> IndexElem -> m IndexElem
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> IndexElem -> m IndexElem
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IndexElem -> m IndexElem
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IndexElem -> m IndexElem
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IndexElem -> m IndexElem
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IndexElem -> m IndexElem
Data)

instance IsAst IndexElem where
  toTextBuilder :: Settings -> IndexElem -> TextBuilder
toTextBuilder Settings
settings (IndexElem IndexElemDef
a Maybe AnyName
b Maybe AnyName
c Maybe AscDesc
d Maybe NullsOrder
e) =
    Settings -> IndexElemDef -> TextBuilder
forall a. IsAst a => Settings -> a -> TextBuilder
toTextBuilder Settings
settings IndexElemDef
a
      TextBuilder -> TextBuilder -> TextBuilder
forall a. Semigroup a => a -> a -> a
<> (AnyName -> TextBuilder) -> Maybe AnyName -> TextBuilder
forall a. (a -> TextBuilder) -> Maybe a -> TextBuilder
TextBuilders.suffixMaybe AnyName -> TextBuilder
collate Maybe AnyName
b
      TextBuilder -> TextBuilder -> TextBuilder
forall a. Semigroup a => a -> a -> a
<> (AnyName -> TextBuilder) -> Maybe AnyName -> TextBuilder
forall a. (a -> TextBuilder) -> Maybe a -> TextBuilder
TextBuilders.suffixMaybe (Settings -> AnyName -> TextBuilder
forall a. IsAst a => Settings -> a -> TextBuilder
toTextBuilder Settings
settings) Maybe AnyName
c
      TextBuilder -> TextBuilder -> TextBuilder
forall a. Semigroup a => a -> a -> a
<> (AscDesc -> TextBuilder) -> Maybe AscDesc -> TextBuilder
forall a. (a -> TextBuilder) -> Maybe a -> TextBuilder
TextBuilders.suffixMaybe (Settings -> AscDesc -> TextBuilder
forall a. IsAst a => Settings -> a -> TextBuilder
toTextBuilder Settings
settings) Maybe AscDesc
d
      TextBuilder -> TextBuilder -> TextBuilder
forall a. Semigroup a => a -> a -> a
<> (NullsOrder -> TextBuilder) -> Maybe NullsOrder -> TextBuilder
forall a. (a -> TextBuilder) -> Maybe a -> TextBuilder
TextBuilders.suffixMaybe (Settings -> NullsOrder -> TextBuilder
forall a. IsAst a => Settings -> a -> TextBuilder
toTextBuilder Settings
settings) Maybe NullsOrder
e
    where
      collate :: AnyName -> TextBuilder
collate = TextBuilder -> TextBuilder -> TextBuilder
forall a. Monoid a => a -> a -> a
mappend TextBuilder
"COLLATE " (TextBuilder -> TextBuilder)
-> (AnyName -> TextBuilder) -> AnyName -> TextBuilder
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Settings -> AnyName -> TextBuilder
forall a. IsAst a => Settings -> a -> TextBuilder
toTextBuilder Settings
settings
  parser :: Settings -> Parser IndexElem
parser Settings
settings =
    IndexElemDef
-> Maybe AnyName
-> Maybe AnyName
-> Maybe AscDesc
-> Maybe NullsOrder
-> IndexElem
IndexElem
      (IndexElemDef
 -> Maybe AnyName
 -> Maybe AnyName
 -> Maybe AscDesc
 -> Maybe NullsOrder
 -> IndexElem)
-> HeadedParsec Void Text IndexElemDef
-> HeadedParsec
     Void
     Text
     (Maybe AnyName
      -> Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Settings -> HeadedParsec Void Text IndexElemDef
forall a. IsAst a => Settings -> Parser a
parser Settings
settings HeadedParsec Void Text IndexElemDef
-> HeadedParsec Void Text () -> HeadedParsec Void Text IndexElemDef
forall a b.
HeadedParsec Void Text a
-> HeadedParsec Void Text b -> HeadedParsec Void Text a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* HeadedParsec Void Text ()
forall strm err. Stream strm => HeadedParsec err strm ()
Parser.endHead)
      HeadedParsec
  Void
  Text
  (Maybe AnyName
   -> Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
-> HeadedParsec Void Text (Maybe AnyName)
-> HeadedParsec
     Void
     Text
     (Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
forall a b.
HeadedParsec Void Text (a -> b)
-> HeadedParsec Void Text a -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text AnyName
-> HeadedParsec Void Text (Maybe AnyName)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
Parsers.space1 HeadedParsec Void Text ()
-> HeadedParsec Void Text AnyName -> HeadedParsec Void Text AnyName
forall a b.
HeadedParsec Void Text a
-> HeadedParsec Void Text b -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyName
collate)
      HeadedParsec
  Void
  Text
  (Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
-> HeadedParsec Void Text (Maybe AnyName)
-> HeadedParsec
     Void Text (Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
forall a b.
HeadedParsec Void Text (a -> b)
-> HeadedParsec Void Text a -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text AnyName
-> HeadedParsec Void Text (Maybe AnyName)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
Parsers.space1 HeadedParsec Void Text ()
-> HeadedParsec Void Text AnyName -> HeadedParsec Void Text AnyName
forall a b.
HeadedParsec Void Text a
-> HeadedParsec Void Text b -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyName
class_)
      HeadedParsec
  Void Text (Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
-> HeadedParsec Void Text (Maybe AscDesc)
-> HeadedParsec Void Text (Maybe NullsOrder -> IndexElem)
forall a b.
HeadedParsec Void Text (a -> b)
-> HeadedParsec Void Text a -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text AscDesc
-> HeadedParsec Void Text (Maybe AscDesc)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
Parsers.space1 HeadedParsec Void Text ()
-> HeadedParsec Void Text AscDesc -> HeadedParsec Void Text AscDesc
forall a b.
HeadedParsec Void Text a
-> HeadedParsec Void Text b -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Settings -> HeadedParsec Void Text AscDesc
forall a. IsAst a => Settings -> Parser a
parser Settings
settings)
      HeadedParsec Void Text (Maybe NullsOrder -> IndexElem)
-> HeadedParsec Void Text (Maybe NullsOrder) -> Parser IndexElem
forall a b.
HeadedParsec Void Text (a -> b)
-> HeadedParsec Void Text a -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text NullsOrder
-> HeadedParsec Void Text (Maybe NullsOrder)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
Parsers.space1 HeadedParsec Void Text ()
-> HeadedParsec Void Text NullsOrder
-> HeadedParsec Void Text NullsOrder
forall a b.
HeadedParsec Void Text a
-> HeadedParsec Void Text b -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Settings -> HeadedParsec Void Text NullsOrder
forall a. IsAst a => Settings -> Parser a
parser Settings
settings)
    where
      collate :: HeadedParsec Void Text AnyName
collate = Text -> HeadedParsec Void Text Text
forall {s} {e}.
(Tokens s ~ Text, Token s ~ Char, Ord e, Stream s) =>
Text -> HeadedParsec e s Text
Parsers.keyword Text
"collate" HeadedParsec Void Text Text
-> HeadedParsec Void Text () -> HeadedParsec Void Text ()
forall a b.
HeadedParsec Void Text a
-> HeadedParsec Void Text b -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
Parsers.space1 HeadedParsec Void Text ()
-> HeadedParsec Void Text () -> HeadedParsec Void Text ()
forall a b.
HeadedParsec Void Text a
-> HeadedParsec Void Text b -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text ()
forall strm err. Stream strm => HeadedParsec err strm ()
Parser.endHead HeadedParsec Void Text ()
-> HeadedParsec Void Text AnyName -> HeadedParsec Void Text AnyName
forall a b.
HeadedParsec Void Text a
-> HeadedParsec Void Text b -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Settings -> HeadedParsec Void Text AnyName
forall a. IsAst a => Settings -> Parser a
parser Settings
settings

      class_ :: HeadedParsec Void Text AnyName
class_ = Settings -> HeadedParsec Void Text AnyName
forall a. IsAst a => Settings -> Parser a
parser Settings
settings

instance Qc.Arbitrary IndexElem where
  shrink :: IndexElem -> [IndexElem]
shrink = IndexElem -> [IndexElem]
forall a.
(Generic a, RecursivelyShrink (Rep a), GSubterms (Rep a) a) =>
a -> [a]
Qc.genericShrink
  arbitrary :: Gen IndexElem
arbitrary =
    IndexElemDef
-> Maybe AnyName
-> Maybe AnyName
-> Maybe AscDesc
-> Maybe NullsOrder
-> IndexElem
IndexElem
      (IndexElemDef
 -> Maybe AnyName
 -> Maybe AnyName
 -> Maybe AscDesc
 -> Maybe NullsOrder
 -> IndexElem)
-> Gen IndexElemDef
-> Gen
     (Maybe AnyName
      -> Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen IndexElemDef
forall a. Arbitrary a => Gen a
Qc.arbitrary
      Gen
  (Maybe AnyName
   -> Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
-> Gen (Maybe AnyName)
-> Gen
     (Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen AnyName -> Gen (Maybe AnyName)
forall a. Gen a -> Gen (Maybe a)
Gens.terminatingMaybe Gen AnyName
forall a. Arbitrary a => Gen a
Qc.arbitrary
      Gen
  (Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
-> Gen (Maybe AnyName)
-> Gen (Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen AnyName -> Gen (Maybe AnyName)
forall a. Gen a -> Gen (Maybe a)
Gens.terminatingMaybe Gen AnyName
forall a. Arbitrary a => Gen a
Qc.arbitrary
      Gen (Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
-> Gen (Maybe AscDesc) -> Gen (Maybe NullsOrder -> IndexElem)
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Maybe AscDesc)
forall a. Arbitrary a => Gen a
Qc.arbitrary
      Gen (Maybe NullsOrder -> IndexElem)
-> Gen (Maybe NullsOrder) -> Gen IndexElem
forall a b. Gen (a -> b) -> Gen a -> Gen b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (Maybe NullsOrder)
forall a. Arbitrary a => Gen a
Qc.arbitrary