content: {-# LANGUAGE FlexibleContexts #-}
  {-# LANGUAGE FlexibleInstances #-}
  {-# LANGUAGE MultiParamTypeClasses #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE QuasiQuotes #-}
  {-# LANGUAGE RecordWildCards #-}
  {-# LANGUAGE ScopedTypeVariables #-}
  {-# LANGUAGE TemplateHaskellQuotes #-}
  {-# LANGUAGE TypeFamilies #-}
  {-# LANGUAGE TypeOperators #-}
  {-# LANGUAGE NoImplicitPrelude #-}
  
  module Data.Morpheus.Schema.Schema
    ( internalSchema,
    )
  where
  
  import Data.Morpheus.Schema.DSL (dsl)
  import Data.Morpheus.Types.Internal.AST
    ( Schema,
    )
  
  internalSchema :: Schema s
  internalSchema =
    [dsl|
  
  """
  Directs the executor to skip this field or fragment when the `if` argument is true.
  """
  directive @skip(if: Boolean!)
    on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
  
  """
  Directs the executor to include this field or fragment only when the `if` argument is true.
  """
  directive @include(if: Boolean!)
    on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
  
  """
  Marks an element of a GraphQL schema as no longer supported.
  """
  directive @deprecated(reason: String)
    on FIELD_DEFINITION | ENUM_VALUE
  
  
  scalar Boolean
  scalar Int
  scalar Float
  scalar String
  scalar ID
  
  type __Schema {
    types: [__Type!]!
    queryType: __Type!
    mutationType: __Type
    subscriptionType: __Type
    directives: [__Directive!]!
  }
  
  type __Type {
    kind: __TypeKind!
    name: String
    description: String
  
    # OBJECT and INTERFACE only
    fields(includeDeprecated: Boolean = false): [__Field!]
  
    # OBJECT only
    interfaces: [__Type!]
  
    # INTERFACE and UNION only
    possibleTypes: [__Type!]
  
    # ENUM only
    enumValues(includeDeprecated: Boolean = false): [__EnumValue!]
  
    # INPUT_OBJECT only
    inputFields: [__InputValue!]
  
    # NON_NULL and LIST only
    ofType: __Type
  }
  
  type __Field {
    name: String!
    description: String
    args: [__InputValue!]!
    type: __Type!
    isDeprecated: Boolean!
    deprecationReason: String
  }
  
  type __InputValue {
    name: String!
    description: String
    type: __Type!
    defaultValue: String
  }
  
  type __EnumValue {
    name: String!
    description: String
    isDeprecated: Boolean!
    deprecationReason: String
  }
  
  type __Directive {
    name: String!
    description: String
    locations: [__DirectiveLocation!]!
    args: [__InputValue!]!
  }
  
  enum __DirectiveLocation {
    QUERY
    MUTATION
    SUBSCRIPTION
    FIELD
    FRAGMENT_DEFINITION
    FRAGMENT_SPREAD
    INLINE_FRAGMENT
    SCHEMA
    SCALAR
    OBJECT
    FIELD_DEFINITION
    ARGUMENT_DEFINITION
    INTERFACE
    UNION
    ENUM
    ENUM_VALUE
    INPUT_OBJECT
    INPUT_FIELD_DEFINITION
  }
  
  enum __TypeKind {
    SCALAR
    OBJECT
    INTERFACE
    UNION
    ENUM
    INPUT_OBJECT
    LIST
    NON_NULL
  }
  
  type Query {
    __type(name: String!): __Type
    __schema: __Schema!
  }
  
  |]
  