    {-# LANGUAGE DeriveLift #-}
    module Data.Aeson.JSONPath.Types.Selector
      (Selector (..))
      where

    import Data.Aeson.JSONPath.Types.Filter (LogicalOrExpr (..))
    import Data.Text                        (Text)
    import Language.Haskell.TH.Syntax       (Lift)

    import Prelude

    -- |
    data Selector a
      = Name Text
      | Index Int
      | ArraySlice (Maybe Int, Maybe Int, Int)
      | Filter (LogicalOrExpr a)
      | WildcardSelector
      deriving (Selector a -> Selector a -> Bool
    (Selector a -> Selector a -> Bool)
    -> (Selector a -> Selector a -> Bool) -> Eq (Selector a)
    forall a. Eq a => Selector a -> Selector a -> Bool
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: forall a. Eq a => Selector a -> Selector a -> Bool
    == :: Selector a -> Selector a -> Bool
    $c/= :: forall a. Eq a => Selector a -> Selector a -> Bool
    /= :: Selector a -> Selector a -> Bool
    Eq, Int -> Selector a -> ShowS
    [Selector a] -> ShowS
    Selector a -> String
    (Int -> Selector a -> ShowS)
    -> (Selector a -> String)
    -> ([Selector a] -> ShowS)
    -> Show (Selector a)
    forall a. Show a => Int -> Selector a -> ShowS
    forall a. Show a => [Selector a] -> ShowS
    forall a. Show a => Selector a -> String
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: forall a. Show a => Int -> Selector a -> ShowS
    showsPrec :: Int -> Selector a -> ShowS
    $cshow :: forall a. Show a => Selector a -> String
    show :: Selector a -> String
    $cshowList :: forall a. Show a => [Selector a] -> ShowS
    showList :: [Selector a] -> ShowS
    Show, (forall (m :: * -> *). Quote m => Selector a -> m Exp)
    -> (forall (m :: * -> *).
        Quote m =>
        Selector a -> Code m (Selector a))
    -> Lift (Selector a)
    forall a (m :: * -> *). (Lift a, Quote m) => Selector a -> m Exp
    forall a (m :: * -> *).
    (Lift a, Quote m) =>
    Selector a -> Code m (Selector a)
    forall t.
    (forall (m :: * -> *). Quote m => t -> m Exp)
    -> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
    forall (m :: * -> *). Quote m => Selector a -> m Exp
    forall (m :: * -> *). Quote m => Selector a -> Code m (Selector a)
    $clift :: forall a (m :: * -> *). (Lift a, Quote m) => Selector a -> m Exp
    lift :: forall (m :: * -> *). Quote m => Selector a -> m Exp
    $cliftTyped :: forall a (m :: * -> *).
    (Lift a, Quote m) =>
    Selector a -> Code m (Selector a)
    liftTyped :: forall (m :: * -> *). Quote m => Selector a -> Code m (Selector a)
    Lift)