content: {-# LANGUAGE ConstraintKinds #-}
  {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE DuplicateRecordFields #-}
  {-# LANGUAGE FlexibleContexts #-}
  {-# LANGUAGE KindSignatures #-}
  {-# LANGUAGE RankNTypes #-}
  {-# LANGUAGE ScopedTypeVariables #-}
  {-# LANGUAGE NoImplicitPrelude #-}
  
  module Data.Morpheus.Core
    ( Config (..),
      RenderGQL (..),
      SelectionTree (..),
      VALIDATION_MODE (..),
      ValidateSchema (..),
      debugConfig,
      defaultConfig,
      internalSchema,
      parseFullSchema,
      parseRequest,
      parseRequestWith,
      parseSchema,
      parseTypeDefinitions,
      render,
      validateRequest,
      parseDefinitions,
    )
  where
  
  import Data.ByteString.Lazy.Char8
    ( ByteString,
    )
  import Data.Morpheus.Ext.Result
    ( GQLResult,
    )
  import Data.Morpheus.Internal.Utils
    ( (<:>),
    )
  import Data.Morpheus.Parser
    ( parseDefinitions,
      parseRequest,
      parseRequestWith,
      parseSchema,
      parseTypeDefinitions,
    )
  import Data.Morpheus.Rendering.RenderGQL
    ( RenderGQL (..),
      render,
    )
  import Data.Morpheus.Schema.Schema
    ( internalSchema,
    )
  import Data.Morpheus.Types.Internal.AST
    ( Schema,
      VALID,
    )
  import Data.Morpheus.Types.Internal.Config
    ( Config (..),
      VALIDATION_MODE (..),
      debugConfig,
      defaultConfig,
    )
  import Data.Morpheus.Types.SelectionTree
    ( SelectionTree (..),
    )
  import Data.Morpheus.Validation.Document.Validation
    ( ValidateSchema (..),
    )
  import Data.Morpheus.Validation.Query.Validation
    ( validateRequest,
    )
  import Relude hiding (ByteString)
  
  parseFullSchema :: ByteString -> GQLResult (Schema VALID)
  parseFullSchema = parseSchema >=> (internalSchema <:>)
  