{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Data.Morpheus.Server.Types.Types
  ( Undefined (..),
    Pair (..),
    TypeGuard (..),
    Arg (..),
    __typenameUndefined,
  )
where

import Data.Kind (Type)
import Data.Morpheus.Types.Internal.AST (TypeName)
import GHC.Generics
  ( Generic,
  )
import GHC.TypeLits (Symbol)
import Prelude (Bool, Show)

__typenameUndefined :: TypeName
__typenameUndefined :: TypeName
__typenameUndefined = TypeName
"Undefined"

newtype Undefined (m :: Type -> Type) = Undefined Bool deriving (Int -> Undefined m -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall (m :: * -> *). Int -> Undefined m -> ShowS
forall (m :: * -> *). [Undefined m] -> ShowS
forall (m :: * -> *). Undefined m -> String
showList :: [Undefined m] -> ShowS
$cshowList :: forall (m :: * -> *). [Undefined m] -> ShowS
show :: Undefined m -> String
$cshow :: forall (m :: * -> *). Undefined m -> String
showsPrec :: Int -> Undefined m -> ShowS
$cshowsPrec :: forall (m :: * -> *). Int -> Undefined m -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (m :: * -> *) x. Rep (Undefined m) x -> Undefined m
forall (m :: * -> *) x. Undefined m -> Rep (Undefined m) x
$cto :: forall (m :: * -> *) x. Rep (Undefined m) x -> Undefined m
$cfrom :: forall (m :: * -> *) x. Undefined m -> Rep (Undefined m) x
Generic)

data Pair k v = Pair k v deriving (forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall k v x. Rep (Pair k v) x -> Pair k v
forall k v x. Pair k v -> Rep (Pair k v) x
$cto :: forall k v x. Rep (Pair k v) x -> Pair k v
$cfrom :: forall k v x. Pair k v -> Rep (Pair k v) x
Generic)

data TypeGuard interface union
  = ResolveInterface interface
  | ResolveType union

newtype Arg (name :: Symbol) a = Arg {forall (name :: Symbol) a. Arg name a -> a
argValue :: a}
  deriving
    ( Int -> Arg name a -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall (name :: Symbol) a. Show a => Int -> Arg name a -> ShowS
forall (name :: Symbol) a. Show a => [Arg name a] -> ShowS
forall (name :: Symbol) a. Show a => Arg name a -> String
showList :: [Arg name a] -> ShowS
$cshowList :: forall (name :: Symbol) a. Show a => [Arg name a] -> ShowS
show :: Arg name a -> String
$cshow :: forall (name :: Symbol) a. Show a => Arg name a -> String
showsPrec :: Int -> Arg name a -> ShowS
$cshowsPrec :: forall (name :: Symbol) a. Show a => Int -> Arg name a -> ShowS
Show,
      forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (name :: Symbol) a x. Rep (Arg name a) x -> Arg name a
forall (name :: Symbol) a x. Arg name a -> Rep (Arg name a) x
$cto :: forall (name :: Symbol) a x. Rep (Arg name a) x -> Arg name a
$cfrom :: forall (name :: Symbol) a x. Arg name a -> Rep (Arg name a) x
Generic
    )