diff --git a/morpheus-graphql.cabal b/morpheus-graphql.cabal
--- a/morpheus-graphql.cabal
+++ b/morpheus-graphql.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           morpheus-graphql
-version:        0.21.0
+version:        0.22.0
 synopsis:       Morpheus GraphQL
 description:    Build GraphQL APIs with your favourite functional language!
 category:       web, graphql
@@ -21,12 +21,6 @@
     README.md
     changelog.md
 data-files:
-    test/Feature/Collision/category-collision-fail/query.gql
-    test/Feature/Collision/category-collision-success/query.gql
-    test/Feature/Collision/name-collision/query.gql
-    test/Feature/Directive/definition/introspect-directive/query.gql
-    test/Feature/Directive/definition/introspect-enum/query.gql
-    test/Feature/Directive/definition/introspect-type/query.gql
     test/Feature/Holistic/holistic/arguments/nameConflict/query.gql
     test/Feature/Holistic/holistic/arguments/undefinedArgument/query.gql
     test/Feature/Holistic/holistic/arguments/unknownArguments/query.gql
@@ -115,111 +109,12 @@
     test/Feature/Holistic/holistic/selection/unknownField/query.gql
     test/Feature/Holistic/schema-ext.gql
     test/Feature/Holistic/schema.gql
-    test/Feature/Inference/object-and-enum/introspection/query.gql
-    test/Feature/Inference/object-and-enum/resolving/query.gql
-    test/Feature/Inference/tagged-arguments-fail/introspection/query.gql
-    test/Feature/Inference/tagged-arguments-fail/resolving/query.gql
-    test/Feature/Inference/tagged-arguments/introspection/query.gql
-    test/Feature/Inference/tagged-arguments/resolving/query.gql
-    test/Feature/Inference/type-guards/introspection/interface/query.gql
-    test/Feature/Inference/type-guards/introspection/objects/query.gql
-    test/Feature/Inference/type-guards/resolving/fail/query.gql
-    test/Feature/Inference/type-guards/resolving/success/interface-fields/query.gql
-    test/Feature/Inference/type-guards/resolving/success/type-casting/query.gql
-    test/Feature/Inference/type-inference/introspection/enum/query.gql
-    test/Feature/Inference/type-inference/introspection/input-union/empty/query.gql
-    test/Feature/Inference/type-inference/introspection/input-union/input-union/query.gql
-    test/Feature/Inference/type-inference/introspection/inputObject/query.gql
-    test/Feature/Inference/type-inference/introspection/object/query.gql
-    test/Feature/Inference/type-inference/introspection/union/named-products/query.gql
-    test/Feature/Inference/type-inference/introspection/union/nullary-constructors/query.gql
-    test/Feature/Inference/type-inference/introspection/union/positional-products/query.gql
-    test/Feature/Inference/type-inference/introspection/union/scalars/query.gql
-    test/Feature/Inference/type-inference/introspection/union/union/query.gql
-    test/Feature/Inference/type-inference/resolving/complexUnion/query.gql
-    test/Feature/Inference/type-inference/resolving/input/fail/query.gql
-    test/Feature/Inference/type-inference/resolving/input/success/query.gql
-    test/Feature/Inference/type-inference/resolving/object/query.gql
-    test/Feature/Inference/union-type/cannotBeSpreadOnType/query.gql
-    test/Feature/Inference/union-type/fragmentOnAAndB/query.gql
-    test/Feature/Inference/union-type/fragmentOnlyOnA/query.gql
-    test/Feature/Inference/union-type/inlineFragment/cannotBeSpreadOnType/query.gql
-    test/Feature/Inference/union-type/inlineFragment/fragmentOnAAndB/query.gql
-    test/Feature/Inference/union-type/selectionWithoutFragmentNotAllowed/query.gql
-    test/Feature/Inference/wrapped-type/ignoreMutationResolver/query.gql
-    test/Feature/Inference/wrapped-type/ignoreQueryResolver/query.gql
-    test/Feature/Inference/wrapped-type/ignoreSubscriptionResolver/query.gql
-    test/Feature/Inference/wrapped-type/validWrappedTypes/query.gql
-    test/Feature/Input/collections/assoc/invalid/query.gql
-    test/Feature/Input/collections/assoc/ok/query.gql
-    test/Feature/Input/collections/map/invalid/query.gql
-    test/Feature/Input/collections/map/ok/query.gql
-    test/Feature/Input/collections/nonempty/invalid/query.gql
-    test/Feature/Input/collections/nonempty/ok/query.gql
-    test/Feature/Input/collections/product/invalid/query.gql
-    test/Feature/Input/collections/product/ok/query.gql
-    test/Feature/Input/collections/seq/query.gql
-    test/Feature/Input/collections/set/invalid/query.gql
-    test/Feature/Input/collections/set/ok/query.gql
-    test/Feature/Input/collections/tuple/invalid/query.gql
-    test/Feature/Input/collections/tuple/ok/query.gql
-    test/Feature/Input/collections/vector/query.gql
     test/Feature/Input/default-values-schema.gql
     test/Feature/Input/default-values/intorspection/arguments/query.gql
     test/Feature/Input/default-values/intorspection/input-compound/query.gql
     test/Feature/Input/default-values/intorspection/input-simple/query.gql
     test/Feature/Input/default-values/resolving/compound/query.gql
     test/Feature/Input/default-values/resolving/simple/query.gql
-    test/Feature/Input/enums/decode2Con/query.gql
-    test/Feature/Input/enums/decode3Con/query.gql
-    test/Feature/Input/enums/decodeInvalidValue/query.gql
-    test/Feature/Input/enums/decodeMany/con0/query.gql
-    test/Feature/Input/enums/decodeMany/con1/query.gql
-    test/Feature/Input/enums/decodeMany/con2/query.gql
-    test/Feature/Input/enums/decodeMany/con3/query.gql
-    test/Feature/Input/enums/decodeMany/con4/query.gql
-    test/Feature/Input/enums/decodeMany/con5/query.gql
-    test/Feature/Input/enums/decodeMany/con6/query.gql
-    test/Feature/Input/enums/invalidEnumFromJSONVariable/query.gql
-    test/Feature/Input/enums/invalidStringDefaultValue/query.gql
-    test/Feature/Input/enums/invalidStringInput/query.gql
-    test/Feature/Input/enums/validEnumFromJSONVariable/query.gql
-    test/Feature/Input/objects/nullableUndefinedField/query.gql
-    test/Feature/Input/objects/resolveObject/query.gql
-    test/Feature/Input/objects/resolveVariable/query.gql
-    test/Feature/Input/objects/undefinedField/query.gql
-    test/Feature/Input/objects/unexpectedValue/query.gql
-    test/Feature/Input/objects/unexpectedVariable/query.gql
-    test/Feature/Input/objects/unknownField/query.gql
-    test/Feature/Input/scalars/numbers/decodeFloat/query.gql
-    test/Feature/Input/scalars/numbers/decodeInt/query.gql
-    test/Feature/Input/scalars/strings/block/query.gql
-    test/Feature/Input/scalars/strings/escaped/query.gql
-    test/Feature/Input/scalars/strings/regular/query.gql
-    test/Feature/Input/scalars/strings/wrong-escaped/query.gql
-    test/Feature/Input/scalars/strings/wrong-newline/query.gql
-    test/Feature/Input/variables/incompatibleType/equalType/query.gql
-    test/Feature/Input/variables/incompatibleType/stricterType/query.gql
-    test/Feature/Input/variables/incompatibleType/weakerType1/query.gql
-    test/Feature/Input/variables/incompatibleType/weakerType2/query.gql
-    test/Feature/Input/variables/incompatibleType/weakerType3/query.gql
-    test/Feature/Input/variables/invalidValue/invalidDefaultValue/query.gql
-    test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/query.gql
-    test/Feature/Input/variables/invalidValue/invalidListVariable/query.gql
-    test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/query.gql
-    test/Feature/Input/variables/nameCollision/query.gql
-    test/Feature/Input/variables/nestedListNullableListReceivedNull/query.gql
-    test/Feature/Input/variables/nonInputTypeViolation/query.gql
-    test/Feature/Input/variables/undefinedVariable/query.gql
-    test/Feature/Input/variables/unknownType/query.gql
-    test/Feature/Input/variables/unusedVariable/unusedVariables/query.gql
-    test/Feature/Input/variables/unusedVariable/variableUsedInAlias/query.gql
-    test/Feature/Input/variables/unusedVariable/variableUsedInFragment/query.gql
-    test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/query.gql
-    test/Feature/Input/variables/validListVariable/query.gql
-    test/Feature/Input/variables/valueNotProvided/nonNullVariable/query.gql
-    test/Feature/Input/variables/valueNotProvided/nonNullVariableWithDefaultValue/query.gql
-    test/Feature/Input/variables/valueNotProvided/nullableVariable/query.gql
     test/Feature/NamedResolvers/deities.gql
     test/Feature/NamedResolvers/realms.gql
     test/Feature/NamedResolvers/tests/deities-ext/query.gql
@@ -236,12 +131,6 @@
     test/Feature/NamedResolvers/tests/realms/query.gql
     test/Rendering/schema.gql
     test/Subscription/schema.gql
-    test/Feature/Collision/category-collision-fail/response.json
-    test/Feature/Collision/category-collision-success/response.json
-    test/Feature/Collision/name-collision/response.json
-    test/Feature/Directive/definition/introspect-directive/response.json
-    test/Feature/Directive/definition/introspect-enum/response.json
-    test/Feature/Directive/definition/introspect-type/response.json
     test/Feature/Holistic/holistic/arguments/nameConflict/response.json
     test/Feature/Holistic/holistic/arguments/undefinedArgument/response.json
     test/Feature/Holistic/holistic/arguments/unknownArguments/response.json
@@ -330,127 +219,11 @@
     test/Feature/Holistic/holistic/selection/subscription/singleTopLevelField/fail/response.json
     test/Feature/Holistic/holistic/selection/subscription/singleTopLevelField/failAnonymous/response.json
     test/Feature/Holistic/holistic/selection/unknownField/response.json
-    test/Feature/Inference/object-and-enum/introspection/response.json
-    test/Feature/Inference/object-and-enum/resolving/response.json
-    test/Feature/Inference/tagged-arguments-fail/introspection/response.json
-    test/Feature/Inference/tagged-arguments-fail/resolving/response.json
-    test/Feature/Inference/tagged-arguments/introspection/response.json
-    test/Feature/Inference/tagged-arguments/resolving/response.json
-    test/Feature/Inference/type-guards/introspection/interface/response.json
-    test/Feature/Inference/type-guards/introspection/objects/response.json
-    test/Feature/Inference/type-guards/resolving/fail/response.json
-    test/Feature/Inference/type-guards/resolving/success/interface-fields/response.json
-    test/Feature/Inference/type-guards/resolving/success/type-casting/response.json
-    test/Feature/Inference/type-inference/introspection/enum/response.json
-    test/Feature/Inference/type-inference/introspection/input-union/empty/response.json
-    test/Feature/Inference/type-inference/introspection/input-union/input-union/response.json
-    test/Feature/Inference/type-inference/introspection/inputObject/response.json
-    test/Feature/Inference/type-inference/introspection/object/response.json
-    test/Feature/Inference/type-inference/introspection/union/named-products/response.json
-    test/Feature/Inference/type-inference/introspection/union/nullary-constructors/response.json
-    test/Feature/Inference/type-inference/introspection/union/positional-products/response.json
-    test/Feature/Inference/type-inference/introspection/union/scalars/response.json
-    test/Feature/Inference/type-inference/introspection/union/union/response.json
-    test/Feature/Inference/type-inference/resolving/complexUnion/response.json
-    test/Feature/Inference/type-inference/resolving/input/fail/response.json
-    test/Feature/Inference/type-inference/resolving/input/success/response.json
-    test/Feature/Inference/type-inference/resolving/object/response.json
-    test/Feature/Inference/union-type/cannotBeSpreadOnType/response.json
-    test/Feature/Inference/union-type/fragmentOnAAndB/response.json
-    test/Feature/Inference/union-type/fragmentOnlyOnA/response.json
-    test/Feature/Inference/union-type/inlineFragment/cannotBeSpreadOnType/response.json
-    test/Feature/Inference/union-type/inlineFragment/fragmentOnAAndB/response.json
-    test/Feature/Inference/union-type/selectionWithoutFragmentNotAllowed/response.json
-    test/Feature/Inference/wrapped-type/ignoreMutationResolver/response.json
-    test/Feature/Inference/wrapped-type/ignoreQueryResolver/response.json
-    test/Feature/Inference/wrapped-type/ignoreSubscriptionResolver/response.json
-    test/Feature/Inference/wrapped-type/validWrappedTypes/response.json
-    test/Feature/Input/collections/assoc/invalid/response.json
-    test/Feature/Input/collections/assoc/ok/response.json
-    test/Feature/Input/collections/map/invalid/response.json
-    test/Feature/Input/collections/map/ok/response.json
-    test/Feature/Input/collections/nonempty/invalid/response.json
-    test/Feature/Input/collections/nonempty/ok/response.json
-    test/Feature/Input/collections/product/invalid/response.json
-    test/Feature/Input/collections/product/ok/response.json
-    test/Feature/Input/collections/seq/response.json
-    test/Feature/Input/collections/set/invalid/response.json
-    test/Feature/Input/collections/set/ok/response.json
-    test/Feature/Input/collections/tuple/invalid/response.json
-    test/Feature/Input/collections/tuple/ok/response.json
-    test/Feature/Input/collections/vector/response.json
     test/Feature/Input/default-values/intorspection/arguments/response.json
     test/Feature/Input/default-values/intorspection/input-compound/response.json
     test/Feature/Input/default-values/intorspection/input-simple/response.json
     test/Feature/Input/default-values/resolving/compound/response.json
     test/Feature/Input/default-values/resolving/simple/response.json
-    test/Feature/Input/enums/decode2Con/response.json
-    test/Feature/Input/enums/decode3Con/response.json
-    test/Feature/Input/enums/decodeInvalidValue/response.json
-    test/Feature/Input/enums/decodeMany/con0/response.json
-    test/Feature/Input/enums/decodeMany/con1/response.json
-    test/Feature/Input/enums/decodeMany/con2/response.json
-    test/Feature/Input/enums/decodeMany/con3/response.json
-    test/Feature/Input/enums/decodeMany/con4/response.json
-    test/Feature/Input/enums/decodeMany/con5/response.json
-    test/Feature/Input/enums/decodeMany/con6/response.json
-    test/Feature/Input/enums/invalidEnumFromJSONVariable/response.json
-    test/Feature/Input/enums/invalidEnumFromJSONVariable/variables.json
-    test/Feature/Input/enums/invalidStringDefaultValue/response.json
-    test/Feature/Input/enums/invalidStringInput/response.json
-    test/Feature/Input/enums/validEnumFromJSONVariable/response.json
-    test/Feature/Input/enums/validEnumFromJSONVariable/variables.json
-    test/Feature/Input/objects/nullableUndefinedField/response.json
-    test/Feature/Input/objects/resolveObject/response.json
-    test/Feature/Input/objects/resolveVariable/response.json
-    test/Feature/Input/objects/resolveVariable/variables.json
-    test/Feature/Input/objects/undefinedField/response.json
-    test/Feature/Input/objects/unexpectedValue/response.json
-    test/Feature/Input/objects/unexpectedVariable/response.json
-    test/Feature/Input/objects/unknownField/response.json
-    test/Feature/Input/scalars/numbers/decodeFloat/response.json
-    test/Feature/Input/scalars/numbers/decodeInt/response.json
-    test/Feature/Input/scalars/strings/block/response.json
-    test/Feature/Input/scalars/strings/escaped/response.json
-    test/Feature/Input/scalars/strings/regular/response.json
-    test/Feature/Input/scalars/strings/wrong-escaped/response.json
-    test/Feature/Input/scalars/strings/wrong-newline/response.json
-    test/Feature/Input/variables/incompatibleType/equalType/response.json
-    test/Feature/Input/variables/incompatibleType/equalType/variables.json
-    test/Feature/Input/variables/incompatibleType/stricterType/response.json
-    test/Feature/Input/variables/incompatibleType/stricterType/variables.json
-    test/Feature/Input/variables/incompatibleType/weakerType1/response.json
-    test/Feature/Input/variables/incompatibleType/weakerType1/variables.json
-    test/Feature/Input/variables/incompatibleType/weakerType2/response.json
-    test/Feature/Input/variables/incompatibleType/weakerType2/variables.json
-    test/Feature/Input/variables/incompatibleType/weakerType3/response.json
-    test/Feature/Input/variables/incompatibleType/weakerType3/variables.json
-    test/Feature/Input/variables/invalidValue/invalidDefaultValue/response.json
-    test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/response.json
-    test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/variables.json
-    test/Feature/Input/variables/invalidValue/invalidListVariable/response.json
-    test/Feature/Input/variables/invalidValue/invalidListVariable/variables.json
-    test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/response.json
-    test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/variables.json
-    test/Feature/Input/variables/nameCollision/response.json
-    test/Feature/Input/variables/nameCollision/variables.json
-    test/Feature/Input/variables/nestedListNullableListReceivedNull/response.json
-    test/Feature/Input/variables/nestedListNullableListReceivedNull/variables.json
-    test/Feature/Input/variables/nonInputTypeViolation/response.json
-    test/Feature/Input/variables/undefinedVariable/response.json
-    test/Feature/Input/variables/unknownType/response.json
-    test/Feature/Input/variables/unusedVariable/unusedVariables/response.json
-    test/Feature/Input/variables/unusedVariable/variableUsedInAlias/response.json
-    test/Feature/Input/variables/unusedVariable/variableUsedInAlias/variables.json
-    test/Feature/Input/variables/unusedVariable/variableUsedInFragment/response.json
-    test/Feature/Input/variables/unusedVariable/variableUsedInFragment/variables.json
-    test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/response.json
-    test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/variables.json
-    test/Feature/Input/variables/validListVariable/response.json
-    test/Feature/Input/variables/validListVariable/variables.json
-    test/Feature/Input/variables/valueNotProvided/nonNullVariable/response.json
-    test/Feature/Input/variables/valueNotProvided/nonNullVariableWithDefaultValue/response.json
-    test/Feature/Input/variables/valueNotProvided/nullableVariable/response.json
     test/Feature/NamedResolvers/tests/deities-ext/response.json
     test/Feature/NamedResolvers/tests/deities/response.json
     test/Feature/NamedResolvers/tests/deity-by-id/response.json
@@ -474,45 +247,8 @@
       Data.Morpheus.Document
       Data.Morpheus.Kind
       Data.Morpheus.NamedResolvers
-      Data.Morpheus.Server
       Data.Morpheus.Types
   other-modules:
-      Data.Morpheus.Server.Deriving.App
-      Data.Morpheus.Server.Deriving.Channels
-      Data.Morpheus.Server.Deriving.Decode
-      Data.Morpheus.Server.Deriving.Encode
-      Data.Morpheus.Server.Deriving.Named.Encode
-      Data.Morpheus.Server.Deriving.Named.EncodeType
-      Data.Morpheus.Server.Deriving.Named.EncodeValue
-      Data.Morpheus.Server.Deriving.Schema
-      Data.Morpheus.Server.Deriving.Schema.Directive
-      Data.Morpheus.Server.Deriving.Schema.Enum
-      Data.Morpheus.Server.Deriving.Schema.Internal
-      Data.Morpheus.Server.Deriving.Schema.Object
-      Data.Morpheus.Server.Deriving.Schema.TypeContent
-      Data.Morpheus.Server.Deriving.Schema.Union
-      Data.Morpheus.Server.Deriving.Utils
-      Data.Morpheus.Server.Deriving.Utils.Decode
-      Data.Morpheus.Server.Deriving.Utils.DeriveGType
-      Data.Morpheus.Server.Deriving.Utils.GTraversable
-      Data.Morpheus.Server.Deriving.Utils.Kinded
-      Data.Morpheus.Server.Deriving.Utils.Proxy
-      Data.Morpheus.Server.Deriving.Utils.Types
-      Data.Morpheus.Server.Playground
-      Data.Morpheus.Server.TH.Compile
-      Data.Morpheus.Server.TH.Declare
-      Data.Morpheus.Server.TH.Declare.GQLDirective
-      Data.Morpheus.Server.TH.Declare.GQLType
-      Data.Morpheus.Server.TH.Declare.Type
-      Data.Morpheus.Server.TH.Utils
-      Data.Morpheus.Server.Types.DirectiveDefinitions
-      Data.Morpheus.Server.Types.Directives
-      Data.Morpheus.Server.Types.GQLType
-      Data.Morpheus.Server.Types.Internal
-      Data.Morpheus.Server.Types.SchemaT
-      Data.Morpheus.Server.Types.TypeName
-      Data.Morpheus.Server.Types.Types
-      Data.Morpheus.Server.Types.Visitors
       Paths_morpheus_graphql
   hs-source-dirs:
       src
@@ -522,9 +258,10 @@
     , base >=4.7.0 && <5.0.0
     , bytestring >=0.10.4 && <0.12.0
     , containers >=0.4.2.1 && <0.7.0
-    , morpheus-graphql-app >=0.21.0 && <0.22.0
-    , morpheus-graphql-code-gen >=0.21.0 && <0.22.0
-    , morpheus-graphql-core >=0.21.0 && <0.22.0
+    , morpheus-graphql-app >=0.22.0 && <0.23.0
+    , morpheus-graphql-code-gen >=0.22.0 && <0.23.0
+    , morpheus-graphql-core >=0.22.0 && <0.23.0
+    , morpheus-graphql-server >=0.22.0 && <0.23.0
     , mtl >=2.0.0 && <3.0.0
     , relude >=0.3.0 && <2.0.0
     , template-haskell >=2.0.0 && <3.0.0
@@ -538,25 +275,8 @@
   type: exitcode-stdio-1.0
   main-is: Spec.hs
   other-modules:
-      Feature.Collision.CategoryCollisionFail
-      Feature.Collision.CategoryCollisionSuccess
-      Feature.Collision.NameCollision
-      Feature.Collision.NameCollisionHelper
-      Feature.Directive.Definition
       Feature.Holistic.API
-      Feature.Inference.ObjectAndEnum
-      Feature.Inference.TaggedArguments
-      Feature.Inference.TaggedArgumentsFail
-      Feature.Inference.TypeGuards
-      Feature.Inference.TypeInference
-      Feature.Inference.UnionType
-      Feature.Inference.WrappedType
-      Feature.Input.Collections
       Feature.Input.DefaultValues
-      Feature.Input.Enums
-      Feature.Input.Objects
-      Feature.Input.Scalars
-      Feature.Input.Variables
       Feature.NamedResolvers.API
       Feature.NamedResolvers.Deities
       Feature.NamedResolvers.Entities
@@ -577,13 +297,13 @@
     , base >=4.7.0 && <5.0.0
     , bytestring >=0.10.4 && <0.12.0
     , containers >=0.4.2.1 && <0.7.0
-    , file-embed >=0.0.10 && <1.0.0
     , morpheus-graphql
-    , morpheus-graphql-app >=0.21.0 && <0.22.0
-    , morpheus-graphql-code-gen >=0.21.0 && <0.22.0
-    , morpheus-graphql-core >=0.21.0 && <0.22.0
-    , morpheus-graphql-subscriptions >=0.21.0 && <0.22.0
-    , morpheus-graphql-tests >=0.21.0 && <0.22.0
+    , morpheus-graphql-app >=0.22.0 && <0.23.0
+    , morpheus-graphql-code-gen >=0.22.0 && <0.23.0
+    , morpheus-graphql-core >=0.22.0 && <0.23.0
+    , morpheus-graphql-server >=0.22.0 && <0.23.0
+    , morpheus-graphql-subscriptions >=0.22.0 && <0.23.0
+    , morpheus-graphql-tests >=0.22.0 && <0.23.0
     , mtl >=2.0.0 && <3.0.0
     , relude >=0.3.0 && <2.0.0
     , tasty >=0.1.0 && <1.5.0
diff --git a/src/Data/Morpheus.hs b/src/Data/Morpheus.hs
--- a/src/Data/Morpheus.hs
+++ b/src/Data/Morpheus.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE NoImplicitPrelude #-}
 
 -- | Build GraphQL APIs with your favorite functional language!
@@ -9,36 +8,18 @@
     deriveApp,
     runApp,
     withDebugger,
+    httpPlayground,
+    compileTimeSchemaValidation,
   )
 where
 
--- MORPHEUS
-import Data.Morpheus.App
+import Data.Morpheus.Server
   ( App,
-    MapAPI,
+    compileTimeSchemaValidation,
+    debugInterpreter,
+    deriveApp,
+    httpPlayground,
+    interpreter,
     runApp,
     withDebugger,
   )
-import Data.Morpheus.Server.Deriving.App
-  ( RootResolverConstraint,
-    deriveApp,
-  )
-import Data.Morpheus.Types
-  ( RootResolver (..),
-  )
-import Relude
-
--- | main query processor and resolver
-interpreter ::
-  (MapAPI a b, RootResolverConstraint m e query mut sub) =>
-  RootResolver m e query mut sub ->
-  a ->
-  m b
-interpreter = runApp . deriveApp
-
-debugInterpreter ::
-  (MapAPI a b, RootResolverConstraint m e query mut sub) =>
-  RootResolver m e query mut sub ->
-  a ->
-  m b
-debugInterpreter = runApp . withDebugger . deriveApp
diff --git a/src/Data/Morpheus/Document.hs b/src/Data/Morpheus/Document.hs
--- a/src/Data/Morpheus/Document.hs
+++ b/src/Data/Morpheus/Document.hs
@@ -10,41 +10,25 @@
   )
 where
 
-import Data.ByteString.Lazy.Char8
-  ( ByteString,
-    readFile,
-  )
-import Data.Morpheus.CodeGen.Internal.AST
+import Data.ByteString.Lazy.Char8 (ByteString)
+import Data.Morpheus.CodeGen.Server
   ( CodeGenConfig (..),
+    gqlDocument,
+    importServerTypeDefinitions,
   )
 import Data.Morpheus.Server
   ( RootResolverConstraint,
     printSchema,
   )
-import Data.Morpheus.Server.TH.Compile
-  ( compileDocument,
-    gqlDocument,
-  )
 import Data.Morpheus.Types (RootResolver)
 import Language.Haskell.TH
-import Language.Haskell.TH.Syntax
-  ( qAddDependentFile,
-  )
 import Relude hiding (ByteString, readFile)
 
-importDeclarations :: CodeGenConfig -> FilePath -> Q [Dec]
-importDeclarations ctx src = do
-  qAddDependentFile src
-  runIO (readFile src)
-    >>= compileDocument ctx
-
 importGQLDocument :: FilePath -> Q [Dec]
-importGQLDocument =
-  importDeclarations CodeGenConfig {namespace = False}
+importGQLDocument = importServerTypeDefinitions CodeGenConfig {namespace = False}
 
 importGQLDocumentWithNamespace :: FilePath -> Q [Dec]
-importGQLDocumentWithNamespace =
-  importDeclarations CodeGenConfig {namespace = True}
+importGQLDocumentWithNamespace = importServerTypeDefinitions CodeGenConfig {namespace = True}
 
 {-# DEPRECATED toGraphQLDocument "use Data.Morpheus.Server.printSchema" #-}
 toGraphQLDocument ::
diff --git a/src/Data/Morpheus/Kind.hs b/src/Data/Morpheus/Kind.hs
--- a/src/Data/Morpheus/Kind.hs
+++ b/src/Data/Morpheus/Kind.hs
@@ -21,56 +21,36 @@
   )
 where
 
-import Relude
+import Data.Morpheus.Server.Types
 
 {-# DEPRECATED GQL_KIND "use: DerivingKind" #-}
 
 type GQL_KIND = DerivingKind
 
-data DerivingKind
-  = SCALAR
-  | TYPE
-  | WRAPPER
-  | CUSTOM
-  deriving (Show)
-
--- | GraphQL input, type, union , enum
-type TYPE = 'TYPE
-
--- | GraphQL Scalar: Int, Float, String, Boolean or any user defined custom Scalar type
-type SCALAR = 'SCALAR
-
--- | GraphQL Arrays , Resolvers and NonNull fields
-type WRAPPER = 'WRAPPER
-
-type CUSTOM = 'CUSTOM
-
--- deprecated types
-
 {-# DEPRECATED INTERFACE "use: deriving(GQLType), will be automatically inferred" #-}
 
-type INTERFACE = 'TYPE
+type INTERFACE = TYPE
 
 {-# DEPRECATED ENUM "use: deriving(GQLType), will be automatically inferred" #-}
 
-type ENUM = 'TYPE
+type ENUM = TYPE
 
 {-# DEPRECATED OUTPUT "use: deriving(GQLType), will be automatically inferred" #-}
 
-type OUTPUT = 'TYPE
+type OUTPUT = TYPE
 
 {-# DEPRECATED INPUT "use: deriving(GQLType), will be automatically inferred" #-}
 
-type INPUT = 'TYPE
+type INPUT = TYPE
 
 {-# DEPRECATED INPUT_OBJECT "use: deriving(GQLType), will be automatically inferred" #-}
 
-type INPUT_OBJECT = 'TYPE
+type INPUT_OBJECT = TYPE
 
 {-# DEPRECATED UNION "use: deriving(GQLType), IMPORTANT: only types with <type constructor name><constructor name> will sustain their form, other union constructors will be wrapped inside an new object" #-}
 
-type UNION = 'TYPE
+type UNION = TYPE
 
 {-# DEPRECATED OBJECT "use: deriving(GQLType), will be automatically inferred" #-}
 
-type OBJECT = 'TYPE
+type OBJECT = TYPE
diff --git a/src/Data/Morpheus/NamedResolvers.hs b/src/Data/Morpheus/NamedResolvers.hs
--- a/src/Data/Morpheus/NamedResolvers.hs
+++ b/src/Data/Morpheus/NamedResolvers.hs
@@ -1,12 +1,3 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
 module Data.Morpheus.NamedResolvers
   ( ResolveNamed (..),
     NamedResolverT (..),
@@ -14,55 +5,8 @@
   )
 where
 
-import Data.Aeson (ToJSON)
-import Data.Morpheus.Types.ID (ID)
-import Relude
-
-instance Monad m => ResolveNamed m ID where
-  type Dep ID = ID
-  resolveNamed = pure
-
-instance Monad m => ResolveNamed m Text where
-  type Dep Text = Text
-  resolveNamed = pure
-
-class (ToJSON (Dep a)) => ResolveNamed (m :: Type -> Type) a where
-  type Dep a :: Type
-  resolveNamed :: Monad m => Dep a -> m a
-
-instance (ResolveNamed m a) => ResolveNamed (m :: Type -> Type) (Maybe a) where
-  type Dep (Maybe a) = Maybe (Dep a)
-  resolveNamed (Just x) = Just <$> resolveNamed x
-  resolveNamed Nothing = pure Nothing
-
-instance (ResolveNamed m a) => ResolveNamed (m :: Type -> Type) [a] where
-  type Dep [a] = [Dep a]
-  resolveNamed = traverse resolveNamed
-
-data NamedResolverT (m :: Type -> Type) a where
-  Ref :: ResolveNamed m a => m (Dep a) -> NamedResolverT m a
-  Refs :: ResolveNamed m a => m [Dep a] -> NamedResolverT m [a]
-  Value :: m a -> NamedResolverT m a
-
--- RESOLVER TYPES
-data RES = VALUE | LIST | REF
-
-type family RES_TYPE a b :: RES where
-  RES_TYPE a a = 'VALUE
-  RES_TYPE [a] [b] = 'LIST
-  RES_TYPE a b = 'REF
-
-resolve :: forall m a b. (ResolveByType (RES_TYPE a b) m a b) => Monad m => m a -> NamedResolverT m b
-resolve = resolveByType (Proxy :: Proxy (RES_TYPE a b))
-
-class Dep b ~ a => ResolveByType (k :: RES) m a b where
-  resolveByType :: Monad m => f k -> m a -> NamedResolverT m b
-
-instance (ResolveNamed m a, Dep a ~ a) => ResolveByType 'VALUE m a a where
-  resolveByType _ = Value
-
-instance (ResolveNamed m b, Dep b ~ a) => ResolveByType 'LIST m [a] [b] where
-  resolveByType _ = Refs
-
-instance (ResolveNamed m b, Dep b ~ a) => ResolveByType 'REF m a b where
-  resolveByType _ = Ref
+import Data.Morpheus.Server.Resolvers
+  ( NamedResolverT (..),
+    ResolveNamed (..),
+    resolve,
+  )
diff --git a/src/Data/Morpheus/Server.hs b/src/Data/Morpheus/Server.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
--- |  GraphQL Wai Server Applications
-module Data.Morpheus.Server
-  ( httpPlayground,
-    compileTimeSchemaValidation,
-    printSchema,
-    RootResolverConstraint,
-  )
-where
-
-import Data.ByteString.Lazy.Char8
-  ( ByteString,
-    pack,
-  )
-import Data.Morpheus.App.Internal.Resolving
-  ( resultOr,
-  )
-import Data.Morpheus.Core
-  ( render,
-  )
-import Data.Morpheus.Server.Deriving.App
-  ( RootResolverConstraint,
-    deriveSchema,
-  )
-import Data.Morpheus.Server.Deriving.Schema
-  ( compileTimeSchemaValidation,
-  )
-import Data.Morpheus.Server.Playground
-  ( httpPlayground,
-  )
-import Data.Morpheus.Types (RootResolver)
-import Relude hiding (ByteString)
-
--- | Generates schema.gql file from 'RootResolver'
-printSchema ::
-  RootResolverConstraint m event query mut sub =>
-  proxy (RootResolver m event query mut sub) ->
-  ByteString
-printSchema =
-  resultOr (pack . show) render
-    . deriveSchema
diff --git a/src/Data/Morpheus/Server/Deriving/App.hs b/src/Data/Morpheus/Server/Deriving/App.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/App.hs
+++ /dev/null
@@ -1,74 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE KindSignatures #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE TupleSections #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.App
-  ( RootResolverConstraint,
-    deriveSchema,
-    deriveApp,
-  )
-where
-
-import Data.Morpheus.App
-  ( App (..),
-    mkApp,
-  )
-import Data.Morpheus.App.Internal.Resolving
-  ( resultOr,
-  )
-import Data.Morpheus.Server.Deriving.Encode
-  ( EncodeConstraints,
-    deriveModel,
-  )
-import Data.Morpheus.Server.Deriving.Named.Encode
-  ( EncodeNamedConstraints,
-    deriveNamedModel,
-  )
-import Data.Morpheus.Server.Deriving.Schema
-  ( SchemaConstraints,
-    deriveSchema,
-  )
-import Data.Morpheus.Types
-  ( NamedResolvers,
-    RootResolver (..),
-  )
-import Relude
-
-type RootResolverConstraint m e query mutation subscription =
-  ( EncodeConstraints e m query mutation subscription,
-    SchemaConstraints e m query mutation subscription,
-    Monad m
-  )
-
-type NamedResolversConstraint m e query mutation subscription =
-  ( EncodeNamedConstraints e m query mutation subscription,
-    SchemaConstraints e m query mutation subscription,
-    Monad m
-  )
-
-class
-  DeriveApp
-    f
-    m
-    (event :: Type)
-    (qu :: (Type -> Type) -> Type)
-    (mu :: (Type -> Type) -> Type)
-    (su :: (Type -> Type) -> Type)
-  where
-  deriveApp :: f m event qu mu su -> App event m
-
-instance RootResolverConstraint m e query mut sub => DeriveApp RootResolver m e query mut sub where
-  deriveApp root =
-    resultOr FailApp (uncurry mkApp) $
-      (,) <$> deriveSchema (Identity root) <*> deriveModel root
-
-instance NamedResolversConstraint m e query mut sub => DeriveApp NamedResolvers m e query mut sub where
-  deriveApp root =
-    resultOr FailApp (uncurry mkApp) $
-      (,deriveNamedModel root) <$> deriveSchema (Identity root)
diff --git a/src/Data/Morpheus/Server/Deriving/Channels.hs b/src/Data/Morpheus/Server/Deriving/Channels.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Channels.hs
+++ /dev/null
@@ -1,160 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Channels
-  ( channelResolver,
-    ChannelsConstraint,
-  )
-where
-
-import Control.Monad.Except (throwError)
-import qualified Data.HashMap.Lazy as HM
-import Data.Morpheus.App.Internal.Resolving
-  ( Channel,
-    Resolver,
-    ResolverState,
-    SubscriptionField (..),
-  )
-import Data.Morpheus.Internal.Utils
-  ( selectBy,
-  )
-import Data.Morpheus.Server.Deriving.Decode
-  ( Decode,
-    decodeArguments,
-  )
-import Data.Morpheus.Server.Deriving.Utils
-  ( ConsRep (..),
-    DataType (..),
-    FieldRep (..),
-  )
-import Data.Morpheus.Server.Deriving.Utils.DeriveGType
-  ( DeriveValueOptions (..),
-    DeriveWith,
-    deriveValue,
-  )
-import Data.Morpheus.Server.Deriving.Utils.Kinded (KindedProxy (..), kinded)
-import Data.Morpheus.Server.Types.GQLType (GQLType (typeOptions), deriveTypename, __typeData)
-import Data.Morpheus.Server.Types.Internal (defaultTypeOptions)
-import Data.Morpheus.Server.Types.Types (Undefined)
-import Data.Morpheus.Types.Internal.AST
-  ( FieldName,
-    OUT,
-    SUBSCRIPTION,
-    Selection (..),
-    SelectionContent (..),
-    VALID,
-    internal,
-  )
-import GHC.Generics
-import Relude hiding (Undefined)
-
-newtype DerivedChannel e = DerivedChannel
-  { _unpackChannel :: Channel e
-  }
-
-type ChannelRes (e :: Type) = Selection VALID -> ResolverState (DerivedChannel e)
-
-type ChannelsConstraint e m (subs :: (Type -> Type) -> Type) =
-  ExploreChannels (IsUndefined (subs (Resolver SUBSCRIPTION e m))) e (subs (Resolver SUBSCRIPTION e m))
-
-channelResolver ::
-  forall e m subs.
-  ChannelsConstraint e m subs =>
-  subs (Resolver SUBSCRIPTION e m) ->
-  Selection VALID ->
-  ResolverState (Channel e)
-channelResolver value = fmap _unpackChannel . channelSelector
-  where
-    channelSelector ::
-      Selection VALID ->
-      ResolverState (DerivedChannel e)
-    channelSelector =
-      selectBySelection
-        ( exploreChannels
-            (Proxy @(IsUndefined (subs (Resolver SUBSCRIPTION e m))))
-            value
-        )
-
-selectBySelection ::
-  HashMap FieldName (ChannelRes e) ->
-  Selection VALID ->
-  ResolverState (DerivedChannel e)
-selectBySelection channels = withSubscriptionSelection >=> selectSubscription channels
-
-selectSubscription ::
-  HashMap FieldName (ChannelRes e) ->
-  Selection VALID ->
-  ResolverState (DerivedChannel e)
-selectSubscription channels sel@Selection {selectionName} =
-  selectBy
-    (internal "invalid subscription: no channel is selected.")
-    selectionName
-    channels
-    >>= (sel &)
-
-withSubscriptionSelection :: Selection VALID -> ResolverState (Selection VALID)
-withSubscriptionSelection Selection {selectionContent = SelectionSet selSet} =
-  case toList selSet of
-    [sel] -> pure sel
-    _ -> throwError (internal "invalid subscription: there can be only one top level selection")
-withSubscriptionSelection _ = throwError (internal "invalid subscription: expected selectionSet")
-
-class GetChannel e a | a -> e where
-  getChannel :: a -> ChannelRes e
-
-instance GetChannel e (SubscriptionField (Resolver SUBSCRIPTION e m a)) where
-  getChannel x = const $ pure $ DerivedChannel $ channel x
-
-instance
-  Decode arg =>
-  GetChannel e (arg -> SubscriptionField (Resolver SUBSCRIPTION e m a))
-  where
-  getChannel f sel@Selection {selectionArguments} =
-    decodeArguments selectionArguments
-      >>= (`getChannel` sel)
-        . f
-
-------------------------------------------------------
-
-type family IsUndefined a :: Bool where
-  IsUndefined (Undefined m) = 'True
-  IsUndefined a = 'False
-
-class ExploreChannels (t :: Bool) e a where
-  exploreChannels :: f t -> a -> HashMap FieldName (ChannelRes e)
-
-class (GQLType a, GetChannel e a) => ChannelConstraint e a
-
-instance (GetChannel e a, GQLType a) => ChannelConstraint e a
-
-instance (GQLType a, Generic a, DeriveWith (ChannelConstraint e) (ChannelRes e) (Rep a)) => ExploreChannels 'False e a where
-  exploreChannels _ =
-    HM.fromList
-      . convertNode
-      . deriveValue
-        ( DeriveValueOptions
-            { __valueApply = getChannel,
-              __valueTypeName = deriveTypename (KindedProxy :: KindedProxy OUT a),
-              __valueGQLOptions = typeOptions (Proxy @a) defaultTypeOptions,
-              __valueGetType = __typeData . kinded (Proxy @OUT)
-            } ::
-            DeriveValueOptions OUT (ChannelConstraint e) (ChannelRes e)
-        )
-
-instance ExploreChannels 'True e (Undefined m) where
-  exploreChannels _ = pure HM.empty
-
-convertNode :: DataType (ChannelRes e) -> [(FieldName, ChannelRes e)]
-convertNode DataType {tyCons = ConsRep {consFields}} = map toChannels consFields
-  where
-    toChannels FieldRep {fieldSelector, fieldValue} = (fieldSelector, fieldValue)
diff --git a/src/Data/Morpheus/Server/Deriving/Decode.hs b/src/Data/Morpheus/Server/Deriving/Decode.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Decode.hs
+++ /dev/null
@@ -1,246 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Decode
-  ( decodeArguments,
-    Decode,
-    decode,
-  )
-where
-
-import Control.Monad.Except (MonadError (throwError))
-import qualified Data.Map as M
-import Data.Morpheus.App.Internal.Resolving
-  ( ResolverState,
-  )
-import Data.Morpheus.Kind
-  ( CUSTOM,
-    DerivingKind,
-    SCALAR,
-    TYPE,
-    WRAPPER,
-  )
-import Data.Morpheus.Server.Deriving.Utils
-  ( conNameProxy,
-    selNameProxy,
-    symbolName,
-  )
-import Data.Morpheus.Server.Deriving.Utils.Decode
-  ( Context (..),
-    DecoderT,
-    Info (..),
-    Tag (..),
-    decodeFieldWith,
-    getFieldName,
-    handleEither,
-    withInputObject,
-    withInputUnion,
-    withKind,
-    withScalar,
-  )
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-  ( KindedProxy (..),
-  )
-import Data.Morpheus.Server.Types.GQLType
-  ( GQLType
-      ( KIND,
-        typeOptions
-      ),
-    deriveTypename,
-  )
-import Data.Morpheus.Server.Types.Internal
-  ( defaultTypeOptions,
-  )
-import Data.Morpheus.Server.Types.Types (Arg (Arg))
-import Data.Morpheus.Types.GQLScalar
-  ( DecodeScalar (..),
-  )
-import Data.Morpheus.Types.GQLWrapper
-  ( DecodeWrapper (..),
-    DecodeWrapperConstraint,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( Argument (..),
-    Arguments,
-    IN,
-    LEAF,
-    Object,
-    ObjectEntry (..),
-    TypeName,
-    VALID,
-    ValidObject,
-    ValidValue,
-    Value (..),
-    internal,
-    msg,
-  )
-import GHC.Generics
-import GHC.TypeLits (KnownSymbol)
-import Relude
-
--- GENERIC
-decodeArguments :: forall a. Decode a => Arguments VALID -> ResolverState a
-decodeArguments = decode . Object . fmap toEntry
-  where
-    toEntry Argument {..} = ObjectEntry argumentName argumentValue
-
-type Decode a = (DecodeKind (KIND a) a)
-
-decode :: forall a. Decode a => ValidValue -> ResolverState a
-decode = decodeKind (Proxy @(KIND a))
-
--- | Decode GraphQL type with Specific Kind
-class DecodeKind (kind :: DerivingKind) a where
-  decodeKind :: Proxy kind -> ValidValue -> ResolverState a
-
--- SCALAR
-instance (DecodeScalar a, GQLType a) => DecodeKind SCALAR a where
-  decodeKind _ = withScalar (deriveTypename (KindedProxy :: KindedProxy LEAF a)) decodeScalar
-
--- INPUT_OBJECT and  INPUT_UNION
-instance
-  ( Generic a,
-    GQLType a,
-    DecodeRep (Rep a)
-  ) =>
-  DecodeKind TYPE a
-  where
-  decodeKind _ = fmap to . (`runReaderT` context) . decodeRep
-    where
-      context =
-        Context
-          { options = typeOptions (Proxy @a) defaultTypeOptions,
-            contKind = D_CONS,
-            typeName = deriveTypename (KindedProxy :: KindedProxy IN a)
-          }
-
-instance (Decode a, DecodeWrapperConstraint f a, DecodeWrapper f) => DecodeKind WRAPPER (f a) where
-  decodeKind _ value =
-    runExceptT (decodeWrapper decode value)
-      >>= handleEither
-
-instance (Decode a, KnownSymbol name) => DecodeKind CUSTOM (Arg name a) where
-  decodeKind _ value = Arg <$> withInputObject fieldDecoder value
-    where
-      fieldDecoder = decodeFieldWith decode fieldName
-      fieldName = symbolName (Proxy @name)
-
---  Map
-instance (Ord k, Decode (k, v)) => DecodeKind CUSTOM (Map k v) where
-  decodeKind _ v = M.fromList <$> (decode v :: ResolverState [(k, v)])
-
-decideUnion ::
-  (DecodeRep f1, DecodeRep f2) =>
-  ([TypeName], [TypeName]) ->
-  TypeName ->
-  ValidValue ->
-  DecoderT ((:+:) f1 f2 a)
-decideUnion (left, right) name value
-  | name `elem` left = L1 <$> decodeRep value
-  | name `elem` right = R1 <$> decodeRep value
-  | otherwise =
-      throwError $
-        internal $
-          "Constructor \""
-            <> msg name
-            <> "\" could not find in Union"
-
-traverseUnion ::
-  (DecodeRep f, DecodeRep g) =>
-  ([TypeName], [TypeName]) ->
-  TypeName ->
-  Object VALID ->
-  ValidObject ->
-  DecoderT ((f :+: g) a)
-traverseUnion (l, r) name unions object
-  | [name] == l = L1 <$> decodeRep (Object object)
-  | [name] == r = R1 <$> decodeRep (Object object)
-  | otherwise = decideUnion (l, r) name (Object unions)
-
-getUnionInfos ::
-  forall f a b.
-  (DecodeRep a, DecodeRep b) =>
-  f (a :+: b) ->
-  DecoderT (Info, Info)
-getUnionInfos _ =
-  ( \context ->
-      ( tags (Proxy @a) context,
-        tags (Proxy @b) context
-      )
-  )
-    <$> ask
-
-class DecodeRep (f :: Type -> Type) where
-  tags :: Proxy f -> Context -> Info
-  decodeRep :: ValidValue -> DecoderT (f a)
-
-instance (Datatype d, DecodeRep f) => DecodeRep (M1 D d f) where
-  tags _ = tags (Proxy @f)
-  decodeRep value = M1 <$> decodeRep value
-
-instance (DecodeRep a, DecodeRep b) => DecodeRep (a :+: b) where
-  tags _ = tags (Proxy @a) <> tags (Proxy @b)
-  decodeRep (Object obj) =
-    do
-      (left, right) <- getUnionInfos (Proxy @(a :+: b))
-      withKind (kind (left <> right)) $ withInputUnion (traverseUnion (tagName left, tagName right)) obj
-  decodeRep (Enum name) = do
-    (left, right) <- getUnionInfos (Proxy @(a :+: b))
-    decideUnion (tagName left, tagName right) name (Enum name)
-  decodeRep _ = throwError (internal "lists and scalars are not allowed in Union")
-
-instance (Constructor c, DecodeFields a) => DecodeRep (M1 C c a) where
-  decodeRep = fmap M1 . decodeFields 0
-  tags _ Context {typeName, options} = getTag (refType (Proxy @a))
-    where
-      getTag (Just memberRef)
-        | isUnionRef memberRef = Info {kind = D_UNION, tagName = [memberRef]}
-        | otherwise = Info {kind = D_CONS, tagName = [consName]}
-      getTag Nothing = Info {kind = D_CONS, tagName = [consName]}
-      --------
-      consName = conNameProxy options (Proxy @c)
-      ----------
-      isUnionRef x = typeName <> x == consName
-
-class DecodeFields (f :: Type -> Type) where
-  refType :: Proxy f -> Maybe TypeName
-  countFields :: Proxy f -> Int
-  decodeFields :: Int -> ValidValue -> DecoderT (f a)
-
-instance (DecodeFields f, DecodeFields g) => DecodeFields (f :*: g) where
-  refType _ = Nothing
-  countFields _ = countFields (Proxy @f) + countFields (Proxy @g)
-  decodeFields index gql =
-    (:*:)
-      <$> decodeFields index gql
-      <*> decodeFields (index + countFields (Proxy @g)) gql
-
-instance (Selector s, GQLType a, Decode a) => DecodeFields (M1 S s (K1 i a)) where
-  countFields _ = 1
-  refType _ = Just $ deriveTypename (KindedProxy :: KindedProxy IN a)
-  decodeFields index value =
-    M1 . K1 <$> do
-      Context {options, contKind} <- ask
-      case contKind of
-        D_UNION -> lift (decode value)
-        D_CONS ->
-          let fieldName = getFieldName (selNameProxy options (Proxy @s)) index
-              fieldDecoder = decodeFieldWith (lift . decode) fieldName
-           in withInputObject fieldDecoder value
-
-instance DecodeFields U1 where
-  countFields _ = 0
-  refType _ = Nothing
-  decodeFields _ _ = pure U1
diff --git a/src/Data/Morpheus/Server/Deriving/Encode.hs b/src/Data/Morpheus/Server/Deriving/Encode.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Encode.hs
+++ /dev/null
@@ -1,260 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Encode
-  ( deriveModel,
-    EncodeConstraints,
-    ContextValue (..),
-  )
-where
-
-import Control.Monad.Except (MonadError)
-import qualified Data.Map as M
-import Data.Morpheus.App.Internal.Resolving
-  ( LiftOperation,
-    ObjectTypeResolver,
-    Resolver,
-    ResolverState,
-    ResolverValue (..),
-    RootResolverValue (..),
-    getArguments,
-    liftResolverState,
-    mkEnum,
-    mkObject,
-    mkUnion,
-    requireObject,
-  )
-import Data.Morpheus.Internal.Ext (GQLResult)
-import Data.Morpheus.Kind
-  ( CUSTOM,
-    DerivingKind,
-    SCALAR,
-    TYPE,
-    WRAPPER,
-  )
-import Data.Morpheus.Server.Deriving.Channels
-  ( ChannelsConstraint,
-    channelResolver,
-  )
-import Data.Morpheus.Server.Deriving.Decode
-  ( Decode,
-    decodeArguments,
-  )
-import Data.Morpheus.Server.Deriving.Utils
-  ( ConsRep (..),
-    DataType (..),
-    FieldRep (..),
-    isUnionRef,
-    toFieldRes,
-  )
-import Data.Morpheus.Server.Deriving.Utils.DeriveGType
-  ( DeriveValueOptions (..),
-    DeriveWith,
-    deriveValue,
-  )
-import Data.Morpheus.Server.Deriving.Utils.Kinded (KindedProxy (KindedProxy), kinded)
-import Data.Morpheus.Server.Types.GQLType
-  ( GQLType (typeOptions),
-    KIND,
-    deriveTypename,
-    __isEmptyType,
-    __typeData,
-  )
-import Data.Morpheus.Server.Types.Types
-  ( TypeGuard (..),
-  )
-import Data.Morpheus.Types
-  ( RootResolver (..),
-    defaultTypeOptions,
-  )
-import Data.Morpheus.Types.GQLScalar
-  ( EncodeScalar (..),
-  )
-import Data.Morpheus.Types.GQLWrapper (EncodeWrapper (..))
-import Data.Morpheus.Types.Internal.AST
-  ( GQLError,
-    IN,
-    MUTATION,
-    OperationType,
-    QUERY,
-    SUBSCRIPTION,
-    TypeRef (..),
-  )
-import GHC.Generics
-  ( Generic (..),
-  )
-import Relude
-
-newtype ContextValue (kind :: DerivingKind) a = ContextValue
-  { unContextValue :: a
-  }
-
-class Encode (m :: Type -> Type) resolver where
-  encode :: resolver -> m (ResolverValue m)
-
-instance (EncodeKind (KIND a) m a) => Encode m a where
-  encode resolver = encodeKind (ContextValue resolver :: ContextValue (KIND a) a)
-
--- ENCODE GQL KIND
-class EncodeKind (kind :: DerivingKind) (m :: Type -> Type) (a :: Type) where
-  encodeKind :: ContextValue kind a -> m (ResolverValue m)
-
-instance
-  ( EncodeWrapper f,
-    Encode m a,
-    Monad m
-  ) =>
-  EncodeKind WRAPPER m (f a)
-  where
-  encodeKind = encodeWrapper encode . unContextValue
-
-instance
-  ( EncodeScalar a,
-    Monad m
-  ) =>
-  EncodeKind SCALAR m a
-  where
-  encodeKind = pure . ResScalar . encodeScalar . unContextValue
-
-instance
-  ( EncodeConstraint m a,
-    MonadError GQLError m
-  ) =>
-  EncodeKind TYPE m a
-  where
-  encodeKind = pure . exploreResolvers . unContextValue
-
---  Map
-instance (Monad m, Encode m [(k, v)]) => EncodeKind CUSTOM m (Map k v) where
-  encodeKind = encode . M.toList . unContextValue
-
---  INTERFACE Types
-instance (MonadError GQLError m, EncodeConstraint m guard, EncodeConstraint m union) => EncodeKind CUSTOM m (TypeGuard guard union) where
-  encodeKind (ContextValue (ResolveType value)) = pure (exploreResolvers value)
-  encodeKind (ContextValue (ResolveInterface value)) = pure (exploreResolvers value)
-
---  GQL a -> Resolver b, MUTATION, SUBSCRIPTION, QUERY
-instance
-  ( Decode a,
-    Generic a,
-    Monad m,
-    Encode (Resolver o e m) b,
-    LiftOperation o
-  ) =>
-  EncodeKind CUSTOM (Resolver o e m) (a -> b)
-  where
-  encodeKind (ContextValue f) =
-    getArguments
-      >>= liftResolverState . decodeArguments
-      >>= encode . f
-
---  GQL a -> Resolver b, MUTATION, SUBSCRIPTION, QUERY
-instance
-  (Monad m, Encode (Resolver o e m) b, LiftOperation o) =>
-  EncodeKind CUSTOM (Resolver o e m) (Resolver o e m b)
-  where
-  encodeKind (ContextValue value) = value >>= encode
-
-convertNode ::
-  forall m.
-  MonadError GQLError m =>
-  DataType (m (ResolverValue m)) ->
-  ResolverValue m
-convertNode
-  DataType
-    { dataTypeName,
-      tyIsUnion,
-      tyCons = cons@ConsRep {consFields, consName}
-    } = encodeTypeFields consFields
-    where
-      -- ENUM
-      encodeTypeFields ::
-        [FieldRep (m (ResolverValue m))] ->
-        ResolverValue m
-      encodeTypeFields [] = mkEnum consName
-      encodeTypeFields fields
-        | not tyIsUnion = mkObject dataTypeName (toFieldRes <$> fields)
-      -- Type References --------------------------------------------------------------
-      encodeTypeFields [FieldRep {fieldTypeRef, fieldValue}]
-        | isUnionRef dataTypeName cons = ResLazy (ResObject (Just (typeConName fieldTypeRef)) <$> (fieldValue >>= requireObject))
-      -- Inline Union Types ----------------------------------------------------------------------------
-      encodeTypeFields fields = mkUnion consName (toFieldRes <$> fields)
-
--- Types & Constrains -------------------------------------------------------
-class (Encode m a, GQLType a) => ExplorerConstraint m a
-
-instance (Encode m a, GQLType a) => ExplorerConstraint m a
-
-exploreResolvers ::
-  forall m a.
-  ( EncodeConstraint m a,
-    MonadError GQLError m
-  ) =>
-  a ->
-  ResolverValue m
-exploreResolvers =
-  convertNode
-    . deriveValue
-      ( DeriveValueOptions
-          { __valueApply = encode,
-            __valueTypeName = deriveTypename (KindedProxy :: KindedProxy IN a),
-            __valueGQLOptions = typeOptions (Proxy @a) defaultTypeOptions,
-            __valueGetType = __typeData . kinded (Proxy @IN)
-          } ::
-          DeriveValueOptions IN (ExplorerConstraint m) (m (ResolverValue m))
-      )
-
------ HELPERS ----------------------------
-objectResolvers ::
-  ( EncodeConstraint m a,
-    MonadError GQLError m
-  ) =>
-  a ->
-  ResolverState (ObjectTypeResolver m)
-objectResolvers value = requireObject (exploreResolvers value)
-
-type EncodeConstraint (m :: Type -> Type) a =
-  ( GQLType a,
-    Generic a,
-    DeriveWith (ExplorerConstraint m) (m (ResolverValue m)) (Rep a)
-  )
-
-type EncodeObjectConstraint (o :: OperationType) e (m :: Type -> Type) a =
-  EncodeConstraint (Resolver o e m) (a (Resolver o e m))
-
-type EncodeConstraints e m query mut sub =
-  ( ChannelsConstraint e m sub,
-    EncodeObjectConstraint QUERY e m query,
-    EncodeObjectConstraint MUTATION e m mut,
-    EncodeObjectConstraint SUBSCRIPTION e m sub
-  )
-
-deriveModel ::
-  forall e m query mut sub.
-  (Monad m, EncodeConstraints e m query mut sub) =>
-  RootResolver m e query mut sub ->
-  GQLResult (RootResolverValue e m)
-deriveModel RootResolver {..} =
-  pure
-    RootResolverValue
-      { queryResolver = objectResolvers queryResolver,
-        mutationResolver = objectResolvers mutationResolver,
-        subscriptionResolver = objectResolvers subscriptionResolver,
-        channelMap
-      }
-  where
-    channelMap
-      | __isEmptyType (Proxy :: Proxy (sub (Resolver SUBSCRIPTION e m))) = Nothing
-      | otherwise = Just (channelResolver subscriptionResolver)
diff --git a/src/Data/Morpheus/Server/Deriving/Named/Encode.hs b/src/Data/Morpheus/Server/Deriving/Named/Encode.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Named/Encode.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Named.Encode
-  ( deriveNamedModel,
-    EncodeNamedConstraints,
-  )
-where
-
-import Data.Morpheus.App.Internal.Resolving
-  ( NamedResolver (..),
-    Resolver,
-    RootResolverValue (..),
-  )
-import Data.Morpheus.NamedResolvers (NamedResolverT (..))
-import Data.Morpheus.Server.Deriving.Named.EncodeType
-  ( EncodeTypeConstraint,
-    deriveResolver,
-  )
-import Data.Morpheus.Server.Deriving.Utils.GTraversable
-  ( traverseTypes,
-  )
-import Data.Morpheus.Types
-  ( NamedResolvers (..),
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( QUERY,
-  )
-import qualified GHC.Exts as HM
-import Relude
-
-type EncodeNamedConstraints e m query mut sub =
-  (EncodeTypeConstraint (Resolver QUERY e m) query)
-
-deriveNamedModel ::
-  forall e m query mut sub.
-  (Monad m, EncodeNamedConstraints e m query mut sub) =>
-  NamedResolvers m e query mut sub ->
-  RootResolverValue e m
-deriveNamedModel NamedResolvers =
-  NamedResolversValue $
-    HM.fromList $
-      map (\x -> (resolverName x, x)) $
-        join $
-          toList $
-            traverseTypes deriveResolver (Proxy @(query (NamedResolverT (Resolver QUERY e m))))
diff --git a/src/Data/Morpheus/Server/Deriving/Named/EncodeType.hs b/src/Data/Morpheus/Server/Deriving/Named/EncodeType.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Named/EncodeType.hs
+++ /dev/null
@@ -1,107 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Named.EncodeType
-  ( deriveResolver,
-    EncodeTypeConstraint,
-    DeriveNamedResolver (..),
-  )
-where
-
-import Data.Morpheus.App.Internal.Resolving
-  ( LiftOperation,
-    NamedResolver (..),
-    Resolver,
-    ResolverState,
-    liftResolverState,
-  )
-import Data.Morpheus.Kind
-  ( CUSTOM,
-    DerivingKind,
-    SCALAR,
-    TYPE,
-    WRAPPER,
-  )
-import Data.Morpheus.NamedResolvers (NamedResolverT (..), ResolveNamed (Dep, resolveNamed))
-import Data.Morpheus.Server.Deriving.Decode
-  ( Decode,
-    decode,
-  )
-import Data.Morpheus.Server.Deriving.Named.EncodeValue
-  ( EncodeFieldKind,
-    FieldConstraint,
-    encodeResolverValue,
-    getTypeName,
-  )
-import Data.Morpheus.Server.Deriving.Utils.GTraversable
-import Data.Morpheus.Server.Deriving.Utils.Kinded (KindedProxy (KindedProxy))
-import Data.Morpheus.Server.Types.GQLType
-  ( GQLType,
-    KIND,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( ValidValue,
-  )
-import Relude
-
-deriveResolver :: Mappable (DeriveNamedResolver m) [NamedResolver m] KindedProxy
-deriveResolver = Mappable deriveNamedResolver
-
-type EncodeTypeConstraint m a =
-  ( GFmap
-      (ScanConstraint (DeriveNamedResolver m))
-      (KIND (a (NamedResolverT m)))
-      (a (NamedResolverT m)),
-    DeriveNamedResolver
-      m
-      (KIND (a (NamedResolverT m)))
-      (a (NamedResolverT m)),
-    GQLType (a (NamedResolverT m))
-  )
-
-class DeriveNamedResolver (m :: Type -> Type) (k :: DerivingKind) a where
-  deriveNamedResolver :: f k a -> [NamedResolver m]
-
-instance DeriveNamedResolver m SCALAR a where
-  deriveNamedResolver _ = []
-
-instance
-  ( Monad m,
-    LiftOperation o,
-    Generic a,
-    GQLType a,
-    EncodeFieldKind (KIND a) (Resolver o e m) a,
-    Decode (Dep a),
-    ResolveNamed (Resolver o e m) a,
-    FieldConstraint (Resolver o e m) a
-  ) =>
-  DeriveNamedResolver (Resolver o e m) TYPE (a :: Type)
-  where
-  deriveNamedResolver _ =
-    [ NamedResolver
-        { resolverName = getTypeName (Proxy @a),
-          resolver = resolve >=> encodeResolverValue
-        }
-    ]
-    where
-      resolve :: ValidValue -> Resolver o e m a
-      resolve x = liftResolverState (decode x :: ResolverState (Dep a)) >>= resolveNamed
-
-instance DeriveNamedResolver m (KIND a) a => DeriveNamedResolver m CUSTOM (NamedResolverT m a) where
-  deriveNamedResolver _ = deriveNamedResolver (KindedProxy :: KindedProxy (KIND a) a)
-
-instance DeriveNamedResolver m (KIND a) a => DeriveNamedResolver m CUSTOM (input -> a) where
-  deriveNamedResolver _ = deriveNamedResolver (KindedProxy :: KindedProxy (KIND a) a)
-
-instance DeriveNamedResolver m (KIND a) a => DeriveNamedResolver m WRAPPER (f a) where
-  deriveNamedResolver _ = deriveNamedResolver (KindedProxy :: KindedProxy (KIND a) a)
diff --git a/src/Data/Morpheus/Server/Deriving/Named/EncodeValue.hs b/src/Data/Morpheus/Server/Deriving/Named/EncodeValue.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Named/EncodeValue.hs
+++ /dev/null
@@ -1,203 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Named.EncodeValue
-  ( EncodeFieldKind,
-    Encode,
-    getTypeName,
-    encodeResolverValue,
-    FieldConstraint,
-  )
-where
-
-import Control.Monad.Except (MonadError (..))
-import Data.Aeson (ToJSON (..))
-import Data.Morpheus.App.Internal.Resolving
-  ( LiftOperation,
-    NamedResolverRef (..),
-    NamedResolverResult (..),
-    ObjectTypeResolver (..),
-    Resolver,
-    ResolverValue (..),
-    getArguments,
-    liftResolverState,
-    mkList,
-    mkNull,
-  )
-import Data.Morpheus.Kind
-  ( CUSTOM,
-    DerivingKind,
-    SCALAR,
-    TYPE,
-    WRAPPER,
-  )
-import Data.Morpheus.NamedResolvers
-  ( NamedResolverT (..),
-    ResolveNamed (..),
-  )
-import Data.Morpheus.Server.Deriving.Decode
-  ( Decode,
-    decodeArguments,
-  )
-import Data.Morpheus.Server.Deriving.Encode
-  ( ContextValue (..),
-  )
-import Data.Morpheus.Server.Deriving.Utils
-  ( ConsRep (..),
-    DataType (..),
-    FieldRep (..),
-    toFieldRes,
-  )
-import Data.Morpheus.Server.Deriving.Utils.DeriveGType
-  ( DeriveValueOptions (..),
-    DeriveWith,
-    deriveValue,
-  )
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-import Data.Morpheus.Server.Types.GQLType
-  ( GQLType (typeOptions, __type),
-    KIND,
-    deriveTypename,
-    __typeData,
-  )
-import Data.Morpheus.Server.Types.Internal
-  ( TypeData (gqlTypeName),
-  )
-import Data.Morpheus.Types (defaultTypeOptions)
-import Data.Morpheus.Types.GQLScalar
-  ( EncodeScalar (..),
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( GQLError,
-    OUT,
-    TypeCategory (OUT),
-    TypeName,
-    internal,
-    replaceValue,
-  )
-import qualified GHC.Exts as HM
-import GHC.Generics
-  ( Generic (..),
-  )
-import Relude
-
-encodeResolverValue :: (MonadError GQLError m, FieldConstraint m a) => a -> m (NamedResolverResult m)
-encodeResolverValue = convertNamedNode . getFieldValues
-
-type FieldConstraint m a =
-  ( GQLType a,
-    Generic a,
-    DeriveWith (GValueMapConstraint m) (m (ResolverValue m)) (Rep a)
-  )
-
-class Encode (m :: Type -> Type) res where
-  encodeField :: res -> m (ResolverValue m)
-
-instance (EncodeFieldKind (KIND a) m a) => Encode m a where
-  encodeField resolver = encodeFieldKind (ContextValue resolver :: ContextValue (KIND a) a)
-
-class EncodeFieldKind (k :: DerivingKind) (m :: Type -> Type) (a :: Type) where
-  encodeFieldKind :: ContextValue k a -> m (ResolverValue m)
-
-instance (EncodeScalar a, Monad m) => EncodeFieldKind SCALAR m a where
-  encodeFieldKind = pure . ResScalar . encodeScalar . unContextValue
-
-instance (FieldConstraint m a, MonadError GQLError m) => EncodeFieldKind TYPE m a where
-  encodeFieldKind (ContextValue _) = throwError (internal "types are resolved by Refs")
-
-instance (GQLType a, Applicative m, EncodeFieldKind (KIND a) m a) => EncodeFieldKind WRAPPER m [a] where
-  encodeFieldKind = fmap ResList . traverse encodeField . unContextValue
-
-instance (GQLType a, EncodeFieldKind (KIND a) m a, Applicative m) => EncodeFieldKind WRAPPER m (Maybe a) where
-  encodeFieldKind (ContextValue (Just x)) = encodeField x
-  encodeFieldKind (ContextValue Nothing) = pure mkNull
-
-instance
-  ( Monad m,
-    GQLType a,
-    EncodeFieldKind (KIND a) m a,
-    ToJSON (Dep a)
-  ) =>
-  EncodeFieldKind CUSTOM m (NamedResolverT m a)
-  where
-  encodeFieldKind = encodeRef . unContextValue
-    where
-      name :: TypeName
-      name = getTypeName (Proxy @a)
-      encodeRef :: Monad m => NamedResolverT m a -> m (ResolverValue m)
-      encodeRef (Ref x) = pure $ ResRef (NamedResolverRef name . replaceValue . toJSON <$> x)
-      encodeRef (Value value) = value >>= encodeField
-      encodeRef (Refs refs) = mkList . map (ResRef . pure . NamedResolverRef name . replaceValue . toJSON) <$> refs
-
-instance
-  ( Decode a,
-    Generic a,
-    Monad m,
-    Encode (Resolver o e m) b,
-    LiftOperation o
-  ) =>
-  EncodeFieldKind CUSTOM (Resolver o e m) (a -> b)
-  where
-  encodeFieldKind (ContextValue f) =
-    getArguments
-      >>= liftResolverState . decodeArguments
-      >>= encodeField . f
-
-class (Encode m a, GQLType a) => GValueMapConstraint m a
-
-instance (Encode m a, GQLType a) => GValueMapConstraint m a
-
-getFieldValues :: forall m a. FieldConstraint m a => a -> DataType (m (ResolverValue m))
-getFieldValues =
-  deriveValue
-    ( DeriveValueOptions
-        { __valueApply = encodeField,
-          __valueTypeName = deriveTypename (KindedProxy :: KindedProxy OUT a),
-          __valueGQLOptions = typeOptions (Proxy @a) defaultTypeOptions,
-          __valueGetType = __typeData . kinded (Proxy @OUT)
-        } ::
-        DeriveValueOptions OUT (GValueMapConstraint m) (m (ResolverValue m))
-    )
-
-convertNamedNode ::
-  MonadError GQLError m =>
-  DataType (m (ResolverValue m)) ->
-  m (NamedResolverResult m)
-convertNamedNode
-  DataType
-    { tyIsUnion,
-      tyCons = ConsRep {consFields, consName}
-    }
-    | null consFields = pure $ NamedEnumResolver consName
-    | tyIsUnion = deriveUnion consFields
-    | otherwise =
-        pure $
-          NamedObjectResolver
-            ObjectTypeResolver
-              { objectFields = HM.fromList (toFieldRes <$> consFields)
-              }
-
-deriveUnion :: (MonadError GQLError m) => [FieldRep (m (ResolverValue m))] -> m (NamedResolverResult m)
-deriveUnion [FieldRep {..}] =
-  NamedUnionResolver <$> (fieldValue >>= getRef)
-deriveUnion _ = throwError "only union references are supported!"
-
-getRef :: MonadError GQLError m => ResolverValue m -> m NamedResolverRef
-getRef (ResRef x) = x
-getRef _ = throwError "only resolver references are supported!"
-
-getTypeName :: GQLType a => f a -> TypeName
-getTypeName proxy = gqlTypeName $ __type proxy OUT
diff --git a/src/Data/Morpheus/Server/Deriving/Schema.hs b/src/Data/Morpheus/Server/Deriving/Schema.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Schema.hs
+++ /dev/null
@@ -1,295 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# OPTIONS_GHC -Wno-orphans #-}
-
-module Data.Morpheus.Server.Deriving.Schema
-  ( compileTimeSchemaValidation,
-    DeriveType,
-    deriveSchema,
-    SchemaConstraints,
-    SchemaT,
-  )
-where
-
-import Control.Monad.Except (throwError)
-import Data.Morpheus.App.Internal.Resolving
-  ( Resolver,
-  )
-import Data.Morpheus.CodeGen.Internal.AST
-import Data.Morpheus.Core (defaultConfig, validateSchema)
-import Data.Morpheus.Internal.Ext
-import Data.Morpheus.Internal.Utils (singleton)
-import Data.Morpheus.Kind
-  ( CUSTOM,
-    DerivingKind,
-    SCALAR,
-    TYPE,
-    WRAPPER,
-  )
-import Data.Morpheus.Server.Deriving.Schema.Internal
-  ( KindedType (..),
-    TyContentM,
-    fromSchema,
-  )
-import Data.Morpheus.Server.Deriving.Schema.Object
-  ( asObjectType,
-    withObject,
-  )
-import Data.Morpheus.Server.Deriving.Schema.TypeContent
-import Data.Morpheus.Server.Deriving.Utils
-  ( DeriveTypeOptions (..),
-    DeriveWith,
-    symbolName,
-  )
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-  ( CategoryValue (..),
-    KindedProxy (..),
-    inputType,
-    kinded,
-    outputType,
-    setKind,
-  )
-import Data.Morpheus.Server.Types.GQLType
-  ( DeriveArguments (..),
-    GQLType (..),
-    deriveTypename,
-    __typeData,
-  )
-import Data.Morpheus.Server.Types.Internal (TypeData (..), defaultTypeOptions)
-import Data.Morpheus.Server.Types.SchemaT
-  ( SchemaT,
-    extendImplements,
-    toSchema,
-    withInput,
-  )
-import Data.Morpheus.Server.Types.Types
-  ( Arg (..),
-    TypeGuard,
-  )
-import Data.Morpheus.Types.GQLScalar
-  ( DecodeScalar (..),
-    scalarValidator,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( FieldContent (..),
-    FieldsDefinition,
-    IN,
-    LEAF,
-    MUTATION,
-    OBJECT,
-    OUT,
-    QUERY,
-    SUBSCRIPTION,
-    Schema (..),
-    TRUE,
-    TypeCategory,
-    TypeContent (..),
-    TypeDefinition (..),
-    UnionMember (memberName),
-    fieldsToArguments,
-    mkField,
-  )
-import GHC.Generics
-import GHC.TypeLits
-import Language.Haskell.TH (Exp, Q)
-import Relude
-
-type SchemaConstraints event (m :: Type -> Type) query mutation subscription =
-  ( DeriveTypeConstraintOpt OUT (query (Resolver QUERY event m)),
-    DeriveTypeConstraintOpt OUT (mutation (Resolver MUTATION event m)),
-    DeriveTypeConstraintOpt OUT (subscription (Resolver SUBSCRIPTION event m))
-  )
-
-type DeriveTypeConstraintOpt kind a =
-  ( GQLType a,
-    DeriveWith (DeriveWithConstraint kind) (TyContentM kind) (Rep a)
-  )
-
--- | normal morpheus server validates schema at runtime (after the schema derivation).
---   this method allows you to validate it at compile time.
-compileTimeSchemaValidation ::
-  (SchemaConstraints event m qu mu su) =>
-  proxy (root m event qu mu su) ->
-  Q Exp
-compileTimeSchemaValidation =
-  fromSchema . (deriveSchema >=> validateSchema True defaultConfig)
-
-deriveSchema ::
-  forall
-    root
-    proxy
-    m
-    e
-    query
-    mut
-    subs.
-  ( SchemaConstraints e m query mut subs
-  ) =>
-  proxy (root m e query mut subs) ->
-  GQLResult (Schema CONST)
-deriveSchema _ = toSchema schemaT
-  where
-    schemaT ::
-      SchemaT
-        OUT
-        ( TypeDefinition OBJECT CONST,
-          Maybe (TypeDefinition OBJECT CONST),
-          Maybe (TypeDefinition OBJECT CONST)
-        )
-    schemaT =
-      (,,)
-        <$> deriveRoot (Proxy @(query (Resolver QUERY e m)))
-        <*> deriveMaybeRoot (Proxy @(mut (Resolver MUTATION e m)))
-        <*> deriveMaybeRoot (Proxy @(subs (Resolver SUBSCRIPTION e m)))
-
--- |  Generates internal GraphQL Schema for query validation and introspection rendering
-class DeriveType (kind :: TypeCategory) (a :: Type) where
-  deriveType :: f a -> SchemaT kind ()
-  deriveContent :: f a -> TyContentM kind
-
-instance (GQLType a, DeriveKindedType cat (KIND a) a) => DeriveType cat a where
-  deriveType _ = deriveKindedType (KindedProxy :: KindedProxy (KIND a) a)
-  deriveContent _ = deriveKindedContent (KindedProxy :: KindedProxy (KIND a) a)
-
--- | DeriveType With specific Kind: 'kind': object, scalar, enum ...
-class DeriveKindedType (cat :: TypeCategory) (kind :: DerivingKind) a where
-  deriveKindedType :: kinded kind a -> SchemaT cat ()
-  deriveKindedContent :: kinded kind a -> TyContentM cat
-  deriveKindedContent _ = pure Nothing
-
-type DeriveTypeConstraint kind a =
-  ( DeriveTypeConstraintOpt kind a,
-    CategoryValue kind
-  )
-
-instance (GQLType a, DeriveType cat a) => DeriveKindedType cat WRAPPER (f a) where
-  deriveKindedType _ = deriveType (KindedProxy :: KindedProxy cat a)
-
-instance (GQLType a, DecodeScalar a) => DeriveKindedType cat SCALAR a where
-  deriveKindedType = insertTypeContent deriveScalarContent . setKind (Proxy @LEAF)
-
-instance DeriveTypeConstraint OUT a => DeriveKindedType OUT TYPE a where
-  deriveKindedType = deriveOutputType
-
-instance DeriveTypeConstraint IN a => DeriveKindedType IN TYPE a where
-  deriveKindedType = deriveInputType
-
-instance DeriveType cat a => DeriveKindedType cat CUSTOM (Resolver o e m a) where
-  deriveKindedType _ = deriveType (Proxy @a)
-
-instance DeriveType cat [(k, v)] => DeriveKindedType cat CUSTOM (Map k v) where
-  deriveKindedType _ = deriveType (Proxy @[(k, v)])
-
-instance
-  ( DeriveTypeConstraint OUT interface,
-    DeriveTypeConstraint OUT union
-  ) =>
-  DeriveKindedType OUT CUSTOM (TypeGuard interface union)
-  where
-  deriveKindedType _ = do
-    insertTypeContent deriveInterfaceContent interfaceProxy
-    content <- deriveTypeContent (OutputType :: KindedType OUT union)
-    unionNames <- getUnionNames content
-    extendImplements interfaceName unionNames
-    where
-      interfaceName :: TypeName
-      interfaceName = deriveTypename interfaceProxy
-      interfaceProxy :: KindedProxy OUT interface
-      interfaceProxy = KindedProxy
-      unionProxy :: KindedProxy OUT union
-      unionProxy = KindedProxy
-      getUnionNames :: TypeContent TRUE OUT CONST -> SchemaT OUT [TypeName]
-      getUnionNames DataUnion {unionMembers} = pure $ toList $ memberName <$> unionMembers
-      getUnionNames DataObject {} = pure [deriveTypename unionProxy]
-      getUnionNames _ = throwError "guarded type must be an union or object"
-
-instance
-  ( GQLType b,
-    DeriveKindedType OUT (KIND b) b,
-    DeriveArguments (KIND a) a
-  ) =>
-  DeriveKindedType OUT CUSTOM (a -> b)
-  where
-  deriveKindedContent _ = do
-    a <- deriveArgumentsDefinition (KindedProxy :: KindedProxy (KIND a) a)
-    b <- deriveKindedContent (KindedProxy :: KindedProxy (KIND b) b)
-    case b of
-      Just (FieldArgs x) -> Just . FieldArgs <$> (a <:> x)
-      Nothing -> pure $ Just (FieldArgs a)
-  deriveKindedType _ = deriveType (outputType $ Proxy @b)
-
-deriveScalarContent :: (DecodeScalar a) => f k a -> SchemaT cat (TypeContent TRUE LEAF CONST)
-deriveScalarContent = pure . DataScalar . scalarValidator
-
-deriveInterfaceContent :: DeriveTypeConstraint OUT a => f a -> SchemaT OUT (TypeContent TRUE OUT CONST)
-deriveInterfaceContent = fmap DataInterface . deriveFields . outputType
-
-instance DeriveTypeConstraint IN a => DeriveArguments TYPE a where
-  deriveArgumentsDefinition = withInput . fmap fieldsToArguments . deriveFields . inputType
-
-instance (KnownSymbol name, DeriveType IN a, GQLType a) => DeriveArguments CUSTOM (Arg name a) where
-  deriveArgumentsDefinition _ = do
-    withInput (deriveType proxy)
-    pure $ fieldsToArguments $ singleton argName $ mkField Nothing argName argTypeRef
-    where
-      proxy :: KindedProxy IN a
-      proxy = KindedProxy
-      argName = symbolName (Proxy @name)
-      argTypeRef = TypeRef {typeConName = gqlTypeName, typeWrappers = gqlWrappers}
-      TypeData {gqlTypeName, gqlWrappers} = __typeData proxy
-
-deriveFields :: DeriveTypeConstraint kind a => KindedType kind a -> SchemaT kind (FieldsDefinition kind CONST)
-deriveFields kindedType = deriveTypeContent kindedType >>= withObject kindedType
-
-deriveInputType :: DeriveTypeConstraint IN a => f a -> SchemaT IN ()
-deriveInputType = insertTypeContent deriveTypeContent . inputType
-
-deriveOutputType :: DeriveTypeConstraint OUT a => f a -> SchemaT OUT ()
-deriveOutputType = insertTypeContent deriveTypeContent . outputType
-
-deriveRoot :: DeriveTypeConstraint OUT a => f a -> SchemaT OUT (TypeDefinition OBJECT CONST)
-deriveRoot = asObjectType (deriveFields . outputType)
-
-deriveMaybeRoot :: DeriveTypeConstraint OUT a => f a -> SchemaT OUT (Maybe (TypeDefinition OBJECT CONST))
-deriveMaybeRoot proxy
-  | __isEmptyType proxy =
-      pure Nothing
-  | otherwise = Just <$> asObjectType (deriveFields . outputType) proxy
-
-deriveFieldContent :: forall f kind a. (DeriveType kind a) => f a -> TyContentM kind
-deriveFieldContent _ = deriveType kindedProxy *> deriveContent kindedProxy
-  where
-    kindedProxy :: KindedProxy kind a
-    kindedProxy = KindedProxy
-
-class (GQLType a, DeriveType k a) => DeriveWithConstraint k a
-
-instance (GQLType a, DeriveType k a) => DeriveWithConstraint k a
-
-deriveTypeContent ::
-  forall kind a.
-  DeriveTypeConstraint kind a =>
-  KindedType kind a ->
-  SchemaT kind (TypeContent TRUE kind CONST)
-deriveTypeContent =
-  deriveTypeContentWith
-    ( DeriveTypeDefinitionOptions
-        { __typeGQLOptions = typeOptions (Proxy @a) defaultTypeOptions,
-          __typeGetType = __typeData . kinded (Proxy @kind),
-          __typeApply = deriveFieldContent
-        } ::
-        DeriveTypeOptions kind (DeriveWithConstraint kind) (TyContentM kind)
-    )
diff --git a/src/Data/Morpheus/Server/Deriving/Schema/Directive.hs b/src/Data/Morpheus/Server/Deriving/Schema/Directive.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Schema/Directive.hs
+++ /dev/null
@@ -1,138 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Schema.Directive
-  ( deriveFieldDirectives,
-    deriveTypeDirectives,
-    deriveEnumDirectives,
-  )
-where
-
-import Control.Monad.Except (throwError)
-import qualified Data.HashMap.Lazy as HM
-import qualified Data.Map as M
-import Data.Morpheus.CodeGen.Internal.AST (CONST, TypeName)
-import Data.Morpheus.Internal.Ext (resultOr, unsafeFromList)
-import Data.Morpheus.Internal.Utils (Empty (..), (<:>))
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-  ( KindedProxy (..),
-  )
-import Data.Morpheus.Server.Types.Directives
-  ( GQLDirective (..),
-    ToLocations,
-    getLocations,
-  )
-import Data.Morpheus.Server.Types.GQLType
-  ( DeriveArguments (..),
-    DirectiveUsage (..),
-    DirectiveUsages (..),
-    GQLType (..),
-    deriveFingerprint,
-    deriveTypename,
-    encodeArguments,
-  )
-import Data.Morpheus.Server.Types.SchemaT
-  ( SchemaT,
-    insertDirectiveDefinition,
-    outToAny,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( Directive (..),
-    DirectiveDefinition (..),
-    Directives,
-    FieldName,
-    IN,
-    Position (Position),
-    unpackName,
-  )
-import GHC.Generics ()
-import GHC.TypeLits ()
-import Relude hiding (empty)
-
-type DirectiveDefinitionConstraint a =
-  ( GQLDirective a,
-    GQLType a,
-    DeriveArguments (KIND a) a,
-    ToLocations (DIRECTIVE_LOCATIONS a)
-  )
-
-deriveDirectiveDefinition ::
-  forall a b kind.
-  (DirectiveDefinitionConstraint a) =>
-  a ->
-  b ->
-  SchemaT kind (DirectiveDefinition CONST)
-deriveDirectiveDefinition _ _ = do
-  directiveDefinitionArgs <- outToAny (deriveArgumentsDefinition (KindedProxy :: KindedProxy (KIND a) a))
-  pure
-    ( DirectiveDefinition
-        { directiveDefinitionName = deriveDirectiveName proxy,
-          directiveDefinitionDescription = description proxy,
-          directiveDefinitionArgs,
-          directiveDefinitionLocations = getLocations proxy
-        }
-    )
-  where
-    proxy = Proxy @a
-
-deriveTypeDirectives :: forall c f a. GQLType a => f a -> SchemaT c (Directives CONST)
-deriveTypeDirectives proxy = deriveDirectiveUsages (typeDirectives $ directives proxy)
-
-deriveDirectiveUsages :: [DirectiveUsage] -> SchemaT c (Directives CONST)
-deriveDirectiveUsages = fmap unsafeFromList . traverse toDirectiveTuple
-
-deriveDirectiveName :: forall f a. GQLType a => f a -> FieldName
-deriveDirectiveName _ = coerce $ deriveTypename (KindedProxy :: KindedProxy IN a)
-
-toDirectiveTuple :: DirectiveUsage -> SchemaT c (FieldName, Directive CONST)
-toDirectiveTuple (DirectiveUsage x) = do
-  insertDirective (deriveDirectiveDefinition x) x
-  let directiveName = deriveDirectiveName (Identity x)
-  directiveArgs <- resultOr (const $ throwError "TODO: fix me") pure (encodeArguments x)
-  pure
-    ( directiveName,
-      Directive
-        { directivePosition = Position 0 0,
-          directiveName,
-          directiveArgs
-        }
-    )
-
-insertDirective ::
-  forall a c.
-  (GQLType a) =>
-  (KindedProxy IN a -> SchemaT c (DirectiveDefinition CONST)) ->
-  a ->
-  SchemaT c ()
-insertDirective f _ = insertDirectiveDefinition (deriveFingerprint proxy) f proxy
-  where
-    proxy = KindedProxy :: KindedProxy IN a
-
-getDir :: (Ord k, Empty a) => k -> Map k a -> a
-getDir name xs = fromMaybe empty $ name `M.lookup` xs
-
-getDirHM :: (Ord k, Hashable k, Empty a) => k -> HashMap k a -> a
-getDirHM name xs = fromMaybe empty $ name `HM.lookup` xs
-
-deriveFieldDirectives :: GQLType a => f a -> FieldName -> SchemaT c (Directives CONST)
-deriveFieldDirectives proxy name = do
-  dirs <- deriveDirectiveUsages $ getDirHM name $ fieldDirectives $ directives proxy
-  getDir (unpackName name) (getDirectives proxy) <:> dirs
-
-deriveEnumDirectives :: GQLType a => f a -> TypeName -> SchemaT c (Directives CONST)
-deriveEnumDirectives proxy name = do
-  dirs <- deriveDirectiveUsages $ getDirHM name $ enumValueDirectives $ directives proxy
-  getDir (unpackName name) (getDirectives proxy) <:> dirs
diff --git a/src/Data/Morpheus/Server/Deriving/Schema/Enum.hs b/src/Data/Morpheus/Server/Deriving/Schema/Enum.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Schema/Enum.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE RecordWildCards #-}
-
-module Data.Morpheus.Server.Deriving.Schema.Enum
-  ( buildEnumTypeContent,
-    defineEnumUnit,
-  )
-where
-
-import Data.Morpheus.Server.Deriving.Schema.Directive (deriveEnumDirectives)
-import Data.Morpheus.Server.Deriving.Schema.Internal
-  ( lookupDescription,
-  )
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-  ( KindedType (..),
-  )
-import Data.Morpheus.Server.Types.GQLType
-  ( GQLType,
-  )
-import Data.Morpheus.Server.Types.SchemaT
-  ( SchemaT,
-    insertType,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( CONST,
-    DataEnumValue (..),
-    LEAF,
-    TRUE,
-    TypeContent (..),
-    TypeDefinition,
-    TypeName,
-    mkEnumContent,
-    mkType,
-    unitTypeName,
-    unpackName,
-  )
-
-buildEnumTypeContent :: GQLType a => KindedType kind a -> [TypeName] -> SchemaT c (TypeContent TRUE kind CONST)
-buildEnumTypeContent p@InputType enumCons = DataEnum <$> traverse (mkEnumValue p) enumCons
-buildEnumTypeContent p@OutputType enumCons = DataEnum <$> traverse (mkEnumValue p) enumCons
-
-mkEnumValue :: GQLType a => f a -> TypeName -> SchemaT c (DataEnumValue CONST)
-mkEnumValue proxy enumName = do
-  enumDirectives <- deriveEnumDirectives proxy enumName
-  pure
-    DataEnumValue
-      { enumName,
-        enumDescription = lookupDescription proxy (unpackName enumName),
-        ..
-      }
-
-defineEnumUnit :: SchemaT cat ()
-defineEnumUnit =
-  insertType
-    ( mkType unitTypeName (mkEnumContent [unitTypeName]) ::
-        TypeDefinition LEAF CONST
-    )
diff --git a/src/Data/Morpheus/Server/Deriving/Schema/Internal.hs b/src/Data/Morpheus/Server/Deriving/Schema/Internal.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Schema/Internal.hs
+++ /dev/null
@@ -1,75 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DefaultSignatures #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# LANGUAGE TemplateHaskellQuotes #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Schema.Internal
-  ( KindedType (..),
-    TyContentM,
-    TyContent,
-    fromSchema,
-    lookupDescription,
-    lookupFieldContent,
-  )
-where
-
--- MORPHEUS
-
-import qualified Data.Map as M
-import Data.Morpheus.Internal.Ext
-  ( GQLResult,
-    Result (Failure, Success, errors),
-  )
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-  ( KindedType (..),
-  )
-import Data.Morpheus.Server.Types.GQLType
-  ( GQLType (..),
-  )
-import Data.Morpheus.Server.Types.SchemaT
-  ( SchemaT,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( CONST,
-    Description,
-    FieldContent (..),
-    Schema (..),
-    TRUE,
-    VALID,
-  )
-import Language.Haskell.TH (Exp, Q)
-import Relude hiding (empty)
-
-lookupDescription :: GQLType a => f a -> Text -> Maybe Description
-lookupDescription proxy name = name `M.lookup` getDescriptions proxy
-
-lookupFieldContent ::
-  GQLType a =>
-  KindedType kind a ->
-  Text ->
-  Maybe (FieldContent TRUE kind CONST)
-lookupFieldContent proxy@InputType key = DefaultInputValue <$> key `M.lookup` defaultValues proxy
-lookupFieldContent OutputType _ = Nothing
-
-fromSchema :: GQLResult (Schema VALID) -> Q Exp
-fromSchema Success {} = [|()|]
-fromSchema Failure {errors} = fail (show errors)
-
-type TyContentM kind = SchemaT kind (TyContent kind)
-
-type TyContent kind = Maybe (FieldContent TRUE kind CONST)
diff --git a/src/Data/Morpheus/Server/Deriving/Schema/Object.hs b/src/Data/Morpheus/Server/Deriving/Schema/Object.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Schema/Object.hs
+++ /dev/null
@@ -1,145 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE KindSignatures #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE RecordWildCards #-}
-
-module Data.Morpheus.Server.Deriving.Schema.Object
-  ( asObjectType,
-    withObject,
-    buildObjectTypeContent,
-    defineObjectType,
-  )
-where
-
-import Control.Monad.Except (throwError)
-import Data.Morpheus.Internal.Utils
-  ( empty,
-    singleton,
-  )
-import Data.Morpheus.Server.Deriving.Schema.Directive (deriveFieldDirectives)
-import Data.Morpheus.Server.Deriving.Schema.Enum (defineEnumUnit)
-import Data.Morpheus.Server.Deriving.Schema.Internal
-  ( lookupDescription,
-    lookupFieldContent,
-  )
-import Data.Morpheus.Server.Deriving.Utils
-  ( ConsRep (..),
-    FieldRep (..),
-  )
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-  ( CategoryValue (..),
-    KindedType (..),
-    outputType,
-  )
-import Data.Morpheus.Server.Types.GQLType
-  ( GQLType,
-    __typeData,
-  )
-import Data.Morpheus.Server.Types.Internal
-  ( TypeData (..),
-  )
-import Data.Morpheus.Server.Types.SchemaT
-  ( SchemaT,
-    insertType,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( CONST,
-    FieldContent (..),
-    FieldDefinition (..),
-    FieldsDefinition,
-    OBJECT,
-    OUT,
-    TRUE,
-    TypeCategory,
-    TypeContent (..),
-    TypeDefinition,
-    mkField,
-    mkType,
-    mkTypeRef,
-    msg,
-    unitFieldName,
-    unitTypeName,
-    unpackName,
-    unsafeFromFields,
-  )
-import Relude hiding (empty)
-
-defineObjectType ::
-  KindedType kind a ->
-  ConsRep (Maybe (FieldContent TRUE kind CONST)) ->
-  SchemaT cat ()
-defineObjectType proxy ConsRep {consName, consFields} = insertType . mkType consName . mkObjectTypeContent proxy =<< fields
-  where
-    fields
-      | null consFields = defineEnumUnit $> singleton unitFieldName mkFieldUnit
-      | otherwise = pure $ unsafeFromFields $ map repToFieldDefinition consFields
-
-mkFieldUnit :: FieldDefinition cat s
-mkFieldUnit = mkField Nothing unitFieldName (mkTypeRef unitTypeName)
-
-buildObjectTypeContent ::
-  GQLType a =>
-  KindedType cat a ->
-  [FieldRep (Maybe (FieldContent TRUE cat CONST))] ->
-  SchemaT c (TypeContent TRUE cat CONST)
-buildObjectTypeContent scope consFields = do
-  xs <- traverse (setGQLTypeProps scope . repToFieldDefinition) consFields
-  pure $ mkObjectTypeContent scope $ unsafeFromFields xs
-
-repToFieldDefinition ::
-  FieldRep (Maybe (FieldContent TRUE kind CONST)) ->
-  FieldDefinition kind CONST
-repToFieldDefinition
-  FieldRep
-    { fieldSelector = fieldName,
-      fieldTypeRef = fieldType,
-      fieldValue
-    } =
-    FieldDefinition
-      { fieldDescription = mempty,
-        fieldDirectives = empty,
-        fieldContent = fieldValue,
-        ..
-      }
-
-asObjectType ::
-  (GQLType a) =>
-  (f a -> SchemaT kind (FieldsDefinition OUT CONST)) ->
-  f a ->
-  SchemaT kind (TypeDefinition OBJECT CONST)
-asObjectType f proxy =
-  mkType
-    (gqlTypeName (__typeData (outputType proxy)))
-    . DataObject []
-    <$> f proxy
-
-withObject :: (GQLType a, CategoryValue c) => KindedType c a -> TypeContent TRUE any s -> SchemaT c (FieldsDefinition c s)
-withObject InputType DataInputObject {inputObjectFields} = pure inputObjectFields
-withObject OutputType DataObject {objectFields} = pure objectFields
-withObject x _ = failureOnlyObject x
-
-failureOnlyObject :: forall (c :: TypeCategory) a b. (GQLType a, CategoryValue c) => KindedType c a -> SchemaT c b
-failureOnlyObject proxy =
-  throwError $
-    msg (gqlTypeName $ __typeData proxy) <> " should have only one nonempty constructor"
-
-mkObjectTypeContent :: KindedType kind a -> FieldsDefinition kind CONST -> TypeContent TRUE kind CONST
-mkObjectTypeContent InputType = DataInputObject
-mkObjectTypeContent OutputType = DataObject []
-
-setGQLTypeProps :: GQLType a => KindedType kind a -> FieldDefinition kind CONST -> SchemaT c (FieldDefinition kind CONST)
-setGQLTypeProps proxy FieldDefinition {..} = do
-  dirs <- deriveFieldDirectives proxy fieldName
-  pure
-    FieldDefinition
-      { fieldName,
-        fieldDescription = lookupDescription proxy key,
-        fieldContent = lookupFieldContent proxy key <|> fieldContent,
-        fieldDirectives = dirs,
-        ..
-      }
-  where
-    key = unpackName fieldName
diff --git a/src/Data/Morpheus/Server/Deriving/Schema/TypeContent.hs b/src/Data/Morpheus/Server/Deriving/Schema/TypeContent.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Schema/TypeContent.hs
+++ /dev/null
@@ -1,89 +0,0 @@
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE RankNTypes #-}
-
-module Data.Morpheus.Server.Deriving.Schema.TypeContent
-  ( buildTypeContent,
-    insertTypeContent,
-    deriveTypeContentWith,
-  )
-where
-
-import Data.Morpheus.Server.Deriving.Schema.Directive (deriveTypeDirectives)
-import Data.Morpheus.Server.Deriving.Schema.Enum
-  ( buildEnumTypeContent,
-  )
-import Data.Morpheus.Server.Deriving.Schema.Internal
-  ( KindedType (..),
-    TyContent,
-  )
-import Data.Morpheus.Server.Deriving.Schema.Object
-  ( buildObjectTypeContent,
-  )
-import Data.Morpheus.Server.Deriving.Schema.Union (buildUnionTypeContent)
-import Data.Morpheus.Server.Deriving.Utils
-  ( ConsRep (..),
-    DeriveTypeOptions,
-    DeriveWith,
-    deriveTypeWith,
-    isEmptyConstraint,
-    unpackMonad,
-  )
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-  ( CategoryValue (..),
-  )
-import Data.Morpheus.Server.Types.GQLType
-  ( GQLType (..),
-    deriveFingerprint,
-    deriveTypename,
-  )
-import Data.Morpheus.Server.Types.SchemaT
-  ( SchemaT,
-    updateSchema,
-  )
-import Data.Morpheus.Types.Internal.AST
-import GHC.Generics (Rep)
-
-buildTypeContent ::
-  (GQLType a, CategoryValue kind) =>
-  KindedType kind a ->
-  [ConsRep (TyContent kind)] ->
-  SchemaT kind (TypeContent TRUE kind CONST)
-buildTypeContent scope cons | all isEmptyConstraint cons = buildEnumTypeContent scope (consName <$> cons)
-buildTypeContent scope [ConsRep {consFields}] = buildObjectTypeContent scope consFields
-buildTypeContent scope cons = buildUnionTypeContent scope cons
-
-insertTypeContent ::
-  (GQLType a, CategoryValue kind) =>
-  (f kind a -> SchemaT c (TypeContent TRUE kind CONST)) ->
-  f kind a ->
-  SchemaT c ()
-insertTypeContent f proxy =
-  updateSchema
-    (deriveFingerprint proxy)
-    deriveD
-    proxy
-  where
-    deriveD x = do
-      content <- f x
-      dirs <- deriveTypeDirectives proxy
-      pure $
-        TypeDefinition
-          (description proxy)
-          (deriveTypename proxy)
-          dirs
-          content
-
-deriveTypeContentWith ::
-  ( CategoryValue kind,
-    DeriveWith c (SchemaT kind (TyContent kind)) (Rep a),
-    GQLType a
-  ) =>
-  DeriveTypeOptions kind c (SchemaT kind (TyContent kind)) ->
-  KindedType kind a ->
-  SchemaT kind (TypeContent TRUE kind CONST)
-deriveTypeContentWith x kindedProxy =
-  unpackMonad
-    ( deriveTypeWith x kindedProxy
-    )
-    >>= buildTypeContent kindedProxy
diff --git a/src/Data/Morpheus/Server/Deriving/Schema/Union.hs b/src/Data/Morpheus/Server/Deriving/Schema/Union.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Schema/Union.hs
+++ /dev/null
@@ -1,83 +0,0 @@
-{-# LANGUAGE GADTs #-}
-
-module Data.Morpheus.Server.Deriving.Schema.Union
-  ( buildUnionTypeContent,
-  )
-where
-
-import Data.List (partition)
-import Data.Morpheus.Internal.Utils (fromElems)
-import Data.Morpheus.Server.Deriving.Schema.Enum
-  ( defineEnumUnit,
-  )
-import Data.Morpheus.Server.Deriving.Schema.Object
-  ( defineObjectType,
-  )
-import Data.Morpheus.Server.Deriving.Utils
-  ( ConsRep (..),
-    fieldTypeName,
-    isEmptyConstraint,
-    isUnionRef,
-  )
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-  ( CategoryValue,
-    KindedType (..),
-  )
-import Data.Morpheus.Server.Types.GQLType (GQLType, deriveTypename)
-import Data.Morpheus.Server.Types.SchemaT
-  ( SchemaT,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( CONST,
-    FieldContent (..),
-    IN,
-    TRUE,
-    TypeContent (..),
-    TypeName,
-    UnionMember (..),
-    mkNullaryMember,
-    mkUnionMember,
-  )
-import Relude
-
-buildUnionTypeContent ::
-  ( GQLType a,
-    CategoryValue kind
-  ) =>
-  KindedType kind a ->
-  [ConsRep (Maybe (FieldContent TRUE kind CONST))] ->
-  SchemaT c (TypeContent TRUE kind CONST)
-buildUnionTypeContent scope cons = mkUnionType scope unionRef unionCons
-  where
-    unionRef = fieldTypeName <$> concatMap consFields unionRefRep
-    (unionRefRep, unionCons) = partition (isUnionRef (deriveTypename scope)) cons
-
-mkUnionType ::
-  GQLType a =>
-  KindedType kind a ->
-  [TypeName] ->
-  [ConsRep (Maybe (FieldContent TRUE kind CONST))] ->
-  SchemaT c (TypeContent TRUE kind CONST)
-mkUnionType p@InputType unionRef unionCons = DataInputUnion <$> (typeMembers >>= fromElems)
-  where
-    (nullaryCons, cons) = partition isEmptyConstraint unionCons
-    nullaryMembers :: [UnionMember IN CONST]
-    nullaryMembers = mkNullaryMember . consName <$> nullaryCons
-    defineEnumEmpty
-      | null nullaryCons = pure ()
-      | otherwise = defineEnumUnit
-    typeMembers =
-      (<> nullaryMembers) . withRefs
-        <$> ( defineEnumEmpty *> buildUnions p cons
-            )
-      where
-        withRefs = fmap mkUnionMember . (unionRef <>)
-mkUnionType p@OutputType unionRef unionCons =
-  DataUnion <$> (buildUnions p unionCons >>= fromElems . map mkUnionMember . (unionRef <>))
-
-buildUnions ::
-  KindedType kind a ->
-  [ConsRep (Maybe (FieldContent TRUE kind CONST))] ->
-  SchemaT c [TypeName]
-buildUnions proxy cons =
-  traverse_ (defineObjectType proxy) cons $> fmap consName cons
diff --git a/src/Data/Morpheus/Server/Deriving/Utils.hs b/src/Data/Morpheus/Server/Deriving/Utils.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Utils.hs
+++ /dev/null
@@ -1,24 +0,0 @@
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Utils
-  ( conNameProxy,
-    isRecordProxy,
-    selNameProxy,
-    ConsRep (..),
-    FieldRep (..),
-    isEmptyConstraint,
-    isUnionRef,
-    fieldTypeName,
-    unpackMonad,
-    symbolName,
-    toFieldRes,
-    DataType (..),
-    DeriveWith (..),
-    DeriveTypeOptions (..),
-    deriveTypeWith,
-  )
-where
-
-import Data.Morpheus.Server.Deriving.Utils.DeriveGType
-import Data.Morpheus.Server.Deriving.Utils.Proxy
-import Data.Morpheus.Server.Deriving.Utils.Types
diff --git a/src/Data/Morpheus/Server/Deriving/Utils/Decode.hs b/src/Data/Morpheus/Server/Deriving/Utils/Decode.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Utils/Decode.hs
+++ /dev/null
@@ -1,129 +0,0 @@
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Utils.Decode
-  ( withInputObject,
-    withEnum,
-    withInputUnion,
-    decodeFieldWith,
-    withScalar,
-    handleEither,
-    getFieldName,
-    DecoderT,
-    withKind,
-    Info (..),
-    Context (..),
-    Tag (..),
-  )
-where
-
-import Control.Monad.Except (MonadError (throwError))
-import Data.Morpheus.App.Internal.Resolving (ResolverState)
-import Data.Morpheus.Internal.Utils
-  ( selectOr,
-  )
-import Data.Morpheus.Server.Types.Internal
-import Data.Morpheus.Types.GQLScalar
-  ( toScalar,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( FieldName,
-    GQLError,
-    Msg (msg),
-    ObjectEntry (..),
-    ScalarValue,
-    Token,
-    TypeName,
-    VALID,
-    ValidObject,
-    ValidValue,
-    Value (..),
-    getInputUnionValue,
-    internal,
-  )
-import Relude
-
-withInputObject ::
-  MonadError GQLError m =>
-  (ValidObject -> m a) ->
-  ValidValue ->
-  m a
-withInputObject f (Object object) = f object
-withInputObject _ isType = throwError (typeMismatch "InputObject" isType)
-
--- | Useful for more restrictive instances of lists (non empty, size indexed etc)
-withEnum :: MonadError GQLError m => (TypeName -> m a) -> Value VALID -> m a
-withEnum decode (Enum value) = decode value
-withEnum _ isType = throwError (typeMismatch "Enum" isType)
-
-withInputUnion ::
-  (MonadError GQLError m, Monad m) =>
-  (TypeName -> ValidObject -> ValidObject -> m a) ->
-  ValidObject ->
-  m a
-withInputUnion decoder unions =
-  either onFail onSuccess (getInputUnionValue unions)
-  where
-    onSuccess (name, value) = withInputObject (decoder name unions) value
-    onFail = throwError . internal . msg
-
-withScalar ::
-  (Applicative m, MonadError GQLError m) =>
-  TypeName ->
-  (ScalarValue -> Either Token a) ->
-  Value VALID ->
-  m a
-withScalar typename decodeScalar value = case toScalar value >>= decodeScalar of
-  Right scalar -> pure scalar
-  Left message ->
-    throwError
-      ( typeMismatch
-          ("SCALAR(" <> msg typename <> ")" <> msg message)
-          value
-      )
-
-decodeFieldWith :: (Value VALID -> m a) -> FieldName -> ValidObject -> m a
-decodeFieldWith decoder = selectOr (decoder Null) (decoder . entryValue)
-
-handleEither :: MonadError GQLError m => Either GQLError a -> m a
-handleEither = either throwError pure
-
--- if value is already validated but value has different type
-typeMismatch :: GQLError -> Value s -> GQLError
-typeMismatch text jsType =
-  internal $
-    "Type mismatch! expected:"
-      <> text
-      <> ", got: "
-      <> msg jsType
-
-getFieldName :: FieldName -> Int -> FieldName
-getFieldName "" index = "_" <> show index
-getFieldName label _ = label
-
-data Tag = D_CONS | D_UNION deriving (Eq, Ord)
-
-data Info = Info
-  { kind :: Tag,
-    tagName :: [TypeName]
-  }
-
-instance Semigroup Info where
-  Info D_UNION t1 <> Info _ t2 = Info D_UNION (t1 <> t2)
-  Info _ t1 <> Info D_UNION t2 = Info D_UNION (t1 <> t2)
-  Info D_CONS t1 <> Info D_CONS t2 = Info D_CONS (t1 <> t2)
-
-data Context = Context
-  { contKind :: Tag,
-    typeName :: TypeName,
-    options :: GQLTypeOptions
-  }
-
-type DecoderT = ReaderT Context ResolverState
-
-withKind :: Tag -> DecoderT a -> DecoderT a
-withKind contKind = local (\ctx -> ctx {contKind})
diff --git a/src/Data/Morpheus/Server/Deriving/Utils/DeriveGType.hs b/src/Data/Morpheus/Server/Deriving/Utils/DeriveGType.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Utils/DeriveGType.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Utils.DeriveGType
-  ( DeriveWith (..),
-    DeriveValueOptions (..),
-    DeriveTypeOptions (..),
-    deriveValue,
-    deriveTypeWith,
-  )
-where
-
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-  ( CategoryValue (..),
-  )
-import Data.Morpheus.Server.Deriving.Utils.Proxy
-  ( conNameProxy,
-    isRecordProxy,
-    selNameProxy,
-  )
-import Data.Morpheus.Server.Deriving.Utils.Types
-import Data.Morpheus.Server.Types.Internal
-  ( GQLTypeOptions (..),
-    TypeData (..),
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( TypeName,
-    TypeRef (..),
-  )
-import GHC.Generics
-  ( C,
-    Constructor,
-    D,
-    Datatype,
-    Generic (..),
-    K1 (..),
-    M1 (..),
-    Meta,
-    Rec0,
-    S,
-    Selector,
-    U1 (..),
-    (:*:) (..),
-    (:+:) (..),
-  )
-import Relude hiding (undefined)
-
-data DeriveValueOptions kind c v = DeriveValueOptions
-  { __valueTypeName :: TypeName,
-    __valueGQLOptions :: GQLTypeOptions,
-    __valueApply :: forall a. c a => a -> v,
-    __valueGetType :: forall f a. c a => f a -> TypeData
-  }
-
-data DeriveTypeOptions kind c v = DeriveTypeDefinitionOptions
-  { __typeGQLOptions :: GQLTypeOptions,
-    __typeApply :: forall f a. c a => f a -> v,
-    __typeGetType :: forall f a. c a => f a -> TypeData
-  }
-
-deriveValue ::
-  (CategoryValue kind, Generic a, DeriveWith constraint value (Rep a)) =>
-  DeriveValueOptions kind constraint value ->
-  a ->
-  DataType value
-deriveValue options = deriveTypeValue options . from
-
-deriveTypeWith ::
-  forall kind c v kinded a.
-  (CategoryValue kind, DeriveWith c v (Rep a)) =>
-  DeriveTypeOptions kind c v ->
-  kinded kind a ->
-  [ConsRep v]
-deriveTypeWith options _ = deriveTypeDefinition options (Proxy @(Rep a))
-
---  GENERIC UNION
-class DeriveWith (c :: Type -> Constraint) (v :: Type) f where
-  deriveTypeValue :: CategoryValue kind => DeriveValueOptions kind c v -> f a -> DataType v
-  deriveTypeDefinition :: CategoryValue kind => DeriveTypeOptions kind c v -> proxy f -> [ConsRep v]
-
-instance (Datatype d, DeriveWith c v f) => DeriveWith c v (M1 D d f) where
-  deriveTypeValue options (M1 src) = (deriveTypeValue options src) {dataTypeName = __valueTypeName options}
-  deriveTypeDefinition options _ = deriveTypeDefinition options (Proxy @f)
-
--- | recursion for Object types, both of them : 'INPUT_OBJECT' and 'OBJECT'
-instance (DeriveWith c v a, DeriveWith c v b) => DeriveWith c v (a :+: b) where
-  deriveTypeValue f (L1 x) = (deriveTypeValue f x) {tyIsUnion = True}
-  deriveTypeValue f (R1 x) = (deriveTypeValue f x) {tyIsUnion = True}
-  deriveTypeDefinition options _ = deriveTypeDefinition options (Proxy @a) <> deriveTypeDefinition options (Proxy @b)
-
-instance (DeriveFieldRep con v f, Constructor c) => DeriveWith con v (M1 C c f) where
-  deriveTypeValue options (M1 src) =
-    DataType
-      { dataTypeName = "",
-        tyIsUnion = False,
-        tyCons = deriveConsRep (__valueGQLOptions options) (Proxy @c) (toFieldRep options src)
-      }
-  deriveTypeDefinition options _ = [deriveConsRep (__typeGQLOptions options) (Proxy @c) (conRep options (Proxy @f))]
-
-deriveConsRep ::
-  Constructor (c :: Meta) =>
-  GQLTypeOptions ->
-  f c ->
-  [FieldRep v] ->
-  ConsRep v
-deriveConsRep opt proxy fields =
-  ConsRep
-    { consName = conNameProxy opt proxy,
-      consFields
-    }
-  where
-    consFields
-      | isRecordProxy proxy = fields
-      | otherwise = enumerate fields
-
-class DeriveFieldRep (c :: Type -> Constraint) (v :: Type) f where
-  toFieldRep :: CategoryValue kind => DeriveValueOptions kind c v -> f a -> [FieldRep v]
-  conRep :: CategoryValue kind => DeriveTypeOptions kind c v -> proxy f -> [FieldRep v]
-
-instance (DeriveFieldRep c v a, DeriveFieldRep c v b) => DeriveFieldRep c v (a :*: b) where
-  toFieldRep options (a :*: b) = toFieldRep options a <> toFieldRep options b
-  conRep options _ = conRep options (Proxy @a) <> conRep options (Proxy @b)
-
-instance (Selector s, c a) => DeriveFieldRep c v (M1 S s (Rec0 a)) where
-  toFieldRep DeriveValueOptions {..} (M1 (K1 src)) =
-    [ FieldRep
-        { fieldSelector = selNameProxy __valueGQLOptions (Proxy @s),
-          fieldTypeRef = TypeRef gqlTypeName gqlWrappers,
-          fieldValue = __valueApply src
-        }
-    ]
-    where
-      TypeData {gqlTypeName, gqlWrappers} = __valueGetType (Proxy @a)
-  conRep DeriveTypeDefinitionOptions {..} _ =
-    [ FieldRep
-        { fieldSelector = selNameProxy __typeGQLOptions (Proxy @s),
-          fieldTypeRef = TypeRef gqlTypeName gqlWrappers,
-          fieldValue = __typeApply (Proxy @a)
-        }
-    ]
-    where
-      TypeData {gqlTypeName, gqlWrappers} = __typeGetType (Proxy @a)
-
-instance DeriveFieldRep c v U1 where
-  toFieldRep _ _ = []
-  conRep _ _ = []
diff --git a/src/Data/Morpheus/Server/Deriving/Utils/GTraversable.hs b/src/Data/Morpheus/Server/Deriving/Utils/GTraversable.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Utils/GTraversable.hs
+++ /dev/null
@@ -1,115 +0,0 @@
-{-# LANGUAGE AllowAmbiguousTypes #-}
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE UndecidableSuperClasses #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Utils.GTraversable where
-
-import qualified Data.Map as M
-import Data.Morpheus.Kind
-import Data.Morpheus.NamedResolvers (NamedResolverT)
-import Data.Morpheus.Server.Deriving.Utils.Kinded
-import Data.Morpheus.Server.Types.GQLType (GQLType (KIND, __type))
-import Data.Morpheus.Server.Types.Internal
-  ( TypeData (gqlFingerprint),
-  )
-import Data.Morpheus.Server.Types.SchemaT (TypeFingerprint)
-import Data.Morpheus.Types.Internal.AST
-import GHC.Generics
-import Relude hiding (Undefined)
-
-traverseTypes ::
-  (GFmap (ScanConstraint c) (KIND a) a, c (KIND a) a, GQLType a) =>
-  Mappable c v KindedProxy ->
-  Proxy a ->
-  Map TypeFingerprint v
-traverseTypes f = runMappable (scanner f mempty) . withDerivable
-
-class
-  (GFmap (ScanConstraint c) (KIND a) a, c (KIND a) a) =>
-  ScanConstraint
-    (c :: DerivingKind -> Type -> Constraint)
-    (k :: DerivingKind)
-    (a :: Type)
-
-instance (GFmap (ScanConstraint c) (KIND a) a, c (KIND a) a) => ScanConstraint c k a
-
-scanner ::
-  Mappable c v KindedProxy ->
-  Map TypeFingerprint v ->
-  Mappable (ScanConstraint c) (Map TypeFingerprint v) KindedProxy
-scanner c@(Mappable f) lib =
-  Mappable
-    ( \proxy -> do
-        let typeInfo = __type proxy OUT
-        let fingerprint = gqlFingerprint typeInfo
-        if M.member fingerprint lib
-          then lib
-          else do
-            let newLib = M.insert fingerprint (f proxy) lib
-            gfmap (scanner c newLib) proxy
-    )
-
-withDerivable :: proxy a -> KindedProxy (KIND a) a
-withDerivable _ = KindedProxy
-
-newtype Mappable (c :: DerivingKind -> Type -> Constraint) (v :: Type) (f :: DerivingKind -> Type -> Type) = Mappable
-  { runMappable :: forall a. (GQLType a, c (KIND a) a) => KindedProxy (KIND a) a -> v
-  }
-
--- Map
-class GFmap (c :: DerivingKind -> Type -> Constraint) (t :: DerivingKind) a where
-  gfmap :: (Monoid v, Semigroup v) => Mappable c v KindedProxy -> kinded t a -> v
-
-instance (GQLType a, c (KIND a) a) => GFmap c SCALAR a where
-  gfmap (Mappable f) _ = f (KindedProxy :: KindedProxy (KIND a) a)
-
-instance (GQLType a, c (KIND a) a, GFunctor c (Rep a)) => GFmap c TYPE a where
-  gfmap f@(Mappable fx) _ = fx (KindedProxy :: KindedProxy (KIND a) a) <> genericMap f (Proxy @(Rep a))
-
-instance GFmap c (KIND a) a => GFmap c WRAPPER (f a) where
-  gfmap f _ = gfmap f (KindedProxy :: KindedProxy (KIND a) a)
-
-instance GFmap c (KIND a) a => GFmap c CUSTOM (input -> a) where
-  gfmap f _ = gfmap f (KindedProxy :: KindedProxy (KIND a) a)
-
-instance GFmap c (KIND a) a => GFmap c CUSTOM (NamedResolverT m a) where
-  gfmap f _ = gfmap f (KindedProxy :: KindedProxy (KIND a) a)
-
---
---
--- GFunctor
---
---
-class GFunctor (c :: DerivingKind -> Type -> Constraint) a where
-  genericMap :: (Monoid v, Semigroup v) => Mappable c v p -> proxy a -> v
-
-instance (Datatype d, GFunctor c a) => GFunctor c (M1 D d a) where
-  genericMap fun _ = genericMap fun (Proxy @a)
-
-instance (GFunctor con a) => GFunctor con (M1 C c a) where
-  genericMap f _ = genericMap f (Proxy @a)
-
-instance (GFunctor c a, GFunctor c b) => GFunctor c (a :+: b) where
-  genericMap fun _ = genericMap fun (Proxy @a) <> genericMap fun (Proxy @b)
-
-instance (GFunctor c a, GFunctor c b) => GFunctor c (a :*: b) where
-  genericMap fun _ = genericMap fun (Proxy @a) <> genericMap fun (Proxy @b)
-
-instance (GQLType a, c (KIND a) a) => GFunctor c (M1 S s (K1 x a)) where
-  genericMap (Mappable f) _ = f (KindedProxy :: KindedProxy (KIND a) a)
-
-instance GFunctor c U1 where
-  genericMap _ _ = mempty
diff --git a/src/Data/Morpheus/Server/Deriving/Utils/Kinded.hs b/src/Data/Morpheus/Server/Deriving/Utils/Kinded.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Utils/Kinded.hs
+++ /dev/null
@@ -1,69 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Utils.Kinded
-  ( KindedProxy (..),
-    setType,
-    setKind,
-    kinded,
-    KindedType (..),
-    inputType,
-    outputType,
-    CategoryValue (..),
-  )
-where
-
-import Data.Morpheus.Types.Internal.AST
-  ( IN,
-    LEAF,
-    OUT,
-    TypeCategory (..),
-  )
-import Prelude (Show)
-
-class CategoryValue (c :: TypeCategory) where
-  categoryValue :: f c -> TypeCategory
-
-instance CategoryValue OUT where
-  categoryValue _ = OUT
-
-instance CategoryValue IN where
-  categoryValue _ = IN
-
-instance CategoryValue LEAF where
-  categoryValue _ = LEAF
-
--- | context , like Proxy with multiple parameters
--- * 'kind': object, scalar, enum ...
--- * 'a': actual gql type
-data KindedProxy k a
-  = KindedProxy
-
-setType :: f a -> kinded (k :: t) a' -> KindedProxy k a
-setType _ _ = KindedProxy
-
-setKind :: f k -> kinded (k' :: t) a -> KindedProxy k a
-setKind _ _ = KindedProxy
-
-kinded :: f k -> f' a -> KindedProxy k a
-kinded _ _ = KindedProxy
-
-data KindedType (cat :: TypeCategory) a where
-  InputType :: KindedType IN a
-  OutputType :: KindedType OUT a
-
-deriving instance Show (KindedType cat a)
-
--- converts:
---   f a -> KindedType IN a
--- or
---  f k a -> KindedType IN a
-inputType :: f a -> KindedType IN a
-inputType _ = InputType
-
-outputType :: f a -> KindedType OUT a
-outputType _ = OutputType
diff --git a/src/Data/Morpheus/Server/Deriving/Utils/Proxy.hs b/src/Data/Morpheus/Server/Deriving/Utils/Proxy.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Utils/Proxy.hs
+++ /dev/null
@@ -1,75 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Utils.Proxy
-  ( conNameProxy,
-    isRecordProxy,
-    selNameProxy,
-    symbolName,
-    ContextValue (..),
-  )
-where
-
-import Data.Morpheus.Kind (DerivingKind)
-import Data.Morpheus.Server.Types.Internal
-  ( GQLTypeOptions (..),
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( FieldName,
-    TypeName,
-    packName,
-  )
-import Data.Text
-  ( pack,
-  )
-import qualified Data.Text as T
-import GHC.Generics
-  ( C,
-    Constructor,
-    M1 (..),
-    Meta,
-    S,
-    Selector,
-    U1 (..),
-    conIsRecord,
-    conName,
-    selName,
-  )
-import GHC.TypeLits
-import Relude hiding (undefined)
-import Prelude (undefined)
-
-conNameProxy :: forall f (c :: Meta). Constructor c => GQLTypeOptions -> f c -> TypeName
-conNameProxy options _ =
-  packName $ pack $ constructorTagModifier options $ conName (undefined :: M1 C c U1 a)
-
-selNameProxy :: forall f (s :: Meta). Selector s => GQLTypeOptions -> f s -> FieldName
-selNameProxy options _ =
-  fromHaskellName $
-    fieldLabelModifier options $
-      selName (undefined :: M1 S s f a)
-
-fromHaskellName :: String -> FieldName
-fromHaskellName hsName
-  | not (null hsName) && (T.last name == '\'') = packName (T.init name)
-  | otherwise = packName name
-  where
-    name = T.pack hsName
-{-# INLINE fromHaskellName #-}
-
-isRecordProxy :: forall f (c :: Meta). Constructor c => f c -> Bool
-isRecordProxy _ = conIsRecord (undefined :: (M1 C c f a))
-
-symbolName :: KnownSymbol a => f a -> FieldName
-symbolName = fromString . symbolVal
-
-newtype ContextValue (kind :: DerivingKind) a = ContextValue
-  { unContextValue :: a
-  }
diff --git a/src/Data/Morpheus/Server/Deriving/Utils/Types.hs b/src/Data/Morpheus/Server/Deriving/Utils/Types.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Deriving/Utils/Types.hs
+++ /dev/null
@@ -1,76 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveFunctor #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Deriving.Utils.Types
-  ( ConsRep (..),
-    FieldRep (..),
-    DataType (..),
-    enumerate,
-    isEmptyConstraint,
-    fieldTypeName,
-    isUnionRef,
-    toFieldRes,
-    unpackMonad,
-  )
-where
-
-import Data.Morpheus.Types.Internal.AST
-import qualified Data.Text as T
-import Relude
-
-data DataType (v :: Type) = DataType
-  { dataTypeName :: TypeName,
-    tyIsUnion :: Bool,
-    tyCons :: ConsRep v
-  }
-  deriving (Functor)
-
-data ConsRep (v :: Type) = ConsRep
-  { consName :: TypeName,
-    consFields :: [FieldRep v]
-  }
-  deriving (Functor)
-
-data FieldRep (a :: Type) = FieldRep
-  { fieldSelector :: FieldName,
-    fieldTypeRef :: TypeRef,
-    fieldValue :: a
-  }
-  deriving (Functor)
-
--- setFieldNames ::  Power Int Text -> Power { _1 :: Int, _2 :: Text }
-enumerate :: [FieldRep a] -> [FieldRep a]
-enumerate = zipWith setFieldName ([0 ..] :: [Int])
-  where
-    setFieldName i field = field {fieldSelector = packName $ "_" <> T.pack (show i)}
-
-isEmptyConstraint :: ConsRep a -> Bool
-isEmptyConstraint ConsRep {consFields = []} = True
-isEmptyConstraint _ = False
-
-fieldTypeName :: FieldRep k -> TypeName
-fieldTypeName = typeConName . fieldTypeRef
-
-isUnionRef :: TypeName -> ConsRep k -> Bool
-isUnionRef baseName ConsRep {consName, consFields = [fieldRep]} =
-  consName == baseName <> fieldTypeName fieldRep
-isUnionRef _ _ = False
-
-toFieldRes :: FieldRep (m a) -> (FieldName, m a)
-toFieldRes FieldRep {fieldSelector, fieldValue} = (fieldSelector, fieldValue)
-
-unpackMonad :: Monad m => [ConsRep (m a)] -> m [ConsRep a]
-unpackMonad = traverse unpackMonadFromCons
-
-unpackMonadFromField :: Monad m => FieldRep (m a) -> m (FieldRep a)
-unpackMonadFromField FieldRep {..} = do
-  cont <- fieldValue
-  pure (FieldRep {fieldValue = cont, ..})
-
-unpackMonadFromCons :: Monad m => ConsRep (m a) -> m (ConsRep a)
-unpackMonadFromCons ConsRep {..} = ConsRep consName <$> traverse unpackMonadFromField consFields
diff --git a/src/Data/Morpheus/Server/Playground.hs b/src/Data/Morpheus/Server/Playground.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Playground.hs
+++ /dev/null
@@ -1,72 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE KindSignatures #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Playground
-  ( httpPlayground,
-  )
-where
-
-import Data.ByteString.Lazy.Char8 (ByteString)
-import Data.Functor (fmap)
-import Data.Semigroup ((<>))
-import Prelude
-  ( mconcat,
-    (.),
-  )
-
-link :: ByteString -> ByteString -> ByteString
-link rel href = "<link rel=\"" <> rel <> "\"  href=\"" <> href <> "\" />"
-
-meta :: [(ByteString, ByteString)] -> ByteString
-meta attr = t "meta" attr []
-
-tag :: ByteString -> [ByteString] -> ByteString
-tag tagName = t tagName []
-
-t :: ByteString -> [(ByteString, ByteString)] -> [ByteString] -> ByteString
-t tagName attr children =
-  "<" <> tagName <> " " <> mconcat (fmap renderAttr attr) <> " >" <> mconcat children <> "</" <> tagName <> ">"
-  where
-    renderAttr (name, value) = name <> "=\"" <> value <> "\" "
-
-script :: [(ByteString, ByteString)] -> [ByteString] -> ByteString
-script = t "script"
-
-html :: [ByteString] -> ByteString
-html = docType . t "html" []
-
-docType :: ByteString -> ByteString
-docType x = "<!DOCTYPE html>" <> x
-
-httpPlayground :: ByteString
-httpPlayground =
-  html
-    [ tag
-        "head"
-        [ meta [("charset", "utf-8")],
-          meta
-            [ ("name", "viewport"),
-              ("content", "user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, minimal-ui")
-            ],
-          tag "title" ["GraphQL Playground"],
-          link "stylesheet" "//cdn.jsdelivr.net/npm/graphql-playground-react/build/static/css/index.css",
-          link "shortcut icon" "//cdn.jsdelivr.net/npm/graphql-playground-react/build/favicon.png",
-          script
-            [("src", "//cdn.jsdelivr.net/npm/graphql-playground-react/build/static/js/middleware.js")]
-            []
-        ],
-      tag
-        "body"
-        [ t "div" [("id", "root")] [],
-          script
-            []
-            [ "  window.addEventListener('load', (_) => \
-              \    GraphQLPlayground.init(document.getElementById('root'), {}) \
-              \  );"
-            ]
-        ]
-    ]
diff --git a/src/Data/Morpheus/Server/TH/Compile.hs b/src/Data/Morpheus/Server/TH/Compile.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/TH/Compile.hs
+++ /dev/null
@@ -1,44 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.TH.Compile
-  ( compileDocument,
-    gqlDocument,
-  )
-where
-
---
---  Morpheus
-
-import Data.ByteString.Lazy.Char8 (ByteString)
-import qualified Data.ByteString.Lazy.Char8 as LB
-import Data.Morpheus.CodeGen
-  ( parseServerTypeDefinitions,
-  )
-import Data.Morpheus.CodeGen.Internal.AST
-  ( CodeGenConfig (..),
-  )
-import Data.Morpheus.Server.TH.Declare
-  ( runDeclare,
-  )
-import Language.Haskell.TH
-import Language.Haskell.TH.Quote (QuasiQuoter (..))
-import Relude hiding (ByteString)
-
-gqlDocument :: QuasiQuoter
-gqlDocument = mkQuasiQuoter CodeGenConfig {namespace = False}
-
-mkQuasiQuoter :: CodeGenConfig -> QuasiQuoter
-mkQuasiQuoter ctx =
-  QuasiQuoter
-    { quoteExp = notHandled "Expressions",
-      quotePat = notHandled "Patterns",
-      quoteType = notHandled "Types",
-      quoteDec = compileDocument ctx . LB.pack
-    }
-  where
-    notHandled things =
-      error $ things <> " are not supported by the GraphQL QuasiQuoter"
-
-compileDocument :: CodeGenConfig -> ByteString -> Q [Dec]
-compileDocument ctx = parseServerTypeDefinitions ctx >=> runDeclare ctx
diff --git a/src/Data/Morpheus/Server/TH/Declare.hs b/src/Data/Morpheus/Server/TH/Declare.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/TH/Declare.hs
+++ /dev/null
@@ -1,42 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.TH.Declare
-  ( runDeclare,
-  )
-where
-
-import Data.Morpheus.CodeGen.Internal.AST
-  ( CodeGenConfig (..),
-    ServerTypeDefinition,
-  )
-import Data.Morpheus.Server.TH.Declare.GQLDirective
-  ( deriveGQLDirective,
-  )
-import Data.Morpheus.Server.TH.Declare.GQLType
-  ( deriveGQLType,
-  )
-import Data.Morpheus.Server.TH.Declare.Type
-  ( declareType,
-  )
-import Data.Morpheus.Server.TH.Utils (ServerDec)
-import Language.Haskell.TH
-import Relude
-
-runDeclare :: Declare a => CodeGenConfig -> a -> Q [Dec]
-runDeclare ctx a = runReaderT (declare a) ctx
-
-class Declare a where
-  declare :: a -> ServerDec [Dec]
-
-instance Declare a => Declare [a] where
-  declare = fmap concat . traverse declare
-
-instance Declare ServerTypeDefinition where
-  declare typeDef = do
-    let typeDecs = declareType typeDef
-    gqlDirDecs <- deriveGQLDirective typeDef
-    gqlTypeDecs <- deriveGQLType typeDef
-    pure (typeDecs <> gqlDirDecs <> gqlTypeDecs)
diff --git a/src/Data/Morpheus/Server/TH/Declare/GQLDirective.hs b/src/Data/Morpheus/Server/TH/Declare/GQLDirective.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/TH/Declare/GQLDirective.hs
+++ /dev/null
@@ -1,84 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE TemplateHaskellQuotes #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.TH.Declare.GQLDirective
-  ( deriveGQLDirective,
-  )
-where
-
-import Data.Morpheus.CodeGen.Internal.AST
-  ( ServerConstructorDefinition (..),
-    ServerTypeDefinition (..),
-    TypeName,
-  )
-import Data.Morpheus.CodeGen.Internal.TH
-  ( apply,
-    applyVars,
-    typeInstanceDec,
-  )
-import Data.Morpheus.Server.TH.Utils
-  ( ServerDec,
-    mkTypeableConstraints,
-  )
-import Data.Morpheus.Server.Types.Directives
-  ( GQLDirective (..),
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( DirectiveLocation (..),
-  )
-import Language.Haskell.TH
-  ( Dec,
-    Name,
-    Q,
-    Type (..),
-    instanceD,
-  )
-import Relude hiding (Type, toString)
-
-noVars :: [Name]
-noVars = []
-
-deriveGQLDirective :: ServerTypeDefinition -> ServerDec [Dec]
-deriveGQLDirective DirectiveTypeDefinition {..} = do
-  let constrains = mkTypeableConstraints noVars
-  let tName = constructorName directiveConstructor
-  let typeSignature = apply ''GQLDirective [applyVars tName noVars]
-  methods <- defineMethods (constructorName directiveConstructor) directiveLocations
-  gqlTypeDeclaration <- lift (instanceD constrains typeSignature methods)
-  pure [gqlTypeDeclaration]
-deriveGQLDirective _ = pure []
-
-defineMethods :: TypeName -> [DirectiveLocation] -> ServerDec [Q Dec]
-defineMethods tName locations = do
-  let currentType = applyVars tName noVars
-  let inst = typeInstanceDec ''DIRECTIVE_LOCATIONS currentType (promotedList locations)
-  pure [pure inst]
-
-locationName :: DirectiveLocation -> Name
-locationName QUERY = 'QUERY
-locationName MUTATION = 'MUTATION
-locationName SUBSCRIPTION = 'SUBSCRIPTION
-locationName FIELD = 'FIELD
-locationName FRAGMENT_DEFINITION = 'FRAGMENT_DEFINITION
-locationName FRAGMENT_SPREAD = 'FRAGMENT_SPREAD
-locationName INLINE_FRAGMENT = 'INLINE_FRAGMENT
-locationName SCHEMA = 'SCHEMA
-locationName SCALAR = 'SCALAR
-locationName OBJECT = 'OBJECT
-locationName FIELD_DEFINITION = 'FIELD_DEFINITION
-locationName ARGUMENT_DEFINITION = 'ARGUMENT_DEFINITION
-locationName INTERFACE = 'INTERFACE
-locationName UNION = 'UNION
-locationName ENUM = 'ENUM
-locationName ENUM_VALUE = 'ENUM_VALUE
-locationName INPUT_OBJECT = 'INPUT_OBJECT
-locationName INPUT_FIELD_DEFINITION = 'INPUT_FIELD_DEFINITION
-
-promotedList :: [DirectiveLocation] -> Type
-promotedList =
-  foldr
-    (AppT . AppT PromotedConsT . PromotedT . locationName)
-    PromotedNilT
diff --git a/src/Data/Morpheus/Server/TH/Declare/GQLType.hs b/src/Data/Morpheus/Server/TH/Declare/GQLType.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/TH/Declare/GQLType.hs
+++ /dev/null
@@ -1,170 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.TH.Declare.GQLType
-  ( deriveGQLType,
-  )
-where
-
-import Data.Morpheus.CodeGen.Internal.AST
-  ( CodeGenConfig (..),
-    GQLTypeDefinition (..),
-    Kind (..),
-    ServerConstructorDefinition (constructorName),
-    ServerDirectiveUsage (..),
-    ServerTypeDefinition (..),
-    TypeValue (..),
-    unpackName,
-  )
-import Data.Morpheus.CodeGen.Internal.TH
-  ( ToName (..),
-    apply,
-    applyVars,
-    typeInstanceDec,
-  )
-import Data.Morpheus.Kind
-  ( SCALAR,
-    TYPE,
-  )
-import Data.Morpheus.Server.TH.Utils
-  ( ServerDec,
-    funDProxy,
-    mkTypeableConstraints,
-    renderTypeVars,
-  )
-import Data.Morpheus.Server.Types.GQLType
-  ( enumDirective,
-    fieldDirective,
-    typeDirective,
-  )
-import Data.Morpheus.Server.Types.Internal
-  ( dropNamespaceOptions,
-  )
-import Data.Morpheus.Types
-  ( GQLType (..),
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( FieldName,
-    TypeKind (..),
-  )
-import qualified Data.Text as T
-import Language.Haskell.TH
-  ( Dec,
-    DecQ,
-    ExpQ,
-    FieldExp,
-    Name,
-    Q,
-    Type (ConT),
-    appE,
-    conE,
-    instanceD,
-    listE,
-    litE,
-    recConE,
-    stringL,
-  )
-import Relude hiding (toString)
-
-deriveGQLType :: ServerTypeDefinition -> ServerDec [Dec]
-deriveGQLType
-  ServerTypeDefinition
-    { tName,
-      tKind,
-      typeParameters,
-      typeGQLType
-    } = do
-    let typeVars = renderTypeVars typeParameters
-    let constrains = mkTypeableConstraints typeVars
-    let typeSignature = apply ''GQLType [applyVars tName typeVars]
-    methods <- defineMethods tName tKind typeVars typeGQLType
-    gqlTypeDeclaration <- lift (instanceD constrains typeSignature methods)
-    pure [gqlTypeDeclaration]
-deriveGQLType DirectiveTypeDefinition {..} = do
-  let typeVars = [] :: [Name]
-  let tName = unpackName (constructorName directiveConstructor)
-  let constrains = mkTypeableConstraints typeVars
-  let typeSignature = apply ''GQLType [applyVars tName typeVars]
-  methods <- defineMethods tName KindInputObject typeVars (Just directiveGQLType)
-  gqlTypeDeclaration <- lift (instanceD constrains typeSignature methods)
-  pure [gqlTypeDeclaration]
-deriveGQLType _ = pure []
-
-defineTypeOptions :: Text -> TypeKind -> ServerDec [DecQ]
-defineTypeOptions tName kind = do
-  CodeGenConfig {namespace} <- ask
-  pure $ funDProxy [('typeOptions, [|dropNamespaceOptions kind tName|]) | namespace]
-
-defineMethods ::
-  Text ->
-  TypeKind ->
-  [Name] ->
-  Maybe GQLTypeDefinition ->
-  ServerDec [Q Dec]
-defineMethods tName kind _ Nothing = defineTypeOptions tName kind
-defineMethods
-  tName
-  kind
-  typeParameters
-  ( Just
-      GQLTypeDefinition
-        { gqlTypeDescription,
-          gqlTypeDescriptions,
-          gqlTypeDefaultValues,
-          gqlTypeDirectiveUses,
-          gqlKind
-        }
-    ) = do
-    options <- defineTypeOptions tName kind
-    pure (typeFamilies : functions <> options)
-    where
-      functions =
-        funDProxy
-          [ ('description, [|gqlTypeDescription|]),
-            ('getDescriptions, [|gqlTypeDescriptions|]),
-            ('defaultValues, [|gqlTypeDefaultValues|]),
-            ('directives, renderDirectiveUsages gqlTypeDirectiveUses)
-          ]
-
-      typeFamilies = do
-        currentType <- applyVars tName typeParameters
-        pure $ typeInstanceDec ''KIND currentType (ConT (kindName gqlKind))
-
-kindName :: Kind -> Name
-kindName Scalar = ''SCALAR
-kindName Type = ''TYPE
-
-renderDirectiveUsages :: [ServerDirectiveUsage] -> ExpQ
-renderDirectiveUsages =
-  foldr
-    (appE . appE [|(<>)|] . renderDirectiveUsage)
-    [|mempty|]
-
-renderDirectiveUsage :: ServerDirectiveUsage -> ExpQ
-renderDirectiveUsage (TypeDirectiveUsage x) = [|typeDirective $(renderValue x)|]
-renderDirectiveUsage (FieldDirectiveUsage field x) = [|fieldDirective field $(renderValue x)|]
-renderDirectiveUsage (EnumDirectiveUsage enum x) = [|enumDirective enum $(renderValue x)|]
-
-renderField :: (FieldName, TypeValue) -> Q FieldExp
-renderField (fName, fValue) = do
-  v <- renderValue fValue
-  pure (toName fName, v)
-
-renderValue :: TypeValue -> ExpQ
-renderValue (TypeValueObject name xs) = recConE (toName name) (map renderField xs)
-renderValue (TypeValueNumber x) = [|x|]
-renderValue (TypeValueString x) = litE (stringL (T.unpack x))
-renderValue (TypeValueBool _) = [|x|]
-renderValue (TypedValueMaybe (Just x)) = appE (conE 'Just) (renderValue x)
-renderValue (TypedValueMaybe Nothing) = conE 'Nothing
-renderValue (TypeValueList xs) = listE $ map renderValue xs
diff --git a/src/Data/Morpheus/Server/TH/Declare/Type.hs b/src/Data/Morpheus/Server/TH/Declare/Type.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/TH/Declare/Type.hs
+++ /dev/null
@@ -1,115 +0,0 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE TemplateHaskellQuotes #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.TH.Declare.Type
-  ( declareType,
-  )
-where
-
-import Data.Morpheus.CodeGen.Internal.AST (DerivingClass (..), FIELD_TYPE_WRAPPER (..), ServerConstructorDefinition (..), ServerFieldDefinition (..), ServerTypeDefinition (..), unpackName)
-import Data.Morpheus.CodeGen.Internal.TH
-  ( apply,
-    declareTypeRef,
-    toCon,
-    toName,
-    wrappedType,
-  )
-import Data.Morpheus.Server.TH.Utils
-  ( m',
-    m_,
-    renderTypeVars,
-  )
-import Data.Morpheus.Types
-  ( Arg,
-    SubscriptionField,
-    TypeGuard,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( TypeKind (..),
-  )
-import qualified Data.Text as T
-import Language.Haskell.TH
-import Relude hiding (Type)
-
-{- ORMOLU_DISABLE -}
-
-declareType :: ServerTypeDefinition -> [Dec]
-declareType (ServerInterfaceDefinition name interfaceName unionName) =
-  [ TySynD
-      (toName name)
-#if MIN_VERSION_template_haskell(2,17,0)
-      [PlainTV m_ ()]
-#else
-      [PlainTV m_]
-#endif
-      (apply ''TypeGuard [apply interfaceName [m'], apply unionName [m']])
-  ]
-declareType ServerTypeDefinition {tKind = KindScalar} = []
-declareType
-  ServerTypeDefinition
-    { tName,
-      tCons,
-      derives,
-      typeParameters
-    } = [DataD [] (toName tName) vars Nothing cons [derivingClause]]
-    where
-      derivingClause = DerivClause Nothing (map (ConT . genName) derives)
-      cons = map declareCons tCons
-
-#if MIN_VERSION_template_haskell(2,17,0)
-      vars = map (flip PlainTV ()) (renderTypeVars typeParameters)
-#else
-      vars = map PlainTV (renderTypeVars typeParameters)
-#endif
-declareType
-  DirectiveTypeDefinition {..} 
-    = [DataD [] name [] Nothing [declareCons directiveConstructor] [derivingClause]]
-    where
-      name = toName (constructorName directiveConstructor)
-      derivingClause = DerivClause Nothing (map (ConT . genName) directiveDerives)
-{- ORMOLU_ENABLE -}
-
-genName :: DerivingClass -> Name
-genName GENERIC = ''Generic
-genName SHOW = ''Show
-
-declareCons :: ServerConstructorDefinition -> Con
-declareCons ServerConstructorDefinition {constructorName, constructorFields} =
-  RecC
-    (toName constructorName)
-    (map declareField constructorFields)
-
-declareField :: ServerFieldDefinition -> (Name, Bang, Type)
-declareField
-  ServerFieldDefinition
-    { fieldName,
-      fieldType,
-      wrappers
-    } =
-    ( toName fieldName,
-      Bang NoSourceUnpackedness NoSourceStrictness,
-      foldr applyWrapper (toCon fieldType) wrappers
-    )
-
-applyWrapper :: FIELD_TYPE_WRAPPER -> Type -> Type
-applyWrapper PARAMETRIZED = (`AppT` m')
-applyWrapper MONAD = AppT m'
-applyWrapper SUBSCRIPTION = AppT (ConT ''SubscriptionField)
-applyWrapper (ARG typeName) = InfixT (ConT (toName typeName)) ''Function
-applyWrapper (GQL_WRAPPER wrappers) = wrappedType wrappers
-applyWrapper (TAGGED_ARG fieldName typeRef) = InfixT arg ''Function
-  where
-    arg =
-      AppT
-        ( AppT
-            (ConT ''Arg)
-            (LitT $ StrTyLit $ T.unpack $ unpackName fieldName)
-        )
-        (declareTypeRef toCon typeRef)
-
-type Function = (->)
diff --git a/src/Data/Morpheus/Server/TH/Utils.hs b/src/Data/Morpheus/Server/TH/Utils.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/TH/Utils.hs
+++ /dev/null
@@ -1,75 +0,0 @@
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TemplateHaskellQuotes #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.TH.Utils
-  ( constraintTypeable,
-    typeNameStringE,
-    withPure,
-    mkTypeableConstraints,
-    m',
-    m_,
-    funDProxy,
-    ServerDec,
-    renderTypeVars,
-  )
-where
-
-import Data.Morpheus.CodeGen.Internal.AST
-  ( CodeGenConfig,
-  )
-import Data.Morpheus.CodeGen.Internal.TH
-  ( apply,
-    funDSimple,
-    vars,
-    _',
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( TypeName,
-    unpackName,
-  )
-import Data.Text (unpack)
-import qualified Data.Text as T
-import Language.Haskell.TH
-  ( CxtQ,
-    DecQ,
-    Exp (..),
-    ExpQ,
-    Lit (..),
-    Name,
-    Q,
-    Type (..),
-    cxt,
-    mkName,
-  )
-import Relude hiding (Type)
-
-type ServerDec = ReaderT CodeGenConfig Q
-
-m_ :: Name
-m_ = mkName "m"
-
-m' :: Type
-m' = VarT m_
-
-renderTypeVars :: [Text] -> [Name]
-renderTypeVars = map (mkName . T.unpack)
-
-funDProxy :: [(Name, ExpQ)] -> [DecQ]
-funDProxy = map fun
-  where
-    fun (name, body) = funDSimple name [_'] body
-
-withPure :: Exp -> Exp
-withPure = AppE (VarE 'pure)
-
-typeNameStringE :: TypeName -> Exp
-typeNameStringE = LitE . StringL . (unpack . unpackName)
-
-constraintTypeable :: Type -> Q Type
-constraintTypeable name = pure $ apply ''Typeable [name]
-
-mkTypeableConstraints :: [Name] -> CxtQ
-mkTypeableConstraints = cxt . map constraintTypeable . vars
diff --git a/src/Data/Morpheus/Server/Types/DirectiveDefinitions.hs b/src/Data/Morpheus/Server/Types/DirectiveDefinitions.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Types/DirectiveDefinitions.hs
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Types.DirectiveDefinitions
-  ( Prefixes (..),
-    Deprecated (..),
-  )
-where
-
-import Data.Morpheus.Server.Types.Directives (GQLDirective (..))
-import Data.Morpheus.Server.Types.GQLType (GQLType (__type))
-import Data.Morpheus.Server.Types.Internal
-import Data.Morpheus.Server.Types.Visitors (VisitEnum, VisitField, VisitType (..))
-import Data.Morpheus.Types.Internal.AST
-  ( DirectiveLocation (..),
-  )
-import qualified Data.Text as T
-import Relude
-
--- | a custom GraphQL directive for adding or removing
--- of prefixes
-data Prefixes = Prefixes
-  { addPrefix :: Text,
-    removePrefix :: Text
-  }
-  deriving (Generic, GQLType)
-
-instance GQLDirective Prefixes where
-  type
-    DIRECTIVE_LOCATIONS Prefixes =
-      '[ 'OBJECT,
-         'ENUM,
-         'INPUT_OBJECT,
-         'UNION,
-         'SCALAR,
-         'INTERFACE
-       ]
-
-instance VisitType Prefixes where
-  visitTypeName Prefixes {addPrefix, removePrefix} name = addPrefix <> T.drop (T.length removePrefix) name
-  visitTypeDescription _ = id
-
--- native GraphQL directive @deprecated
---
-newtype Deprecated = Deprecated
-  { reason :: Maybe Text
-  }
-  deriving
-    ( Generic,
-      VisitEnum,
-      VisitField
-    )
-
-instance GQLType Deprecated where
-  __type _ = mkTypeData "deprecated"
-
-instance GQLDirective Deprecated where
-  type
-    DIRECTIVE_LOCATIONS Deprecated =
-      '[ 'FIELD_DEFINITION,
-         'ENUM_VALUE
-       ]
diff --git a/src/Data/Morpheus/Server/Types/Directives.hs b/src/Data/Morpheus/Server/Types/Directives.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Types/Directives.hs
+++ /dev/null
@@ -1,188 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Types.Directives
-  ( GQLDirective (..),
-    ToLocations (..),
-    getLocations,
-    -- visitors
-    visitTypeName,
-    visitTypeDescription,
-    visitFieldName,
-    visitFieldDescription,
-    visitEnumName,
-    visitEnumDescription,
-  )
-where
-
-import Data.Morpheus.Server.Types.TypeName (getTypename)
-import qualified Data.Morpheus.Server.Types.Visitors as Visitors
-import Data.Morpheus.Types.Internal.AST
-  ( Description,
-    DirectiveLocation (..),
-    FALSE,
-    FieldName,
-    TRUE,
-    TypeName,
-    packName,
-    unpackName,
-  )
-import Relude
-
-type family OR (a :: Bool) (b :: Bool) where
-  OR FALSE FALSE = FALSE
-  OR a b = TRUE
-
-type family INCLUDES (x :: DirectiveLocation) (xs :: [DirectiveLocation]) :: Bool where
-  INCLUDES x '[] = FALSE
-  INCLUDES x (x ': xs) = TRUE
-  INCLUDES x (a ': xs) = INCLUDES x xs
-
-type family OVERLAPS (xs :: [DirectiveLocation]) (ys :: [DirectiveLocation]) :: Bool where
-  OVERLAPS (x ': xs) ys = OR (INCLUDES x ys) (OVERLAPS xs ys)
-  OVERLAPS '[] ys = FALSE
-
--- type VisitorOption (k :: DirectiveLocation) (a :: Type) = VisitorContext a (Allow k (ALLOWED_DIRECTIVE_LOCATIONS a))
-
-class ToLocation (l :: DirectiveLocation) where
-  toLocation :: f l -> DirectiveLocation
-
--- types
-instance ToLocation 'OBJECT where
-  toLocation = const OBJECT
-
-instance ToLocation 'ENUM where
-  toLocation = const ENUM
-
-instance ToLocation 'INPUT_OBJECT where
-  toLocation = const INPUT_OBJECT
-
-instance ToLocation 'UNION where
-  toLocation = const UNION
-
-instance ToLocation 'SCALAR where
-  toLocation = const SCALAR
-
-instance ToLocation 'INTERFACE where
-  toLocation = const INTERFACE
-
--- fields, values
-instance ToLocation 'INPUT_FIELD_DEFINITION where
-  toLocation = const INPUT_FIELD_DEFINITION
-
-instance ToLocation 'ARGUMENT_DEFINITION where
-  toLocation = const ARGUMENT_DEFINITION
-
-instance ToLocation 'FIELD_DEFINITION where
-  toLocation = const FIELD_DEFINITION
-
-instance ToLocation 'ENUM_VALUE where
-  toLocation = const ENUM_VALUE
-
-class ToLocations (k :: [DirectiveLocation]) where
-  toLocations :: f k -> [DirectiveLocation]
-
-instance (ToLocation l, ToLocations ls) => ToLocations (l : ls) where
-  toLocations _ = toLocation (Proxy @l) : toLocations (Proxy @ls)
-
-instance ToLocations '[] where
-  toLocations _ = []
-
-getLocations :: forall f a. ToLocations (DIRECTIVE_LOCATIONS a) => f a -> [DirectiveLocation]
-getLocations _ = toLocations (Proxy :: Proxy (DIRECTIVE_LOCATIONS a))
-
-type ALLOWED (a :: Type) (l :: [DirectiveLocation]) = OVERLAPS l (DIRECTIVE_LOCATIONS a)
-
-type WITH_VISITOR (a :: Type) (f :: Type -> Bool -> Constraint) (l :: [DirectiveLocation]) = f a (ALLOWED a l)
-
--- types
-
-type TYPE_VISITOR_KIND = '[ 'OBJECT, 'ENUM, 'INPUT_OBJECT, 'UNION, 'SCALAR, 'INTERFACE]
-
-type FIELD_VISITOR_KIND = '[ 'INPUT_FIELD_DEFINITION, 'FIELD_DEFINITION]
-
-type ENUM_VISITOR_KIND = '[ 'ENUM_VALUE]
-
-__directiveName :: GQLDirective a => f a -> FieldName
-__directiveName = coerce . getTypename
-
-class
-  ( Typeable a,
-    WITH_VISITOR a VISIT_TYPE TYPE_VISITOR_KIND,
-    WITH_VISITOR a VISIT_FIELD FIELD_VISITOR_KIND,
-    WITH_VISITOR a VISIT_ENUM ENUM_VISITOR_KIND
-  ) =>
-  GQLDirective a
-  where
-  type DIRECTIVE_LOCATIONS a :: [DirectiveLocation]
-
--- TYPE VISITORS
-
-visitTypeName :: forall a. GQLDirective a => a -> TypeName -> TypeName
-visitTypeName = __visitTypeName (Proxy :: Proxy (ALLOWED a TYPE_VISITOR_KIND))
-
-visitTypeDescription :: forall a. GQLDirective a => a -> Maybe Description -> Maybe Description
-visitTypeDescription = __visitTypeDescription (Proxy :: Proxy (ALLOWED a TYPE_VISITOR_KIND))
-
-class VISIT_TYPE a (t :: Bool) where
-  __visitTypeName :: f t -> a -> TypeName -> TypeName
-  __visitTypeDescription :: f t -> a -> Maybe Description -> Maybe Description
-
-instance VISIT_TYPE a 'False where
-  __visitTypeName _ _ = id
-  __visitTypeDescription _ _ = id
-
-instance Visitors.VisitType a => VISIT_TYPE a TRUE where
-  __visitTypeName _ x name = packName $ Visitors.visitTypeName x (unpackName name)
-  __visitTypeDescription _ = Visitors.visitTypeDescription
-
--- FIELD VISITORS
-
-visitFieldName :: forall a. GQLDirective a => a -> FieldName -> FieldName
-visitFieldName = __visitFieldName (Proxy :: Proxy (ALLOWED a FIELD_VISITOR_KIND))
-
-visitFieldDescription :: forall a. GQLDirective a => a -> Maybe Description -> Maybe Description
-visitFieldDescription = __visitFieldDescription (Proxy :: Proxy (ALLOWED a FIELD_VISITOR_KIND))
-
-class VISIT_FIELD a (t :: Bool) where
-  __visitFieldName :: f t -> a -> FieldName -> FieldName
-  __visitFieldDescription :: f t -> a -> Maybe Description -> Maybe Description
-
-instance VISIT_FIELD a FALSE where
-  __visitFieldName _ _ = id
-  __visitFieldDescription _ _ = id
-
-instance Visitors.VisitField a => VISIT_FIELD a TRUE where
-  __visitFieldName _ x name = packName $ Visitors.visitFieldName x (unpackName name)
-  __visitFieldDescription _ = Visitors.visitFieldDescription
-
--- VISIT_ENUM
-
-visitEnumName :: forall a. GQLDirective a => a -> FieldName -> FieldName
-visitEnumName = __visitEnumName (Proxy :: Proxy (ALLOWED a ENUM_VISITOR_KIND))
-
-visitEnumDescription :: forall a. GQLDirective a => a -> Maybe Description -> Maybe Description
-visitEnumDescription = __visitEnumDescription (Proxy :: Proxy (ALLOWED a ENUM_VISITOR_KIND))
-
-class VISIT_ENUM a (t :: Bool) where
-  __visitEnumName :: f t -> a -> FieldName -> FieldName
-  __visitEnumDescription :: f t -> a -> Maybe Description -> Maybe Description
-
-instance VISIT_ENUM a FALSE where
-  __visitEnumName _ _ = id
-  __visitEnumDescription _ _ = id
-
-instance Visitors.VisitEnum a => VISIT_ENUM a TRUE where
-  __visitEnumName _ x name = packName $ Visitors.visitEnumName x (unpackName name)
-  __visitEnumDescription _ = Visitors.visitEnumDescription
diff --git a/src/Data/Morpheus/Server/Types/GQLType.hs b/src/Data/Morpheus/Server/Types/GQLType.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Types/GQLType.hs
+++ /dev/null
@@ -1,409 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DefaultSignatures #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE Rank2Types #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Types.GQLType
-  ( GQLType
-      ( KIND,
-        description,
-        getDescriptions,
-        typeOptions,
-        getDirectives,
-        defaultValues,
-        directives,
-        __type,
-        __isEmptyType
-      ),
-    __typeData,
-    deriveTypename,
-    deriveFingerprint,
-    encodeArguments,
-    DirectiveUsage (..),
-    DeriveArguments (..),
-    applyOnTypeName,
-    DirectiveUsages (..),
-    typeDirective,
-    fieldDirective,
-    enumDirective,
-  )
-where
-
--- MORPHEUS
-
-import Control.Monad.Except (MonadError (throwError))
-import qualified Data.HashMap.Strict as M
-import Data.Morpheus.App.Internal.Resolving
-  ( Resolver,
-    SubscriptionField,
-  )
-import Data.Morpheus.Internal.Ext
-import Data.Morpheus.Internal.Utils
-import Data.Morpheus.Kind
-  ( CUSTOM,
-    DerivingKind (..),
-    SCALAR,
-    TYPE,
-    WRAPPER,
-  )
-import Data.Morpheus.NamedResolvers (NamedResolverT (..))
-import Data.Morpheus.Server.Deriving.Utils (ConsRep (..), DataType (..), DeriveWith, FieldRep (..))
-import Data.Morpheus.Server.Deriving.Utils.DeriveGType (DeriveValueOptions (..), deriveValue)
-import Data.Morpheus.Server.Deriving.Utils.Kinded (CategoryValue (..), KindedProxy (KindedProxy), kinded)
-import Data.Morpheus.Server.Deriving.Utils.Proxy (ContextValue (..))
-import Data.Morpheus.Server.Types.Directives
-  ( GQLDirective (..),
-    ToLocations,
-    visitTypeName,
-  )
-import Data.Morpheus.Server.Types.Internal
-  ( GQLTypeOptions (..),
-    TypeData (..),
-    defaultTypeOptions,
-    mkTypeData,
-    prefixInputs,
-  )
-import Data.Morpheus.Server.Types.SchemaT (SchemaT)
-import Data.Morpheus.Server.Types.TypeName
-  ( TypeFingerprint,
-    getFingerprint,
-    getTypename,
-  )
-import Data.Morpheus.Server.Types.Types
-  ( Arg,
-    Pair,
-    TypeGuard,
-    Undefined (..),
-  )
-import Data.Morpheus.Types.GQLScalar (EncodeScalar (..))
-import Data.Morpheus.Types.GQLWrapper (EncodeWrapperValue (..))
-import Data.Morpheus.Types.ID (ID)
-import Data.Morpheus.Types.Internal.AST
-  ( Argument (..),
-    Arguments,
-    ArgumentsDefinition,
-    CONST,
-    Description,
-    Directives,
-    FieldName,
-    IN,
-    OUT,
-    ObjectEntry (..),
-    Position (..),
-    TypeCategory (..),
-    TypeName,
-    TypeWrapper (..),
-    Value (..),
-    internal,
-    mkBaseType,
-    packName,
-    toNullable,
-    unpackName,
-  )
-import Data.Sequence (Seq)
-import Data.Text
-  ( pack,
-    unpack,
-  )
-import Data.Vector (Vector)
-import GHC.Generics
-import Relude hiding (Seq, Undefined, fromList, intercalate)
-
-__typeData ::
-  forall kinded (kind :: TypeCategory) (a :: Type).
-  (GQLType a, CategoryValue kind) =>
-  kinded kind a ->
-  TypeData
-__typeData proxy = __type proxy (categoryValue (Proxy @kind))
-
-deriveTypename :: (GQLType a, CategoryValue kind) => kinded kind a -> TypeName
-deriveTypename proxy = gqlTypeName $ __typeData proxy
-
-deriveFingerprint :: (GQLType a, CategoryValue kind) => kinded kind a -> TypeFingerprint
-deriveFingerprint proxy = gqlFingerprint $ __typeData proxy
-
-deriveTypeData :: Typeable a => f a -> (Bool -> String -> String) -> TypeCategory -> TypeData
-deriveTypeData proxy typeNameModifier cat =
-  TypeData
-    { gqlTypeName = packName . pack $ typeNameModifier (cat == IN) originalTypeName,
-      gqlWrappers = mkBaseType,
-      gqlFingerprint = getFingerprint cat proxy
-    }
-  where
-    originalTypeName = unpack . unpackName $ getTypename proxy
-
-list :: TypeWrapper -> TypeWrapper
-list = flip TypeList True
-
-wrapper :: (TypeWrapper -> TypeWrapper) -> TypeData -> TypeData
-wrapper f TypeData {..} = TypeData {gqlWrappers = f gqlWrappers, ..}
-
--- | GraphQL type, every graphQL type should have an instance of 'GHC.Generics.Generic' and 'GQLType'.
---
---  @
---    ... deriving (Generic, GQLType)
---  @
---
--- if you want to add description
---
---  @
---       ... deriving (Generic)
---
---     instance GQLType ... where
---       description = const "your description ..."
---  @
-{-# DEPRECATED getDirectives "use: directives" #-}
-
-class GQLType a where
-  type KIND a :: DerivingKind
-  type KIND a = TYPE
-
-  -- | A description of the type.
-  --
-  -- Used for documentation in the GraphQL schema.
-  description :: f a -> Maybe Text
-  description _ = Nothing
-
-  directives :: f a -> DirectiveUsages
-  directives _ = mempty
-
-  -- | A dictionary of descriptions for fields, keyed on field name.
-  --
-  -- Used for documentation in the GraphQL schema.
-  getDescriptions :: f a -> Map Text Description
-  getDescriptions _ = mempty
-
-  typeOptions :: f a -> GQLTypeOptions -> GQLTypeOptions
-  typeOptions _ = id
-
-  getDirectives :: f a -> Map Text (Directives CONST)
-  getDirectives _ = mempty
-
-  defaultValues :: f a -> Map Text (Value CONST)
-  defaultValues _ = mempty
-
-  __isEmptyType :: f a -> Bool
-  __isEmptyType _ = False
-
-  __type :: f a -> TypeCategory -> TypeData
-  default __type :: Typeable a => f a -> TypeCategory -> TypeData
-  __type proxy category = editTypeData derivedType (directives proxy)
-    where
-      derivedType = deriveTypeData proxy typeNameModifier category
-      GQLTypeOptions {typeNameModifier} = typeOptions proxy defaultTypeOptions
-
-instance GQLType Int where
-  type KIND Int = SCALAR
-  __type _ = mkTypeData "Int"
-
-instance GQLType Double where
-  type KIND Double = SCALAR
-  __type _ = mkTypeData "Float"
-
-instance GQLType Float where
-  type KIND Float = SCALAR
-  __type _ = mkTypeData "Float32"
-
-instance GQLType Text where
-  type KIND Text = SCALAR
-  __type _ = mkTypeData "String"
-
-instance GQLType Bool where
-  type KIND Bool = SCALAR
-  __type _ = mkTypeData "Boolean"
-
-instance GQLType ID where
-  type KIND ID = SCALAR
-  __type _ = mkTypeData "ID"
-
--- WRAPPERS
-instance GQLType ()
-
-instance GQLType a => GQLType (Maybe a) where
-  type KIND (Maybe a) = WRAPPER
-  __type _ = wrapper toNullable . __type (Proxy @a)
-
-instance GQLType a => GQLType [a] where
-  type KIND [a] = WRAPPER
-  __type _ = wrapper list . __type (Proxy @a)
-
-instance GQLType a => GQLType (Set a) where
-  type KIND (Set a) = WRAPPER
-  __type _ = __type $ Proxy @[a]
-
-instance GQLType a => GQLType (NonEmpty a) where
-  type KIND (NonEmpty a) = WRAPPER
-  __type _ = __type $ Proxy @[a]
-
-instance GQLType a => GQLType (Seq a) where
-  type KIND (Seq a) = WRAPPER
-  __type _ = __type $ Proxy @[a]
-
-instance GQLType a => GQLType (Vector a) where
-  type KIND (Vector a) = WRAPPER
-  __type _ = __type $ Proxy @[a]
-
-instance GQLType a => GQLType (SubscriptionField a) where
-  type KIND (SubscriptionField a) = WRAPPER
-  __type _ = __type $ Proxy @a
-
-instance (Typeable a, Typeable b, GQLType a, GQLType b) => GQLType (Pair a b) where
-  typeOptions _ = prefixInputs
-
--- Manual
-
-instance Typeable m => GQLType (Undefined m) where
-  type KIND (Undefined m) = CUSTOM
-  __isEmptyType _ = True
-
-instance GQLType b => GQLType (a -> b) where
-  type KIND (a -> b) = CUSTOM
-  __type _ = __type $ Proxy @b
-
-instance (GQLType k, GQLType v, Typeable k, Typeable v) => GQLType (Map k v) where
-  type KIND (Map k v) = CUSTOM
-  __type _ = __type $ Proxy @[Pair k v]
-
-instance GQLType a => GQLType (Resolver o e m a) where
-  type KIND (Resolver o e m a) = CUSTOM
-  __type _ = __type $ Proxy @a
-
-instance (Typeable a, Typeable b, GQLType a, GQLType b) => GQLType (a, b) where
-  __type _ = __type $ Proxy @(Pair a b)
-  typeOptions _ = prefixInputs
-
-instance (GQLType value) => GQLType (Arg name value) where
-  type KIND (Arg name value) = CUSTOM
-  __type _ = __type (Proxy @value)
-
-instance (GQLType interface) => GQLType (TypeGuard interface possibleTypes) where
-  type KIND (TypeGuard interface possibleTypes) = CUSTOM
-  __type _ = __type (Proxy @interface)
-
-instance (GQLType a) => GQLType (Proxy a) where
-  type KIND (Proxy a) = KIND a
-  __type _ = __type (Proxy @a)
-
-instance (GQLType a) => GQLType (NamedResolverT m a) where
-  type KIND (NamedResolverT m a) = CUSTOM
-  __type _ = __type (Proxy :: Proxy a)
-
-type Decode a = EncodeKind (KIND a) a
-
-encodeArguments :: forall a. Decode a => a -> GQLResult (Arguments CONST)
-encodeArguments x = encode x >>= unpackValue
-  where
-    unpackValue (Object v) = pure $ fmap toArgument v
-    unpackValue _ = throwError (internal "TODO: expected arguments!")
-    toArgument ObjectEntry {..} = Argument (Position 0 0) entryName entryValue
-
-encode :: forall a. Decode a => a -> GQLResult (Value CONST)
-encode x = encodeKind (ContextValue x :: ContextValue (KIND a) a)
-
-class EncodeKind (kind :: DerivingKind) (a :: Type) where
-  encodeKind :: ContextValue kind a -> GQLResult (Value CONST)
-
-instance (EncodeWrapperValue f, Decode a) => EncodeKind WRAPPER (f a) where
-  encodeKind = encodeWrapperValue encode . unContextValue
-
-instance (EncodeScalar a) => EncodeKind SCALAR a where
-  encodeKind = pure . Scalar . encodeScalar . unContextValue
-
-instance (EncodeConstraint a) => EncodeKind TYPE a where
-  encodeKind = exploreResolvers . unContextValue
-
-convertNode ::
-  DataType (GQLResult (Value CONST)) ->
-  GQLResult (Value CONST)
-convertNode
-  DataType
-    { tyIsUnion,
-      tyCons = ConsRep {consFields, consName}
-    } = encodeTypeFields consFields
-    where
-      encodeTypeFields ::
-        [FieldRep (GQLResult (Value CONST))] -> GQLResult (Value CONST)
-      encodeTypeFields [] = pure $ Enum consName
-      encodeTypeFields fields | not tyIsUnion = Object <$> (traverse fromField fields >>= fromElems)
-        where
-          fromField FieldRep {fieldSelector, fieldValue} = do
-            entryValue <- fieldValue
-            pure ObjectEntry {entryName = fieldSelector, entryValue}
-      -- Type References --------------------------------------------------------------
-      encodeTypeFields _ = throwError (internal "TODO: union not supported")
-
--- Types & Constrains -------------------------------------------------------
-class (EncodeKind (KIND a) a, GQLType a) => ExplorerConstraint a
-
-instance (EncodeKind (KIND a) a, GQLType a) => ExplorerConstraint a
-
-exploreResolvers :: forall a. EncodeConstraint a => a -> GQLResult (Value CONST)
-exploreResolvers =
-  convertNode
-    . deriveValue
-      ( DeriveValueOptions
-          { __valueApply = encode,
-            __valueTypeName = deriveTypename (KindedProxy :: KindedProxy IN a),
-            __valueGQLOptions = typeOptions (Proxy @a) defaultTypeOptions,
-            __valueGetType = __typeData . kinded (Proxy @IN)
-          } ::
-          DeriveValueOptions IN ExplorerConstraint (GQLResult (Value CONST))
-      )
-
-type EncodeConstraint a =
-  ( Generic a,
-    GQLType a,
-    DeriveWith ExplorerConstraint (GQLResult (Value CONST)) (Rep a)
-  )
-
-class DeriveArguments (k :: DerivingKind) a where
-  deriveArgumentsDefinition :: f k a -> SchemaT OUT (ArgumentsDefinition CONST)
-
--- DIRECTIVES
-
-data DirectiveUsages = DirectiveUsages
-  { typeDirectives :: [DirectiveUsage],
-    fieldDirectives :: M.HashMap FieldName [DirectiveUsage],
-    enumValueDirectives :: M.HashMap TypeName [DirectiveUsage]
-  }
-
-instance Monoid DirectiveUsages where
-  mempty = DirectiveUsages mempty mempty mempty
-
-instance Semigroup DirectiveUsages where
-  DirectiveUsages td1 fd1 ed1 <> DirectiveUsages td2 fd2 ed2 = DirectiveUsages (td1 <> td2) (fd1 <> fd2) (ed1 <> ed2)
-
-type TypeDirectiveConstraint a = (GQLDirective a, GQLType a, Decode a, DeriveArguments (KIND a) a, ToLocations (DIRECTIVE_LOCATIONS a))
-
-typeDirective :: TypeDirectiveConstraint a => a -> DirectiveUsages
-typeDirective x = DirectiveUsages [DirectiveUsage x] mempty mempty
-
-fieldDirective :: TypeDirectiveConstraint a => FieldName -> a -> DirectiveUsages
-fieldDirective fieldName x = DirectiveUsages mempty (M.singleton fieldName [DirectiveUsage x]) mempty
-
-enumDirective :: TypeDirectiveConstraint a => TypeName -> a -> DirectiveUsages
-enumDirective fieldName x = DirectiveUsages mempty mempty (M.singleton fieldName [DirectiveUsage x])
-
-data DirectiveUsage where
-  DirectiveUsage :: (GQLDirective a, GQLType a, Decode a, DeriveArguments (KIND a) a, ToLocations (DIRECTIVE_LOCATIONS a)) => a -> DirectiveUsage
-
-applyOnTypeName :: DirectiveUsage -> TypeName -> TypeName
-applyOnTypeName (DirectiveUsage x) = visitTypeName x
-
-typeNameWithDirectives :: TypeName -> [DirectiveUsage] -> TypeName
-typeNameWithDirectives = foldr applyOnTypeName
-
-editTypeData :: TypeData -> DirectiveUsages -> TypeData
-editTypeData TypeData {..} DirectiveUsages {typeDirectives} = TypeData {gqlTypeName = typeNameWithDirectives gqlTypeName typeDirectives, ..}
diff --git a/src/Data/Morpheus/Server/Types/Internal.hs b/src/Data/Morpheus/Server/Types/Internal.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Types/Internal.hs
+++ /dev/null
@@ -1,98 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Types.Internal
-  ( GQLTypeOptions (..),
-    defaultTypeOptions,
-    TypeData (..),
-    prefixInputs,
-    mkTypeData,
-    dropNamespaceOptions,
-  )
-where
-
--- MORPHEUS
-
-import Data.Char (toLower)
-import Data.Morpheus.Server.Types.TypeName (TypeFingerprint (..))
-import Data.Morpheus.Types.Internal.AST
-  ( TypeKind (..),
-    TypeName,
-    TypeWrapper (..),
-    mkBaseType,
-  )
-import qualified Data.Text as T
-import Relude hiding (Seq, Undefined, intercalate)
-
-data TypeData = TypeData
-  { gqlTypeName :: TypeName,
-    gqlWrappers :: TypeWrapper,
-    gqlFingerprint :: TypeFingerprint
-  }
-  deriving (Show)
-
--- | Options that specify how to map GraphQL field, type, and constructor names
--- to and from their Haskell equivalent.
---
--- Options can be set using record syntax on 'defaultOptions' with the fields
--- below.
-data GQLTypeOptions = GQLTypeOptions
-  { -- | Function applied to field labels.
-    -- Handy for removing common record prefixes for example.
-    fieldLabelModifier :: String -> String,
-    -- | Function applied to constructor tags.
-    constructorTagModifier :: String -> String,
-    -- | Construct a new type name depending on whether it is an input,
-    -- and being given the original type name.
-    typeNameModifier :: Bool -> String -> String
-  }
-
--- | Default encoding 'GQLTypeOptions':
---
--- @
--- 'GQLTypeOptions'
---   { 'fieldLabelModifier'      = id
---   , 'constructorTagModifier'  = id
---   , 'typeNameModifier'        = const id
---   }
--- @
-defaultTypeOptions :: GQLTypeOptions
-defaultTypeOptions =
-  GQLTypeOptions
-    { fieldLabelModifier = id,
-      constructorTagModifier = id,
-      -- default is just a pass through for the original type name
-      typeNameModifier = const id
-    }
-
-prefixInputs :: GQLTypeOptions -> GQLTypeOptions
-prefixInputs options = options {typeNameModifier = \isInput name -> if isInput then "Input" <> name else name}
-
-mkTypeData :: TypeName -> a -> TypeData
-mkTypeData name _ =
-  TypeData
-    { gqlTypeName = name,
-      gqlFingerprint = InternalFingerprint name,
-      gqlWrappers = mkBaseType
-    }
-
-dropPrefix :: Text -> String -> String
-dropPrefix name = drop (T.length name)
-
-stripConstructorNamespace :: Text -> String -> String
-stripConstructorNamespace = dropPrefix
-
-stripFieldNamespace :: Text -> String -> String
-stripFieldNamespace prefix = __uncapitalize . dropPrefix prefix
-  where
-    __uncapitalize [] = []
-    __uncapitalize (x : xs) = toLower x : xs
-
-dropNamespaceOptions :: TypeKind -> Text -> GQLTypeOptions -> GQLTypeOptions
-dropNamespaceOptions KindInterface tName opt =
-  opt
-    { typeNameModifier = const (stripConstructorNamespace "Interface"),
-      fieldLabelModifier = stripFieldNamespace tName
-    }
-dropNamespaceOptions KindEnum tName opt = opt {constructorTagModifier = stripConstructorNamespace tName}
-dropNamespaceOptions _ tName opt = opt {fieldLabelModifier = stripFieldNamespace tName}
diff --git a/src/Data/Morpheus/Server/Types/SchemaT.hs b/src/Data/Morpheus/Server/Types/SchemaT.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Types/SchemaT.hs
+++ /dev/null
@@ -1,215 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveFunctor #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE KindSignatures #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE TupleSections #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Types.SchemaT
-  ( SchemaT,
-    updateSchema,
-    insertType,
-    TypeFingerprint (..),
-    toSchema,
-    withInput,
-    extendImplements,
-    insertDirectiveDefinition,
-    outToAny,
-  )
-where
-
-import Control.Monad.Except (MonadError (..))
-import qualified Data.Map as Map
-import Data.Morpheus.Internal.Ext (GQLResult)
-import Data.Morpheus.Server.Types.TypeName
-import Data.Morpheus.Types.Internal.AST
-  ( ANY,
-    CONST,
-    DirectiveDefinition,
-    GQLError,
-    IN,
-    OBJECT,
-    OUT,
-    Schema,
-    TypeCategory (..),
-    TypeContent (..),
-    TypeDefinition (..),
-    TypeName,
-    defineDirective,
-    defineSchemaWith,
-    msg,
-    toAny,
-  )
-import Relude hiding (empty)
-
-data SchemaState where
-  SchemaState ::
-    { typeDefinitions :: Map TypeFingerprint (TypeDefinition ANY CONST),
-      implements :: Map TypeName [TypeName],
-      directiveDefinitions :: Map TypeFingerprint (DirectiveDefinition CONST)
-    } ->
-    SchemaState
-
-emptyMyMap :: SchemaState
-emptyMyMap =
-  SchemaState
-    { typeDefinitions = Map.empty,
-      implements = Map.empty,
-      directiveDefinitions = Map.empty
-    }
-
--- Helper Functions
-newtype SchemaT (cat :: TypeCategory) a = SchemaT
-  { runSchemaT ::
-      GQLResult
-        ( a,
-          [SchemaState -> GQLResult SchemaState]
-        )
-  }
-  deriving (Functor)
-
-instance MonadError GQLError (SchemaT c) where
-  throwError = SchemaT . throwError
-  catchError (SchemaT mx) f = SchemaT (catchError mx (runSchemaT . f))
-
-instance Applicative (SchemaT c) where
-  pure = SchemaT . pure . (,[])
-  (SchemaT v1) <*> (SchemaT v2) = SchemaT $ do
-    (f, u1) <- v1
-    (a, u2) <- v2
-    pure (f a, u1 <> u2)
-
-instance Monad (SchemaT c) where
-  return = pure
-  (SchemaT v1) >>= f =
-    SchemaT $ do
-      (x, up1) <- v1
-      (y, up2) <- runSchemaT (f x)
-      pure (y, up1 <> up2)
-
-toSchema ::
-  SchemaT
-    c
-    ( TypeDefinition OBJECT CONST,
-      Maybe (TypeDefinition OBJECT CONST),
-      Maybe (TypeDefinition OBJECT CONST)
-    ) ->
-  GQLResult (Schema CONST)
-toSchema (SchemaT v) = do
-  ((q, m, s), typeDefs) <- v
-  SchemaState {typeDefinitions, implements, directiveDefinitions} <- execUpdates emptyMyMap typeDefs
-  types <- map (insertImplements implements) <$> checkTypeCollisions (Map.toList typeDefinitions)
-  schema <- defineSchemaWith types (Just q, m, s)
-  foldlM defineDirective schema directiveDefinitions
-
-insertImplements :: Map TypeName [TypeName] -> TypeDefinition c CONST -> TypeDefinition c CONST
-insertImplements x TypeDefinition {typeContent = DataObject {..}, ..} =
-  TypeDefinition
-    { typeContent =
-        DataObject
-          { objectImplements = objectImplements <> implements,
-            ..
-          },
-      ..
-    }
-  where
-    implements :: [TypeName]
-    implements = Map.findWithDefault [] typeName x
-insertImplements _ t = t
-
-withInput :: SchemaT IN a -> SchemaT OUT a
-withInput (SchemaT x) = SchemaT x
-
-outToAny :: SchemaT OUT a -> SchemaT k' a
-outToAny (SchemaT x) = SchemaT x
-
-checkTypeCollisions :: [(TypeFingerprint, TypeDefinition k a)] -> GQLResult [TypeDefinition k a]
-checkTypeCollisions = fmap Map.elems . foldlM collectTypes Map.empty
-  where
-    collectTypes :: Map (TypeName, TypeFingerprint) (TypeDefinition k a) -> (TypeFingerprint, TypeDefinition k a) -> GQLResult (Map (TypeName, TypeFingerprint) (TypeDefinition k a))
-    collectTypes accum (fp, typ) = maybe addType (handleCollision typ) (key `Map.lookup` accum)
-      where
-        addType = pure $ Map.insert key typ accum
-        key = (typeName typ, withSameCategory fp)
-        handleCollision t1@TypeDefinition {typeContent = DataEnum {}} t2 | t1 == t2 = pure accum
-        handleCollision TypeDefinition {typeContent = DataScalar {}} TypeDefinition {typeContent = DataScalar {}} = pure accum
-        handleCollision TypeDefinition {typeName = name1} _ = failureRequirePrefix name1
-
-failureRequirePrefix :: TypeName -> GQLResult b
-failureRequirePrefix typename =
-  throwError $
-    "It appears that the Haskell type "
-      <> msg typename
-      <> " was used as both input and output type, which is not allowed by GraphQL specifications."
-      <> "\n\n "
-      <> "If you supply \"typeNameModifier\" in \"GQLType.typeOptions\", "
-      <> "you can override the default type names for "
-      <> msg typename
-      <> " to solve this problem."
-
-withSameCategory :: TypeFingerprint -> TypeFingerprint
-withSameCategory (TypeableFingerprint _ xs) = TypeableFingerprint OUT xs
-withSameCategory x = x
-
-execUpdates :: Monad m => a -> [a -> m a] -> m a
-execUpdates = foldlM (&)
-
-insertType :: TypeDefinition cat CONST -> SchemaT cat' ()
-insertType dt = updateSchema (CustomFingerprint (typeName dt)) (const $ pure dt) ()
-
-updateSchema ::
-  TypeFingerprint ->
-  (a -> SchemaT cat' (TypeDefinition cat CONST)) ->
-  a ->
-  SchemaT cat' ()
-updateSchema InternalFingerprint {} _ _ = SchemaT $ pure ((), [])
-updateSchema fingerprint f x =
-  SchemaT $ pure ((), [upLib])
-  where
-    upLib :: SchemaState -> GQLResult SchemaState
-    upLib schema
-      | Map.member fingerprint (typeDefinitions schema) = pure schema
-      | otherwise = do
-          (type', updates) <- runSchemaT (f x)
-          execUpdates schema (update type' : updates)
-      where
-        update t schemaState =
-          pure
-            schemaState
-              { typeDefinitions = Map.insert fingerprint (toAny t) (typeDefinitions schemaState)
-              }
-
-insertDirectiveDefinition ::
-  TypeFingerprint ->
-  (a -> SchemaT cat' (DirectiveDefinition CONST)) ->
-  a ->
-  SchemaT cat' ()
-insertDirectiveDefinition InternalFingerprint {} _ _ = SchemaT $ pure ((), [])
-insertDirectiveDefinition fingerprint f x =
-  SchemaT $ pure ((), [upLib])
-  where
-    upLib :: SchemaState -> GQLResult SchemaState
-    upLib schema
-      | Map.member fingerprint (typeDefinitions schema) = pure schema
-      | otherwise = do
-          (type', updates) <- runSchemaT (f x)
-          execUpdates schema (update type' : updates)
-      where
-        update t schemaState =
-          pure
-            schemaState
-              { directiveDefinitions = Map.insert fingerprint t (directiveDefinitions schemaState)
-              }
-
-extendImplements :: TypeName -> [TypeName] -> SchemaT cat' ()
-extendImplements interface types = SchemaT $ pure ((), [upLib])
-  where
-    -- TODO: what happens if interface name collides?
-    upLib :: SchemaState -> GQLResult SchemaState
-    upLib schema = pure schema {implements = foldr insertInterface (implements schema) types}
-    insertInterface :: TypeName -> Map TypeName [TypeName] -> Map TypeName [TypeName]
-    insertInterface = Map.alter (Just . (interface :) . fromMaybe [])
diff --git a/src/Data/Morpheus/Server/Types/TypeName.hs b/src/Data/Morpheus/Server/Types/TypeName.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Types/TypeName.hs
+++ /dev/null
@@ -1,86 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE Rank2Types #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Types.TypeName
-  ( getTypename,
-    getTypeConstructorNames,
-    getFingerprint,
-    TypeFingerprint (..),
-  )
-where
-
--- MORPHEUS
-
-import Data.Data (tyConFingerprint)
-import Data.Morpheus.App.Internal.Resolving
-  ( Resolver,
-  )
-import Data.Morpheus.NamedResolvers (NamedResolverT (..))
-import Data.Morpheus.Server.Types.Types
-  ( Pair,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( TypeCategory,
-    TypeName,
-    packName,
-  )
-import Data.Text
-  ( intercalate,
-    pack,
-  )
-import Data.Typeable
-  ( TyCon,
-    TypeRep,
-    splitTyConApp,
-    tyConName,
-    typeRep,
-    typeRepTyCon,
-  )
-import GHC.Fingerprint
-import Relude hiding (Seq, Undefined, intercalate)
-
-data TypeFingerprint
-  = TypeableFingerprint TypeCategory [Fingerprint]
-  | InternalFingerprint TypeName
-  | CustomFingerprint TypeName
-  deriving
-    ( Generic,
-      Show,
-      Eq,
-      Ord
-    )
-
-getTypename :: Typeable a => f a -> TypeName
-getTypename = packName . intercalate "" . getTypeConstructorNames
-
-getTypeConstructorNames :: Typeable a => f a -> [Text]
-getTypeConstructorNames = fmap (pack . tyConName . replacePairCon) . getTypeConstructors
-
-getTypeConstructors :: Typeable a => f a -> [TyCon]
-getTypeConstructors = ignoreResolver . splitTyConApp . typeRep
-
--- | replaces typeName (A,B) with Pair_A_B
-replacePairCon :: TyCon -> TyCon
-replacePairCon x | hsPair == x = gqlPair
-  where
-    hsPair = typeRepTyCon $ typeRep $ Proxy @(Int, Int)
-    gqlPair = typeRepTyCon $ typeRep $ Proxy @(Pair Int Int)
-replacePairCon x = x
-
--- Ignores Resolver name  from typeName
-ignoreResolver :: (TyCon, [TypeRep]) -> [TyCon]
-ignoreResolver (con, _) | con == typeRepTyCon (typeRep $ Proxy @Resolver) = []
-ignoreResolver (con, _) | con == typeRepTyCon (typeRep $ Proxy @NamedResolverT) = []
-ignoreResolver (con, args) =
-  con : concatMap (ignoreResolver . splitTyConApp) args
-
-getFingerprint :: Typeable a => TypeCategory -> f a -> TypeFingerprint
-getFingerprint category = TypeableFingerprint category . fmap tyConFingerprint . getTypeConstructors
diff --git a/src/Data/Morpheus/Server/Types/Types.hs b/src/Data/Morpheus/Server/Types/Types.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Types/Types.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE KindSignatures #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Types.Types
-  ( Undefined (..),
-    Pair (..),
-    TypeGuard (..),
-    Arg (..),
-  )
-where
-
-import Data.Kind (Type)
-import GHC.Generics
-  ( Generic,
-  )
-import GHC.TypeLits (Symbol)
-import Prelude (Bool, Show)
-
-newtype Undefined (m :: Type -> Type) = Undefined Bool deriving (Show, Generic)
-
-data Pair k v = Pair k v deriving (Generic)
-
-data TypeGuard interface union
-  = ResolveInterface interface
-  | ResolveType union
-
-newtype Arg (name :: Symbol) a = Arg {argValue :: a}
-  deriving
-    ( Show,
-      Generic
-    )
diff --git a/src/Data/Morpheus/Server/Types/Visitors.hs b/src/Data/Morpheus/Server/Types/Visitors.hs
deleted file mode 100644
--- a/src/Data/Morpheus/Server/Types/Visitors.hs
+++ /dev/null
@@ -1,40 +0,0 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Data.Morpheus.Server.Types.Visitors
-  ( VisitType (..),
-    VisitField (..),
-    VisitEnum (..),
-  )
-where
-
-import Relude
-
-class VisitType a where
-  visitTypeName :: a -> Text -> Text
-  visitTypeName _ = id
-
-  visitTypeDescription :: a -> Maybe Text -> Maybe Text
-  visitTypeDescription = const id
-
-class VisitField a where
-  visitFieldName :: a -> Text -> Text
-  visitFieldName _ = id
-
-  visitFieldDescription :: a -> Maybe Text -> Maybe Text
-  visitFieldDescription _ = id
-
-class VisitEnum a where
-  visitEnumName :: a -> Text -> Text
-  visitEnumName _ = id
-
-  visitEnumDescription :: a -> Maybe Text -> Maybe Text
-  visitEnumDescription _ = id
diff --git a/src/Data/Morpheus/Types.hs b/src/Data/Morpheus/Types.hs
--- a/src/Data/Morpheus/Types.hs
+++ b/src/Data/Morpheus/Types.hs
@@ -1,12 +1,4 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE NoImplicitPrelude #-}
 
 -- | GQL Types
@@ -78,6 +70,7 @@
     Prefixes (..),
     VisitType (..),
     VisitField (..),
+    Describe (..),
     VisitEnum (..),
     typeDirective,
     fieldDirective,
@@ -91,96 +84,49 @@
 where
 
 import Control.Monad.Except (MonadError (..))
-import Data.Morpheus.App
+import Data.Morpheus.Server.Resolvers
+import Data.Morpheus.Server.Types
   ( App,
-  )
-import Data.Morpheus.App.Internal.Resolving
-  ( PushEvents (..),
-    Resolver,
-    ResolverContext (..),
-    SubscriptionField,
-    WithOperation,
-    pushEvents,
-    subscribe,
-    unsafeInternalContext,
-  )
-import Data.Morpheus.Core
-  ( RenderGQL,
-    render,
-  )
-import Data.Morpheus.NamedResolvers
-  ( NamedResolverT (..),
-    ResolveNamed (..),
-  )
--- FIXME: TO ENABLE DECODE INSTANCE ON DIRECTIVES
-import Data.Morpheus.Server.Deriving.Decode ()
-import Data.Morpheus.Server.Types.DirectiveDefinitions
-import Data.Morpheus.Server.Types.Directives
-import Data.Morpheus.Server.Types.GQLType
-  ( GQLType (..),
-    enumDirective,
-    fieldDirective,
-    typeDirective,
-  )
-import Data.Morpheus.Server.Types.Internal
-  ( GQLTypeOptions (..),
-    defaultTypeOptions,
-    dropNamespaceOptions,
-  )
-import Data.Morpheus.Server.Types.Types
-  ( Arg (..),
-    TypeGuard (..),
-    Undefined (..),
-  )
-import Data.Morpheus.Server.Types.Visitors
-  ( VisitEnum (..),
-    VisitField (..),
-    VisitType (..),
-  )
-import Data.Morpheus.Types.GQLScalar
-  ( DecodeScalar (..),
+    Arg (..),
+    DecodeScalar (..),
+    DecodeWrapper (..),
+    Deprecated (..),
+    Describe (..),
     EncodeScalar (..),
-  )
-import Data.Morpheus.Types.GQLWrapper
-  ( DecodeWrapper (..),
     EncodeWrapper (..),
-  )
-import Data.Morpheus.Types.ID (ID (..))
-import Data.Morpheus.Types.IO
-  ( GQLRequest (..),
+    GQLDirective (..),
+    GQLRequest (..),
     GQLResponse (..),
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( GQLError,
+    GQLType (..),
+    GQLTypeOptions (..),
+    ID (..),
     MUTATION,
+    Prefixes (..),
     QUERY,
+    RenderGQL,
+    Resolver,
+    ResolverContext (..),
     SUBSCRIPTION,
     ScalarValue (..),
+    SubscriptionField,
+    TypeGuard (..),
+    Undefined,
+    VisitEnum (..),
+    VisitField (..),
+    VisitType (..),
+    WithOperation,
+    defaultTypeOptions,
+    dropNamespaceOptions,
+    enumDirective,
+    fieldDirective,
+    render,
+    subscribe,
+    typeDirective,
+    unsafeInternalContext,
   )
+import Data.Morpheus.Types.Internal.AST (GQLError)
 import Relude hiding (Undefined)
 
-class FlexibleResolver (f :: Type -> Type) (a :: k) where
-  type Flexible (m :: Type -> Type) a :: Type
-  type Composed (m :: Type -> Type) f a :: Type
-
-instance FlexibleResolver f (a :: Type) where
-  type Flexible m a = m a
-  type Composed m f a = m (f a)
-
-instance FlexibleResolver f (a :: (Type -> Type) -> Type) where
-  type Flexible m a = m (a m)
-  type Composed m f a = m (f (a m))
-
-type ResolverO o e m a = Flexible (Resolver o e m) a
-
-type ComposedResolver o e m f a = Composed (Resolver o e m) f a
-
-type ResolverQ e m a = Flexible (Resolver QUERY e m) a
-
-type ResolverM e m a = Flexible (Resolver MUTATION e m) a
-
-type ResolverS e m a = Flexible (Resolver SUBSCRIPTION e m) a
-
 {-# DEPRECATED Res "use ResolverQ" #-}
 
 type Res = Resolver QUERY
@@ -217,12 +163,6 @@
 
 type ResolveS e m a = ResolverS e m a
 
-publish :: Monad m => [e] -> Resolver MUTATION e m ()
-publish = pushEvents
-
-constRes :: (WithOperation o, Monad m) => b -> a -> Resolver o e m b
-constRes = const . pure
-
 constMutRes :: Monad m => [e] -> a -> args -> ResolverM e m a
 constMutRes events v = const $ do
   publish events
@@ -239,39 +179,3 @@
 
 liftEither :: (MonadTrans t, Monad (t m), MonadError GQLError (t m)) => Monad m => m (Either String a) -> t m a
 liftEither x = lift x >>= either (throwError . fromString) pure
-
--- | GraphQL Root resolver, also the interpreter generates a GQL schema from it.
---  'queryResolver' is required, 'mutationResolver' and 'subscriptionResolver' are optional,
---  if your schema does not supports __mutation__ or __subscription__ , you can use __()__ for it.
-data
-  RootResolver
-    (m :: Type -> Type)
-    event
-    (query :: (Type -> Type) -> Type)
-    (mutation :: (Type -> Type) -> Type)
-    (subscription :: (Type -> Type) -> Type) = RootResolver
-  { queryResolver :: query (Resolver QUERY event m),
-    mutationResolver :: mutation (Resolver MUTATION event m),
-    subscriptionResolver :: subscription (Resolver SUBSCRIPTION event m)
-  }
-
-defaultRootResolver :: RootResolver m event Undefined Undefined Undefined
-defaultRootResolver =
-  RootResolver
-    { queryResolver = Undefined False,
-      mutationResolver = Undefined False,
-      subscriptionResolver = Undefined False
-    }
-
-data
-  NamedResolvers
-    (m :: Type -> Type)
-    event
-    (qu :: (Type -> Type) -> Type)
-    (mu :: (Type -> Type) -> Type)
-    (su :: (Type -> Type) -> Type)
-  = ( ResolveNamed
-        (Resolver QUERY event m)
-        (qu (NamedResolverT (Resolver QUERY event m)))
-    ) =>
-    NamedResolvers
diff --git a/test/Feature/Collision/CategoryCollisionFail.hs b/test/Feature/Collision/CategoryCollisionFail.hs
deleted file mode 100644
--- a/test/Feature/Collision/CategoryCollisionFail.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-
--- fail if type was used as input and output type without prefixes
-module Feature.Collision.CategoryCollisionFail
-  ( api,
-  )
-where
-
-import Data.Kind (Type)
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text
-  ( Text,
-  )
-import GHC.Generics (Generic)
-
-data Deity = Deity
-  { name :: Text,
-    age :: Int
-  }
-  deriving (Show, Generic, GQLType)
-
-newtype DeityArgs = DeityArgs
-  { input :: Deity
-  }
-  deriving (Show, Generic, GQLType)
-
-newtype Query (m :: Type -> Type) = Query
-  { deity :: DeityArgs -> m Deity
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { deity =
-              const $
-                pure
-                  Deity
-                    { name =
-                        "Morpheus",
-                      age = 1000
-                    }
-          }
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Collision/CategoryCollisionSuccess.hs b/test/Feature/Collision/CategoryCollisionSuccess.hs
deleted file mode 100644
--- a/test/Feature/Collision/CategoryCollisionSuccess.hs
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Collision.CategoryCollisionSuccess
-  ( api,
-  )
-where
-
-import Data.Kind (Type)
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    GQLTypeOptions (..),
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text
-  ( Text,
-  )
-import GHC.Generics (Generic)
-
-data Deity = Deity
-  { name :: Text,
-    age :: Int
-  }
-  deriving (Show, Generic)
-
-nonClashingTypeNameModifier :: Bool -> String -> String
-nonClashingTypeNameModifier True original = "Input" ++ original
-nonClashingTypeNameModifier False original = original
-
-instance GQLType Deity where
-  typeOptions _ opt = opt {typeNameModifier = nonClashingTypeNameModifier}
-
-newtype DeityArgs = DeityArgs
-  { input :: Deity
-  }
-  deriving (Show, Generic, GQLType)
-
-newtype Query (m :: Type -> Type) = Query
-  { deity :: DeityArgs -> m Deity
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { deity =
-              const $
-                pure
-                  Deity
-                    { name =
-                        "Morpheus",
-                      age = 1000
-                    }
-          }
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Collision/NameCollision.hs b/test/Feature/Collision/NameCollision.hs
deleted file mode 100644
--- a/test/Feature/Collision/NameCollision.hs
+++ /dev/null
@@ -1,44 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Collision.NameCollision
-  ( api,
-  )
-where
-
-import Data.Kind (Type)
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text (Text)
-import qualified Feature.Collision.NameCollisionHelper as A2 (A (..))
-import GHC.Generics (Generic)
-
-data A = A
-  { aText :: Text,
-    aInt :: Int
-  }
-  deriving (Generic, GQLType)
-
-data Query (m :: Type -> Type) = Query
-  { a1 :: A,
-    a2 :: A2.A
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver = Query {a1 = A "" 0, a2 = A2.A 0}
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Collision/NameCollisionHelper.hs b/test/Feature/Collision/NameCollisionHelper.hs
deleted file mode 100644
--- a/test/Feature/Collision/NameCollisionHelper.hs
+++ /dev/null
@@ -1,16 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Collision.NameCollisionHelper
-  ( A (..),
-  )
-where
-
-import Data.Morpheus.Types (GQLType)
-import GHC.Generics (Generic)
-
-newtype A = A
-  { bla :: Int
-  }
-  deriving (Generic, GQLType)
diff --git a/test/Feature/Collision/category-collision-fail/query.gql b/test/Feature/Collision/category-collision-fail/query.gql
deleted file mode 100644
--- a/test/Feature/Collision/category-collision-fail/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Deity") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Collision/category-collision-fail/response.json b/test/Feature/Collision/category-collision-fail/response.json
deleted file mode 100644
--- a/test/Feature/Collision/category-collision-fail/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "It appears that the Haskell type \"Deity\" was used as both input and output type, which is not allowed by GraphQL specifications.\n\n If you supply \"typeNameModifier\" in \"GQLType.typeOptions\", you can override the default type names for \"Deity\" to solve this problem."
-    }
-  ]
-}
diff --git a/test/Feature/Collision/category-collision-success/query.gql b/test/Feature/Collision/category-collision-success/query.gql
deleted file mode 100644
--- a/test/Feature/Collision/category-collision-success/query.gql
+++ /dev/null
@@ -1,82 +0,0 @@
-query Get__Type {
-  type: __type(name: "Deity") {
-    ...FullType
-  }
-  input: __type(name: "InputDeity") {
-    ...FullType
-  }
-  query: __type(name: "Query") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Collision/category-collision-success/response.json b/test/Feature/Collision/category-collision-success/response.json
deleted file mode 100644
--- a/test/Feature/Collision/category-collision-success/response.json
+++ /dev/null
@@ -1,119 +0,0 @@
-{
-  "data": {
-    "type": {
-      "kind": "OBJECT",
-      "name": "Deity",
-      "fields": [
-        {
-          "name": "name",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "SCALAR",
-              "name": "String",
-              "ofType": null
-            }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "age",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "SCALAR",
-              "name": "Int",
-              "ofType": null
-            }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    },
-    "input": {
-      "kind": "INPUT_OBJECT",
-      "name": "InputDeity",
-      "fields": null,
-      "inputFields": [
-        {
-          "name": "name",
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "SCALAR",
-              "name": "String",
-              "ofType": null
-            }
-          },
-          "defaultValue": null
-        },
-        {
-          "name": "age",
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "SCALAR",
-              "name": "Int",
-              "ofType": null
-            }
-          },
-          "defaultValue": null
-        }
-      ],
-      "interfaces": null,
-      "enumValues": null,
-      "possibleTypes": null
-    },
-    "query": {
-      "kind": "OBJECT",
-      "name": "Query",
-      "fields": [
-        {
-          "name": "deity",
-          "args": [
-            {
-              "name": "input",
-              "type": {
-                "kind": "NON_NULL",
-                "name": null,
-                "ofType": {
-                  "kind": "INPUT_OBJECT",
-                  "name": "InputDeity",
-                  "ofType": null
-                }
-              },
-              "defaultValue": null
-            }
-          ],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "OBJECT",
-              "name": "Deity",
-              "ofType": null
-            }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Collision/name-collision/query.gql b/test/Feature/Collision/name-collision/query.gql
deleted file mode 100644
--- a/test/Feature/Collision/name-collision/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  name
-}
diff --git a/test/Feature/Collision/name-collision/response.json b/test/Feature/Collision/name-collision/response.json
deleted file mode 100644
--- a/test/Feature/Collision/name-collision/response.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "There can Be only One TypeDefinition Named \"A\"."
-    },
-    {
-      "message": "There can Be only One TypeDefinition Named \"A\"."
-    }
-  ]
-}
diff --git a/test/Feature/Directive/Definition.hs b/test/Feature/Directive/Definition.hs
deleted file mode 100644
--- a/test/Feature/Directive/Definition.hs
+++ /dev/null
@@ -1,99 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Directive.Definition
-  ( api,
-  )
-where
-
-import Data.Kind (Type)
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( Deprecated (..),
-    GQLDirective (..),
-    GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    Prefixes (..),
-    RootResolver (..),
-    Undefined,
-    VisitType (..),
-    defaultRootResolver,
-    enumDirective,
-    fieldDirective,
-    typeDirective,
-  )
-import Data.Morpheus.Types.Internal.AST
-  ( DirectiveLocation (..),
-  )
-import Data.Text (Text)
-import GHC.Generics (Generic)
-
-data MythologyDeity = MythologyDeity
-  { deityName :: Text,
-    deprecatedField :: Maybe Text,
-    deprecatedFieldWithReason :: Bool
-  }
-  deriving (Generic)
-
-data Power = Power
-  { name :: Text,
-    isLimited :: Bool
-  }
-  deriving (GQLType, Generic)
-
-instance GQLDirective Power where
-  type DIRECTIVE_LOCATIONS Power = '[ 'OBJECT]
-
-instance VisitType Power where
-  visitTypeName _ = id
-
-instance GQLType MythologyDeity where
-  directives _ =
-    typeDirective Power {name = "Lightning bolts", isLimited = False}
-      <> typeDirective Prefixes {addPrefix = "", removePrefix = "Mythology"}
-      <> fieldDirective "deprecatedField" Deprecated {reason = Nothing}
-      <> fieldDirective "deprecatedFieldWithReason" Deprecated {reason = Just "this should be deprecated"}
-
-data City
-  = Athens
-  | Sparta
-  | Corinth
-  | Delphi
-  | Argos
-  deriving
-    (Generic)
-
-instance GQLType City where
-  directives _ =
-    enumDirective "Sparta" Deprecated {reason = Nothing}
-      <> enumDirective "Delphi" Deprecated {reason = Just "oracle left the place"}
-      <> enumDirective "Argos" Deprecated {reason = Just "for some reason"}
-
-data Query (m :: Type -> Type) = Query
-  { deity :: MythologyDeity,
-    city :: City
-  }
-  deriving (Generic, GQLType)
-
-root :: RootResolver IO () Query Undefined Undefined
-root =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { deity =
-              MythologyDeity
-                { deityName = "morpheus",
-                  deprecatedField = Nothing,
-                  deprecatedFieldWithReason = False
-                },
-            city = Corinth
-          }
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter root
diff --git a/test/Feature/Directive/definition/introspect-directive/query.gql b/test/Feature/Directive/definition/introspect-directive/query.gql
deleted file mode 100644
--- a/test/Feature/Directive/definition/introspect-directive/query.gql
+++ /dev/null
@@ -1,53 +0,0 @@
-query Get__Type {
-  __schema {
-    directives {
-      name
-      description
-      locations
-      args {
-        ...InputValue
-      }
-    }
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Directive/definition/introspect-directive/response.json b/test/Feature/Directive/definition/introspect-directive/response.json
deleted file mode 100644
--- a/test/Feature/Directive/definition/introspect-directive/response.json
+++ /dev/null
@@ -1,121 +0,0 @@
-{
-  "data": {
-    "__schema": {
-      "directives": [
-        {
-          "args": [
-            {
-              "defaultValue": null,
-              "name": "name",
-              "type": {
-                "kind": "NON_NULL",
-                "name": null,
-                "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
-              }
-            },
-            {
-              "defaultValue": null,
-              "name": "isLimited",
-              "type": {
-                "kind": "NON_NULL",
-                "name": null,
-                "ofType": {
-                  "kind": "SCALAR",
-                  "name": "Boolean",
-                  "ofType": null
-                }
-              }
-            }
-          ],
-          "description": null,
-          "locations": ["OBJECT"],
-          "name": "Power"
-        },
-        {
-          "args": [
-            {
-              "defaultValue": null,
-              "name": "addPrefix",
-              "type": {
-                "kind": "NON_NULL",
-                "name": null,
-                "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
-              }
-            },
-            {
-              "defaultValue": null,
-              "name": "removePrefix",
-              "type": {
-                "kind": "NON_NULL",
-                "name": null,
-                "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
-              }
-            }
-          ],
-          "description": null,
-          "locations": [
-            "OBJECT",
-            "ENUM",
-            "INPUT_OBJECT",
-            "UNION",
-            "SCALAR",
-            "INTERFACE"
-          ],
-          "name": "Prefixes"
-        },
-        {
-          "args": [
-            {
-              "defaultValue": null,
-              "name": "reason",
-              "type": { "kind": "SCALAR", "name": "String", "ofType": null }
-            }
-          ],
-          "description": "\nMarks an element of a GraphQL schema as no longer supported.\n",
-          "locations": ["FIELD_DEFINITION", "ENUM_VALUE"],
-          "name": "deprecated"
-        },
-        {
-          "args": [
-            {
-              "defaultValue": null,
-              "name": "if",
-              "type": {
-                "kind": "NON_NULL",
-                "name": null,
-                "ofType": {
-                  "kind": "SCALAR",
-                  "name": "Boolean",
-                  "ofType": null
-                }
-              }
-            }
-          ],
-          "description": "\nDirects the executor to include this field or fragment only when the `if` argument is true.\n",
-          "locations": ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"],
-          "name": "include"
-        },
-        {
-          "args": [
-            {
-              "defaultValue": null,
-              "name": "if",
-              "type": {
-                "kind": "NON_NULL",
-                "name": null,
-                "ofType": {
-                  "kind": "SCALAR",
-                  "name": "Boolean",
-                  "ofType": null
-                }
-              }
-            }
-          ],
-          "description": "\nDirects the executor to skip this field or fragment when the `if` argument is true.\n",
-          "locations": ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"],
-          "name": "skip"
-        }
-      ]
-    }
-  }
-}
diff --git a/test/Feature/Directive/definition/introspect-enum/query.gql b/test/Feature/Directive/definition/introspect-enum/query.gql
deleted file mode 100644
--- a/test/Feature/Directive/definition/introspect-enum/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  city: __type(name: "City") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Directive/definition/introspect-enum/response.json b/test/Feature/Directive/definition/introspect-enum/response.json
deleted file mode 100644
--- a/test/Feature/Directive/definition/introspect-enum/response.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "data": {
-    "city": {
-      "enumValues": [
-        {
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "name": "Athens"
-        },
-        {
-          "deprecationReason": null,
-          "isDeprecated": true,
-          "name": "Sparta"
-        },
-        {
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "name": "Corinth"
-        },
-        {
-          "deprecationReason": "oracle left the place",
-          "isDeprecated": true,
-          "name": "Delphi"
-        },
-        {
-          "deprecationReason": "for some reason",
-          "isDeprecated": true,
-          "name": "Argos"
-        }
-      ],
-      "fields": null,
-      "inputFields": null,
-      "interfaces": null,
-      "kind": "ENUM",
-      "name": "City",
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Directive/definition/introspect-type/query.gql b/test/Feature/Directive/definition/introspect-type/query.gql
deleted file mode 100644
--- a/test/Feature/Directive/definition/introspect-type/query.gql
+++ /dev/null
@@ -1,79 +0,0 @@
-query Get__Type {
-  deity: __type(name: "Deity") {
-    ...FullType
-  }
-  shouldBeNull: __type(name: "MythologyDeity") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Directive/definition/introspect-type/response.json b/test/Feature/Directive/definition/introspect-type/response.json
deleted file mode 100644
--- a/test/Feature/Directive/definition/introspect-type/response.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
-  "data": {
-    "deity": {
-      "enumValues": null,
-      "fields": [
-        {
-          "args": [],
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "name": "deityName",
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "SCALAR",
-              "name": "String",
-              "ofType": null
-            }
-          }
-        },
-        {
-          "args": [],
-          "deprecationReason": null,
-          "isDeprecated": true,
-          "name": "deprecatedField",
-          "type": {
-            "kind": "SCALAR",
-            "name": "String",
-            "ofType": null
-          }
-        },
-        {
-          "args": [],
-          "deprecationReason": "this should be deprecated",
-          "isDeprecated": true,
-          "name": "deprecatedFieldWithReason",
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "SCALAR",
-              "name": "Boolean",
-              "ofType": null
-            }
-          }
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "kind": "OBJECT",
-      "name": "Deity",
-      "possibleTypes": null
-    },
-    "shouldBeNull": null
-  }
-}
diff --git a/test/Feature/Holistic/API.hs b/test/Feature/Holistic/API.hs
--- a/test/Feature/Holistic/API.hs
+++ b/test/Feature/Holistic/API.hs
@@ -18,9 +18,6 @@
 where
 
 import Control.Monad.Fail (fail)
-import Data.FileEmbed
-  ( makeRelativeToProject,
-  )
 import Data.Morpheus (deriveApp, runApp)
 import Data.Morpheus.Document
   ( importGQLDocument,
@@ -32,6 +29,7 @@
   ( Arg (..),
     DecodeScalar (..),
     Deprecated (..),
+    Describe (..),
     EncodeScalar (..),
     GQLRequest,
     GQLResponse,
@@ -63,7 +61,6 @@
     (+),
     (.),
     (<$>),
-    (=<<),
   )
 
 data TestScalar
@@ -87,9 +84,9 @@
 
 type EVENT = Event Channel ()
 
-importGQLDocumentWithNamespace =<< makeRelativeToProject "test/Feature/Holistic/schema.gql"
+importGQLDocumentWithNamespace "test/Feature/Holistic/schema.gql"
 
-importGQLDocument =<< makeRelativeToProject "test/Feature/Holistic/schema-ext.gql"
+importGQLDocument "test/Feature/Holistic/schema-ext.gql"
 
 alwaysFail :: IO (Either String a)
 alwaysFail = pure $ Left "fail with Either"
diff --git a/test/Feature/Holistic/holistic/introspection/directives/default/response.json b/test/Feature/Holistic/holistic/introspection/directives/default/response.json
--- a/test/Feature/Holistic/holistic/introspection/directives/default/response.json
+++ b/test/Feature/Holistic/holistic/introspection/directives/default/response.json
@@ -6,6 +6,33 @@
           "args": [
             {
               "defaultValue": null,
+              "name": "text",
+              "type": {
+                "kind": "NON_NULL",
+                "name": null,
+                "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
+              }
+            }
+          ],
+          "description": null,
+          "locations": [
+            "ENUM_VALUE",
+            "FIELD_DEFINITION",
+            "INPUT_FIELD_DEFINITION",
+            "OBJECT",
+            "ENUM",
+            "INPUT_OBJECT",
+            "UNION",
+            "SCALAR",
+            "INTERFACE",
+            "ARGUMENT_DEFINITION"
+          ],
+          "name": "Describe"
+        },
+        {
+          "args": [
+            {
+              "defaultValue": null,
               "name": "reason",
               "type": { "kind": "SCALAR", "name": "String", "ofType": null }
             }
diff --git a/test/Feature/Inference/ObjectAndEnum.hs b/test/Feature/Inference/ObjectAndEnum.hs
deleted file mode 100644
--- a/test/Feature/Inference/ObjectAndEnum.hs
+++ /dev/null
@@ -1,46 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Inference.ObjectAndEnum
-  ( api,
-  )
-where
-
-import Data.Kind (Type)
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import GHC.Generics (Generic)
-
-data MyEnum = MyEnum deriving (Generic, GQLType)
-
-newtype MyObject
-  = MyObject Int
-  deriving (Generic, GQLType)
-
-data Query (m :: Type -> Type) = Query
-  { enum :: MyEnum,
-    object :: MyObject
-  }
-  deriving (Generic, GQLType)
-
-root :: RootResolver IO () Query Undefined Undefined
-root =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { enum = MyEnum,
-            object = MyObject 0
-          }
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter root
diff --git a/test/Feature/Inference/TaggedArguments.hs b/test/Feature/Inference/TaggedArguments.hs
deleted file mode 100644
--- a/test/Feature/Inference/TaggedArguments.hs
+++ /dev/null
@@ -1,75 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Inference.TaggedArguments
-  ( api,
-  )
-where
-
-import Data.Kind (Type)
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( Arg (..),
-    GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text
-  ( Text,
-    pack,
-  )
-import GHC.Generics (Generic)
-
-data A = A
-  { a1 :: Text,
-    a2 :: Int
-  }
-  deriving
-    ( Show,
-      Generic,
-      GQLType
-    )
-
-newtype B = B
-  {b1 :: Text}
-  deriving
-    ( Show,
-      Generic,
-      GQLType
-    )
-
-newtype C = C
-  {c1 :: Int}
-  deriving
-    ( Show,
-      Generic,
-      GQLType
-    )
-
-data Query (m :: Type -> Type) = Query
-  { field1 :: A -> B -> C -> m Text,
-    field2 :: A -> Arg "b1" Text -> Arg "c1" Int -> m Text
-  }
-  deriving
-    ( Generic,
-      GQLType
-    )
-
-root :: RootResolver IO () Query Undefined Undefined
-root =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { field1 = \a b c -> pure $ pack $ show (a, b, c),
-            field2 = \a b c -> pure $ pack $ show (a, b, c)
-          }
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter root
diff --git a/test/Feature/Inference/TaggedArgumentsFail.hs b/test/Feature/Inference/TaggedArgumentsFail.hs
deleted file mode 100644
--- a/test/Feature/Inference/TaggedArgumentsFail.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Inference.TaggedArgumentsFail
-  ( api,
-  )
-where
-
-import Data.Kind (Type)
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text
-  ( Text,
-    pack,
-  )
-import GHC.Generics (Generic)
-
-data A = A
-  { a1 :: Text,
-    a2 :: Int
-  }
-  deriving (Show, Generic, GQLType)
-
-newtype B = B
-  {a2 :: Text}
-  deriving (Show, Generic, GQLType)
-
-newtype Query (m :: Type -> Type) = Query
-  { field1 :: A -> B -> m Text
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { field1 = \a b -> pure $ pack $ show (a, b)
-          }
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Inference/TypeGuards.hs b/test/Feature/Inference/TypeGuards.hs
deleted file mode 100644
--- a/test/Feature/Inference/TypeGuards.hs
+++ /dev/null
@@ -1,77 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Inference.TypeGuards
-  ( api,
-  )
-where
-
-import Data.Kind (Type)
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    RootResolver (..),
-    TypeGuard (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text
-  ( Text,
-  )
-import GHC.Generics (Generic)
-
-data Character = Hydra
-  { name :: Text,
-    age :: Int
-  }
-  deriving (Show, Generic, GQLType)
-
-data Deity (m :: Type -> Type) = Deity
-  { name :: Text,
-    age :: Int,
-    power :: Text
-  }
-  deriving (Generic, GQLType)
-
-data Implements (m :: Type -> Type)
-  = ImplementsDeity (Deity m)
-  | Creature {name :: Text, age :: Int}
-  deriving (Generic, GQLType)
-
-type Characters m = TypeGuard Character (Implements m)
-
-newtype Query (m :: Type -> Type) = Query
-  { characters :: [Characters m]
-  }
-  deriving (Generic, GQLType)
-
-resolveCharacters :: [Characters m]
-resolveCharacters =
-  ResolveType
-    <$> [ ImplementsDeity
-            ( Deity
-                { name = "Morpheus",
-                  age = 2000,
-                  power = "Shapeshift"
-                }
-            ),
-          Creature
-            { name = "Lamia",
-              age = 205
-            }
-        ]
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver = Query {characters = resolveCharacters}
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Inference/TypeInference.hs b/test/Feature/Inference/TypeInference.hs
deleted file mode 100644
--- a/test/Feature/Inference/TypeInference.hs
+++ /dev/null
@@ -1,107 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Inference.TypeInference
-  ( api,
-  )
-where
-
-import Data.Kind (Type)
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text
-  ( Text,
-    pack,
-  )
-import GHC.Generics (Generic)
-
-data Power
-  = Thunderbolts
-  | Shapeshift
-  | Hurricanes
-  deriving (Generic, GQLType)
-
-data Deity (m :: Type -> Type) = Deity
-  { name :: Text,
-    power :: Power
-  }
-  deriving (Generic, GQLType)
-
-deityRes :: Deity m
-deityRes = Deity {name = "Morpheus", power = Shapeshift}
-
-data Hydra = Hydra
-  { name :: Text,
-    age :: Int
-  }
-  deriving (Show, Generic, GQLType)
-
-data Monster
-  = MonsterHydra Hydra
-  | Cerberus {name :: Text}
-  | UnidentifiedMonster
-  deriving (Show, Generic, GQLType)
-
-data Character (m :: Type -> Type)
-  = CharacterDeity (Deity m) -- Only <tyCon name><type ref name> should generate direct link
-  | Creature {creatureName :: Text, creatureAge :: Int}
-  | BoxedDeity {boxedDeity :: Deity m}
-  | ScalarRecord {scalarText :: Text}
-  | CharacterAge Int
-  | SomeDeity (Deity m)
-  | SomeCompound Int Text
-  | Zeus
-  | Cronus
-  deriving (Generic, GQLType)
-
-resolveCharacter :: [Character m]
-resolveCharacter =
-  [ CharacterDeity deityRes,
-    Creature {creatureName = "Lamia", creatureAge = 205},
-    BoxedDeity {boxedDeity = deityRes},
-    ScalarRecord {scalarText = "Some Text"},
-    SomeDeity deityRes,
-    CharacterAge 12,
-    SomeCompound 21 "some text",
-    Zeus,
-    Cronus
-  ]
-
-newtype MonsterArgs = MonsterArgs
-  { monster :: Monster
-  }
-  deriving (Show, Generic, GQLType)
-
-data Query (m :: Type -> Type) = Query
-  { deity :: Deity m,
-    character :: [Character m],
-    showMonster :: MonsterArgs -> m Text
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { deity = deityRes,
-            character = resolveCharacter,
-            showMonster
-          }
-    }
-  where
-    showMonster MonsterArgs {monster} = pure (pack $ show monster)
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Inference/UnionType.hs b/test/Feature/Inference/UnionType.hs
deleted file mode 100644
--- a/test/Feature/Inference/UnionType.hs
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Inference.UnionType
-  ( api,
-  )
-where
-
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    ResolverQ,
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text (Text)
-import GHC.Generics (Generic)
-
-data A = A
-  { aText :: Text,
-    aInt :: Int
-  }
-  deriving (Generic, GQLType)
-
-data B = B
-  { bText :: Text,
-    bInt :: Int
-  }
-  deriving (Generic, GQLType)
-
-data C = C
-  { cText :: Text,
-    cInt :: Int
-  }
-  deriving (Generic, GQLType)
-
-data Sum
-  = SumA A
-  | SumB B
-  deriving (Generic, GQLType)
-
-data Query m = Query
-  { union :: m [Sum],
-    fc :: C
-  }
-  deriving (Generic, GQLType)
-
-resolveUnion :: ResolverQ () IO [Sum]
-resolveUnion =
-  return [SumA A {aText = "at", aInt = 1}, SumB B {bText = "bt", bInt = 2}]
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { union = resolveUnion,
-            fc = C {cText = "", cInt = 3}
-          }
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Inference/WrappedType.hs b/test/Feature/Inference/WrappedType.hs
deleted file mode 100644
--- a/test/Feature/Inference/WrappedType.hs
+++ /dev/null
@@ -1,82 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Feature.Inference.WrappedType
-  ( api,
-  )
-where
-
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Subscriptions (Event)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    RootResolver (..),
-    SubscriptionField,
-    constRes,
-    subscribe,
-  )
-import Relude
-
-data Wrapped a b = Wrapped
-  { fieldA :: a,
-    fieldB :: b
-  }
-  deriving (Generic, GQLType)
-
-data WA m = WA
-  { aText :: m Text,
-    aInt :: Int
-  }
-  deriving (Generic, GQLType)
-
-type Wrapped1 = Wrapped Int Int
-
-type Wrapped2 = Wrapped (Wrapped Text Int) Text
-
-data Query m = Query
-  { a1 :: WA m,
-    a2 :: Maybe Wrapped1,
-    a3 :: Maybe Wrapped2
-  }
-  deriving (Generic, GQLType)
-
-data Mutation m = Mutation
-  { mut1 :: Maybe (WA m),
-    mut2 :: Maybe Wrapped1,
-    mut3 :: Maybe Wrapped2
-  }
-  deriving (Generic, GQLType)
-
-data Channel
-  = Channel
-  deriving (Show, Eq)
-
-type EVENT = Event Channel ()
-
-data Subscription (m :: Type -> Type) = Subscription
-  { sub1 :: SubscriptionField (m (Maybe (WA m))),
-    sub2 :: SubscriptionField (m (Maybe Wrapped1)),
-    sub3 :: SubscriptionField (m (Maybe Wrapped2))
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO EVENT Query Mutation Subscription
-rootResolver =
-  RootResolver
-    { queryResolver = Query {a1 = WA {aText = pure "test1", aInt = 0}, a2 = Nothing, a3 = Nothing},
-      mutationResolver = Mutation {mut1 = Nothing, mut2 = Nothing, mut3 = Nothing},
-      subscriptionResolver =
-        Subscription
-          { sub1 = subscribe Channel (pure $ constRes Nothing),
-            sub2 = subscribe Channel (pure $ constRes Nothing),
-            sub3 = subscribe Channel (pure $ constRes Nothing)
-          }
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Inference/object-and-enum/introspection/query.gql b/test/Feature/Inference/object-and-enum/introspection/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/object-and-enum/introspection/query.gql
+++ /dev/null
@@ -1,79 +0,0 @@
-query Get__Type {
-  enum: __type(name: "MyEnum") {
-    ...FullType
-  }
-  object: __type(name: "MyObject") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/object-and-enum/introspection/response.json b/test/Feature/Inference/object-and-enum/introspection/response.json
deleted file mode 100644
--- a/test/Feature/Inference/object-and-enum/introspection/response.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "data": {
-    "enum": {
-      "enumValues": [
-        {
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "name": "MyEnum"
-        }
-      ],
-      "fields": null,
-      "inputFields": null,
-      "interfaces": null,
-      "kind": "ENUM",
-      "name": "MyEnum",
-      "possibleTypes": null
-    },
-    "object": {
-      "enumValues": null,
-      "fields": [
-        {
-          "args": [],
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "name": "_0",
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "SCALAR",
-              "name": "Int",
-              "ofType": null
-            }
-          }
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "kind": "OBJECT",
-      "name": "MyObject",
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/object-and-enum/resolving/query.gql b/test/Feature/Inference/object-and-enum/resolving/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/object-and-enum/resolving/query.gql
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  enum
-  object {
-    _0
-    __typename
-  }
-}
diff --git a/test/Feature/Inference/object-and-enum/resolving/response.json b/test/Feature/Inference/object-and-enum/resolving/response.json
deleted file mode 100644
--- a/test/Feature/Inference/object-and-enum/resolving/response.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "data": {
-    "enum": "MyEnum",
-    "object": { "_0": 0, "__typename": "MyObject" }
-  }
-}
diff --git a/test/Feature/Inference/tagged-arguments-fail/introspection/query.gql b/test/Feature/Inference/tagged-arguments-fail/introspection/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/tagged-arguments-fail/introspection/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Query") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/tagged-arguments-fail/introspection/response.json b/test/Feature/Inference/tagged-arguments-fail/introspection/response.json
deleted file mode 100644
--- a/test/Feature/Inference/tagged-arguments-fail/introspection/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "There can Be only One argument Named \"a2\""
-    }
-  ]
-}
diff --git a/test/Feature/Inference/tagged-arguments-fail/resolving/query.gql b/test/Feature/Inference/tagged-arguments-fail/resolving/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/tagged-arguments-fail/resolving/query.gql
+++ /dev/null
@@ -1,4 +0,0 @@
-query Get__Type {
-  field1(a1: "f1", a2: 2, b1: "f3", c1: 4)
-  field2(a1: "f1", a2: 2, b1: "f3", c1: 4)
-}
diff --git a/test/Feature/Inference/tagged-arguments-fail/resolving/response.json b/test/Feature/Inference/tagged-arguments-fail/resolving/response.json
deleted file mode 100644
--- a/test/Feature/Inference/tagged-arguments-fail/resolving/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "There can Be only One argument Named \"a2\""
-    }
-  ]
-}
diff --git a/test/Feature/Inference/tagged-arguments/introspection/query.gql b/test/Feature/Inference/tagged-arguments/introspection/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/tagged-arguments/introspection/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Query") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/tagged-arguments/introspection/response.json b/test/Feature/Inference/tagged-arguments/introspection/response.json
deleted file mode 100644
--- a/test/Feature/Inference/tagged-arguments/introspection/response.json
+++ /dev/null
@@ -1,110 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "inputFields": null,
-      "name": "Query",
-      "possibleTypes": null,
-      "interfaces": [],
-      "kind": "OBJECT",
-      "enumValues": null,
-      "fields": [
-        {
-          "name": "field1",
-          "type": {
-            "name": null,
-            "kind": "NON_NULL",
-            "ofType": { "name": "String", "kind": "SCALAR", "ofType": null }
-          },
-          "deprecationReason": null,
-          "args": [
-            {
-              "name": "a1",
-              "type": {
-                "name": null,
-                "kind": "NON_NULL",
-                "ofType": { "name": "String", "kind": "SCALAR", "ofType": null }
-              },
-              "defaultValue": null
-            },
-            {
-              "name": "a2",
-              "type": {
-                "name": null,
-                "kind": "NON_NULL",
-                "ofType": { "name": "Int", "kind": "SCALAR", "ofType": null }
-              },
-              "defaultValue": null
-            },
-            {
-              "name": "b1",
-              "type": {
-                "name": null,
-                "kind": "NON_NULL",
-                "ofType": { "name": "String", "kind": "SCALAR", "ofType": null }
-              },
-              "defaultValue": null
-            },
-            {
-              "name": "c1",
-              "type": {
-                "name": null,
-                "kind": "NON_NULL",
-                "ofType": { "name": "Int", "kind": "SCALAR", "ofType": null }
-              },
-              "defaultValue": null
-            }
-          ],
-          "isDeprecated": false
-        },
-        {
-          "name": "field2",
-          "type": {
-            "name": null,
-            "kind": "NON_NULL",
-            "ofType": { "name": "String", "kind": "SCALAR", "ofType": null }
-          },
-          "deprecationReason": null,
-          "args": [
-            {
-              "name": "a1",
-              "type": {
-                "name": null,
-                "kind": "NON_NULL",
-                "ofType": { "name": "String", "kind": "SCALAR", "ofType": null }
-              },
-              "defaultValue": null
-            },
-            {
-              "name": "a2",
-              "type": {
-                "name": null,
-                "kind": "NON_NULL",
-                "ofType": { "name": "Int", "kind": "SCALAR", "ofType": null }
-              },
-              "defaultValue": null
-            },
-            {
-              "name": "b1",
-              "type": {
-                "name": null,
-                "kind": "NON_NULL",
-                "ofType": { "name": "String", "kind": "SCALAR", "ofType": null }
-              },
-              "defaultValue": null
-            },
-            {
-              "name": "c1",
-              "type": {
-                "name": null,
-                "kind": "NON_NULL",
-                "ofType": { "name": "Int", "kind": "SCALAR", "ofType": null }
-              },
-              "defaultValue": null
-            }
-          ],
-          "isDeprecated": false
-        }
-      ]
-    }
-  }
-}
diff --git a/test/Feature/Inference/tagged-arguments/resolving/query.gql b/test/Feature/Inference/tagged-arguments/resolving/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/tagged-arguments/resolving/query.gql
+++ /dev/null
@@ -1,4 +0,0 @@
-query Get__Type {
-  field1(a1: "f1", a2: 2, b1: "f3", c1: 4)
-  field2(a1: "f1", a2: 2, b1: "f3", c1: 4)
-}
diff --git a/test/Feature/Inference/tagged-arguments/resolving/response.json b/test/Feature/Inference/tagged-arguments/resolving/response.json
deleted file mode 100644
--- a/test/Feature/Inference/tagged-arguments/resolving/response.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "data": {
-    "field1": "(A {a1 = \"f1\", a2 = 2},B {b1 = \"f3\"},C {c1 = 4})",
-    "field2": "(A {a1 = \"f1\", a2 = 2},Arg {argValue = \"f3\"},Arg {argValue = 4})"
-  }
-}
diff --git a/test/Feature/Inference/type-guards/introspection/interface/query.gql b/test/Feature/Inference/type-guards/introspection/interface/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-guards/introspection/interface/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Character") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-guards/introspection/interface/response.json b/test/Feature/Inference/type-guards/introspection/interface/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-guards/introspection/interface/response.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "INTERFACE",
-      "possibleTypes": [
-        { "kind": "OBJECT", "ofType": null, "name": "Deity" },
-        { "kind": "OBJECT", "ofType": null, "name": "Creature" }
-      ],
-      "enumValues": null,
-      "interfaces": null,
-      "inputFields": null,
-      "fields": [
-        {
-          "name": "name",
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "type": {
-            "kind": "NON_NULL",
-            "ofType": { "kind": "SCALAR", "ofType": null, "name": "String" },
-            "name": null
-          },
-          "args": []
-        },
-        {
-          "name": "age",
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "type": {
-            "kind": "NON_NULL",
-            "ofType": { "kind": "SCALAR", "ofType": null, "name": "Int" },
-            "name": null
-          },
-          "args": []
-        }
-      ],
-      "name": "Character"
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-guards/introspection/objects/query.gql b/test/Feature/Inference/type-guards/introspection/objects/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-guards/introspection/objects/query.gql
+++ /dev/null
@@ -1,79 +0,0 @@
-query Get__Type {
-  deity: __type(name: "Deity") {
-    ...FullType
-  }
-  creature: __type(name: "Creature") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-guards/introspection/objects/response.json b/test/Feature/Inference/type-guards/introspection/objects/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-guards/introspection/objects/response.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
-  "data": {
-    "deity": {
-      "kind": "OBJECT",
-      "possibleTypes": null,
-      "enumValues": null,
-      "interfaces": [
-        { "kind": "INTERFACE", "ofType": null, "name": "Character" }
-      ],
-      "inputFields": null,
-      "fields": [
-        {
-          "name": "name",
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "type": {
-            "kind": "NON_NULL",
-            "ofType": { "kind": "SCALAR", "ofType": null, "name": "String" },
-            "name": null
-          },
-          "args": []
-        },
-        {
-          "name": "age",
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "type": {
-            "kind": "NON_NULL",
-            "ofType": { "kind": "SCALAR", "ofType": null, "name": "Int" },
-            "name": null
-          },
-          "args": []
-        },
-        {
-          "name": "power",
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "type": {
-            "kind": "NON_NULL",
-            "ofType": { "kind": "SCALAR", "ofType": null, "name": "String" },
-            "name": null
-          },
-          "args": []
-        }
-      ],
-      "name": "Deity"
-    },
-    "creature": {
-      "kind": "OBJECT",
-      "possibleTypes": null,
-      "enumValues": null,
-      "interfaces": [
-        { "kind": "INTERFACE", "ofType": null, "name": "Character" }
-      ],
-      "inputFields": null,
-      "fields": [
-        {
-          "name": "name",
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "type": {
-            "kind": "NON_NULL",
-            "ofType": { "kind": "SCALAR", "ofType": null, "name": "String" },
-            "name": null
-          },
-          "args": []
-        },
-        {
-          "name": "age",
-          "deprecationReason": null,
-          "isDeprecated": false,
-          "type": {
-            "kind": "NON_NULL",
-            "ofType": { "kind": "SCALAR", "ofType": null, "name": "Int" },
-            "name": null
-          },
-          "args": []
-        }
-      ],
-      "name": "Creature"
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-guards/resolving/fail/query.gql b/test/Feature/Inference/type-guards/resolving/fail/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-guards/resolving/fail/query.gql
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  characters {
-    name
-    power
-  }
-}
diff --git a/test/Feature/Inference/type-guards/resolving/fail/response.json b/test/Feature/Inference/type-guards/resolving/fail/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-guards/resolving/fail/response.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Cannot query field \"power\" on type \"Character\".",
-      "locations": [{ "line": 4, "column": 5 }]
-    }
-  ]
-}
diff --git a/test/Feature/Inference/type-guards/resolving/success/interface-fields/query.gql b/test/Feature/Inference/type-guards/resolving/success/interface-fields/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-guards/resolving/success/interface-fields/query.gql
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  characters {
-    name
-    age
-  }
-}
diff --git a/test/Feature/Inference/type-guards/resolving/success/interface-fields/response.json b/test/Feature/Inference/type-guards/resolving/success/interface-fields/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-guards/resolving/success/interface-fields/response.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "data": {
-    "characters": [
-      { "age": 2000, "name": "Morpheus", "__typename": "Deity" },
-      { "age": 205, "name": "Lamia", "__typename": "Creature" }
-    ]
-  }
-}
diff --git a/test/Feature/Inference/type-guards/resolving/success/type-casting/query.gql b/test/Feature/Inference/type-guards/resolving/success/type-casting/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-guards/resolving/success/type-casting/query.gql
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  characters {
-    name
-    age
-    ... on Deity {
-      power
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-guards/resolving/success/type-casting/response.json b/test/Feature/Inference/type-guards/resolving/success/type-casting/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-guards/resolving/success/type-casting/response.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "data": {
-    "characters": [
-      {
-        "__typename": "Deity",
-        "name": "Morpheus",
-        "power": "Shapeshift",
-        "age": 2000
-      },
-      {
-        "__typename": "Creature",
-        "name": "Lamia",
-        "age": 205
-      }
-    ]
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/enum/query.gql b/test/Feature/Inference/type-inference/introspection/enum/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/enum/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Power") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/enum/response.json b/test/Feature/Inference/type-inference/introspection/enum/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/enum/response.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "ENUM",
-      "name": "Power",
-      "fields": null,
-      "inputFields": null,
-      "interfaces": null,
-      "enumValues": [
-        {
-          "name": "Thunderbolts",
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "Shapeshift",
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "Hurricanes",
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/input-union/empty/query.gql b/test/Feature/Inference/type-inference/introspection/input-union/empty/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/input-union/empty/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Unit") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/input-union/empty/response.json b/test/Feature/Inference/type-inference/introspection/input-union/empty/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/input-union/empty/response.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "ENUM",
-      "name": "Unit",
-      "fields": null,
-      "inputFields": null,
-      "interfaces": null,
-      "enumValues": [
-        {
-          "name": "Unit",
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/input-union/input-union/query.gql b/test/Feature/Inference/type-inference/introspection/input-union/input-union/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/input-union/input-union/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Monster") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/input-union/input-union/response.json b/test/Feature/Inference/type-inference/introspection/input-union/input-union/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/input-union/input-union/response.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "INPUT_OBJECT",
-      "name": "Monster",
-      "fields": null,
-      "inputFields": [
-        {
-          "name": "Hydra",
-          "type": {
-            "kind": "INPUT_OBJECT",
-            "name": "Hydra",
-            "ofType": null
-          },
-          "defaultValue": null
-        },
-        {
-          "name": "Cerberus",
-          "type": {
-            "kind": "INPUT_OBJECT",
-            "name": "Cerberus",
-            "ofType": null
-          },
-          "defaultValue": null
-        },
-        {
-          "name": "UnidentifiedMonster",
-          "type": {
-            "kind": "ENUM",
-            "name": "Unit",
-            "ofType": null
-          },
-          "defaultValue": null
-        }
-      ],
-      "interfaces": null,
-      "enumValues": null,
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/inputObject/query.gql b/test/Feature/Inference/type-inference/introspection/inputObject/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/inputObject/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Hydra") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/inputObject/response.json b/test/Feature/Inference/type-inference/introspection/inputObject/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/inputObject/response.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "INPUT_OBJECT",
-      "name": "Hydra",
-      "fields": null,
-      "inputFields": [
-        {
-          "name": "name",
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
-          },
-          "defaultValue": null
-        },
-        {
-          "name": "age",
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null }
-          },
-          "defaultValue": null
-        }
-      ],
-      "interfaces": null,
-      "enumValues": null,
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/object/query.gql b/test/Feature/Inference/type-inference/introspection/object/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/object/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Deity") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/object/response.json b/test/Feature/Inference/type-inference/introspection/object/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/object/response.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "OBJECT",
-      "name": "Deity",
-      "fields": [
-        {
-          "name": "name",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "power",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "ENUM", "name": "Power", "ofType": null }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/union/named-products/query.gql b/test/Feature/Inference/type-inference/introspection/union/named-products/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/union/named-products/query.gql
+++ /dev/null
@@ -1,82 +0,0 @@
-query Get__Type {
-  creature: __type(name: "Creature") {
-    ...FullType
-  }
-  boxedDeity: __type(name: "BoxedDeity") {
-    ...FullType
-  }
-  scalarRecord: __type(name: "ScalarRecord") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/union/named-products/response.json b/test/Feature/Inference/type-inference/introspection/union/named-products/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/union/named-products/response.json
+++ /dev/null
@@ -1,78 +0,0 @@
-{
-  "data": {
-    "creature": {
-      "kind": "OBJECT",
-      "name": "Creature",
-      "fields": [
-        {
-          "name": "creatureName",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "creatureAge",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    },
-    "boxedDeity": {
-      "kind": "OBJECT",
-      "name": "BoxedDeity",
-      "fields": [
-        {
-          "name": "boxedDeity",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "OBJECT", "name": "Deity", "ofType": null }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    },
-    "scalarRecord": {
-      "kind": "OBJECT",
-      "name": "ScalarRecord",
-      "fields": [
-        {
-          "name": "scalarText",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/union/nullary-constructors/query.gql b/test/Feature/Inference/type-inference/introspection/union/nullary-constructors/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/union/nullary-constructors/query.gql
+++ /dev/null
@@ -1,82 +0,0 @@
-query Get__Type {
-  zeus: __type(name: "Zeus") {
-    ...FullType
-  }
-  cronus: __type(name: "Cronus") {
-    ...FullType
-  }
-  empty: __type(name: "Unit") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/union/nullary-constructors/response.json b/test/Feature/Inference/type-inference/introspection/union/nullary-constructors/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/union/nullary-constructors/response.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "data": {
-    "zeus": {
-      "kind": "OBJECT",
-      "name": "Zeus",
-      "fields": [
-        {
-          "name": "_",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "ENUM",
-              "name": "Unit",
-              "ofType": null
-            }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    },
-    "cronus": {
-      "kind": "OBJECT",
-      "name": "Cronus",
-      "fields": [
-        {
-          "name": "_",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "ENUM",
-              "name": "Unit",
-              "ofType": null
-            }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    },
-    "empty": {
-      "kind": "ENUM",
-      "name": "Unit",
-      "fields": null,
-      "inputFields": null,
-      "interfaces": null,
-      "enumValues": [
-        {
-          "name": "Unit",
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/union/positional-products/query.gql b/test/Feature/Inference/type-inference/introspection/union/positional-products/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/union/positional-products/query.gql
+++ /dev/null
@@ -1,79 +0,0 @@
-query Get__Type {
-  someDeity: __type(name: "SomeDeity") {
-    ...FullType
-  }
-  someCompound: __type(name: "SomeCompound") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/union/positional-products/response.json b/test/Feature/Inference/type-inference/introspection/union/positional-products/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/union/positional-products/response.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "data": {
-    "someDeity": {
-      "kind": "OBJECT",
-      "name": "SomeDeity",
-      "fields": [
-        {
-          "name": "_0",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "OBJECT", "name": "Deity", "ofType": null }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    },
-    "someCompound": {
-      "kind": "OBJECT",
-      "name": "SomeCompound",
-      "fields": [
-        {
-          "name": "_0",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "_1",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "SCALAR", "name": "String", "ofType": null }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/union/scalars/query.gql b/test/Feature/Inference/type-inference/introspection/union/scalars/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/union/scalars/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "CharacterAge") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/union/scalars/response.json b/test/Feature/Inference/type-inference/introspection/union/scalars/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/union/scalars/response.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "OBJECT",
-      "name": "CharacterAge",
-      "fields": [
-        {
-          "name": "_0",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": { "kind": "SCALAR", "name": "Int", "ofType": null }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/union/union/query.gql b/test/Feature/Inference/type-inference/introspection/union/union/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/union/union/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Character") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/introspection/union/union/response.json b/test/Feature/Inference/type-inference/introspection/union/union/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/introspection/union/union/response.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "UNION",
-      "name": "Character",
-      "fields": null,
-      "inputFields": null,
-      "interfaces": null,
-      "enumValues": null,
-      "possibleTypes": [
-        { "kind": "OBJECT", "name": "Deity", "ofType": null },
-        { "kind": "OBJECT", "name": "Creature", "ofType": null },
-        { "kind": "OBJECT", "name": "BoxedDeity", "ofType": null },
-        { "kind": "OBJECT", "name": "ScalarRecord", "ofType": null },
-        { "kind": "OBJECT", "name": "CharacterAge", "ofType": null },
-        { "kind": "OBJECT", "name": "SomeDeity", "ofType": null },
-        { "kind": "OBJECT", "name": "SomeCompound", "ofType": null },
-        { "kind": "OBJECT", "name": "Zeus", "ofType": null },
-        { "kind": "OBJECT", "name": "Cronus", "ofType": null }
-      ]
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/resolving/complexUnion/query.gql b/test/Feature/Inference/type-inference/resolving/complexUnion/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/resolving/complexUnion/query.gql
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  character {
-    ## regular union
-    __typename
-    ... on Deity {
-      name
-    }
-
-    ... on Creature {
-      creatureName
-      creatureAge
-    }
-
-    ... on BoxedDeity {
-      boxedDeity {
-        power
-      }
-    }
-
-    ... on ScalarRecord {
-      scalarText
-    }
-
-    ... on CharacterAge {
-      _0
-    }
-
-    ... on SomeDeity {
-      _0 {
-        name
-        power
-      }
-    }
-
-    ... on SomeCompound {
-      _0
-      _1
-    }
-
-    ... on Zeus {
-      _
-    }
-  }
-}
diff --git a/test/Feature/Inference/type-inference/resolving/complexUnion/response.json b/test/Feature/Inference/type-inference/resolving/complexUnion/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/resolving/complexUnion/response.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "data": {
-    "character": [
-      {
-        "__typename": "Deity",
-        "name": "Morpheus"
-      },
-      {
-        "__typename": "Creature",
-        "creatureName": "Lamia",
-        "creatureAge": 205
-      },
-      {
-        "__typename": "BoxedDeity",
-        "boxedDeity": { "power": "Shapeshift" }
-      },
-      {
-        "__typename": "ScalarRecord",
-        "scalarText": "Some Text"
-      },
-      {
-        "__typename": "SomeDeity",
-        "_0": { "name": "Morpheus", "power": "Shapeshift" }
-      },
-      {
-        "__typename": "CharacterAge",
-        "_0": 12
-      },
-      {
-        "__typename": "SomeCompound",
-        "_0": 21,
-        "_1": "some text"
-      },
-      {
-        "__typename": "Zeus",
-        "_": "Unit"
-      },
-      {
-        "__typename": "Cronus"
-      }
-    ]
-  }
-}
diff --git a/test/Feature/Inference/type-inference/resolving/input/fail/query.gql b/test/Feature/Inference/type-inference/resolving/input/fail/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/resolving/input/fail/query.gql
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  empty: showMonster(monster: {})
-  multiple: showMonster(
-    monster: { Hydra: { name: "someName", age: 12 }, UnidentifiedMonster: Unit }
-  )
-}
diff --git a/test/Feature/Inference/type-inference/resolving/input/fail/response.json b/test/Feature/Inference/type-inference/resolving/input/fail/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/resolving/input/fail/response.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Argument \"monster\" got invalid value. Expected type \"Monster!\" found {}. Exclusive input objects must provide a value for at least one field.",
-      "locations": [{ "line": 2, "column": 22 }]
-    },
-    {
-      "message": "Argument \"monster\" got invalid value. Expected type \"Monster!\" found { Hydra: { name: \"someName\", age: 12 }, UnidentifiedMonster: Unit }. Exclusive input objects are not allowed to provide values for multiple fields.",
-      "locations": [{ "line": 4, "column": 5 }]
-    }
-  ]
-}
diff --git a/test/Feature/Inference/type-inference/resolving/input/success/query.gql b/test/Feature/Inference/type-inference/resolving/input/success/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/resolving/input/success/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  object: showMonster(monster: { Hydra: { name: "someName", age: 12 } })
-  record: showMonster(monster: { Cerberus: { name: "someName" } })
-  enum: showMonster(monster: { UnidentifiedMonster: Unit })
-}
diff --git a/test/Feature/Inference/type-inference/resolving/input/success/response.json b/test/Feature/Inference/type-inference/resolving/input/success/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/resolving/input/success/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "object": "MonsterHydra (Hydra {name = \"someName\", age = 12})",
-    "record": "Cerberus {name = \"someName\"}",
-    "enum": "UnidentifiedMonster"
-  }
-}
diff --git a/test/Feature/Inference/type-inference/resolving/object/query.gql b/test/Feature/Inference/type-inference/resolving/object/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/resolving/object/query.gql
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  deity {
-    name
-    power
-  }
-}
diff --git a/test/Feature/Inference/type-inference/resolving/object/response.json b/test/Feature/Inference/type-inference/resolving/object/response.json
deleted file mode 100644
--- a/test/Feature/Inference/type-inference/resolving/object/response.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{ "data": { "deity": { "name": "Morpheus", "power": "Shapeshift" } } }
diff --git a/test/Feature/Inference/union-type/cannotBeSpreadOnType/query.gql b/test/Feature/Inference/union-type/cannotBeSpreadOnType/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/union-type/cannotBeSpreadOnType/query.gql
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  union {
-    ...FC
-  }
-}
-
-fragment FC on C {
-  cText
-}
diff --git a/test/Feature/Inference/union-type/cannotBeSpreadOnType/response.json b/test/Feature/Inference/union-type/cannotBeSpreadOnType/response.json
deleted file mode 100644
--- a/test/Feature/Inference/union-type/cannotBeSpreadOnType/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Fragment \"FC\" cannot be spread here as objects of type \"A\", \"B\" can never be of type \"C\".",
-      "locations": [
-        {
-          "line": 3,
-          "column": 5
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Inference/union-type/fragmentOnAAndB/query.gql b/test/Feature/Inference/union-type/fragmentOnAAndB/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/union-type/fragmentOnAAndB/query.gql
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  union {
-    __typename
-    ...FA
-    ...FB
-  }
-}
-
-fragment FA on A {
-  aText
-}
-
-fragment FB on B {
-  bText
-}
diff --git a/test/Feature/Inference/union-type/fragmentOnAAndB/response.json b/test/Feature/Inference/union-type/fragmentOnAAndB/response.json
deleted file mode 100644
--- a/test/Feature/Inference/union-type/fragmentOnAAndB/response.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "data": {
-    "union": [
-      {
-        "__typename": "A",
-        "aText": "at"
-      },
-      {
-        "__typename": "B",
-        "bText": "bt"
-      }
-    ]
-  }
-}
diff --git a/test/Feature/Inference/union-type/fragmentOnlyOnA/query.gql b/test/Feature/Inference/union-type/fragmentOnlyOnA/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/union-type/fragmentOnlyOnA/query.gql
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  union {
-    ...FA
-  }
-}
-
-fragment FA on A {
-  aText
-}
diff --git a/test/Feature/Inference/union-type/fragmentOnlyOnA/response.json b/test/Feature/Inference/union-type/fragmentOnlyOnA/response.json
deleted file mode 100644
--- a/test/Feature/Inference/union-type/fragmentOnlyOnA/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "data": {
-    "union": [
-      {
-        "aText": "at",
-        "__typename": "A"
-      },
-      {
-        "__typename": "B"
-      }
-    ]
-  }
-}
diff --git a/test/Feature/Inference/union-type/inlineFragment/cannotBeSpreadOnType/query.gql b/test/Feature/Inference/union-type/inlineFragment/cannotBeSpreadOnType/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/union-type/inlineFragment/cannotBeSpreadOnType/query.gql
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  union {
-    ... on C {
-      aText
-    }
-  }
-}
diff --git a/test/Feature/Inference/union-type/inlineFragment/cannotBeSpreadOnType/response.json b/test/Feature/Inference/union-type/inlineFragment/cannotBeSpreadOnType/response.json
deleted file mode 100644
--- a/test/Feature/Inference/union-type/inlineFragment/cannotBeSpreadOnType/response.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Fragment cannot be spread here as objects of type \"A\", \"B\" can never be of type \"C\".",
-      "locations": [{ "line": 3, "column": 5 }]
-    }
-  ]
-}
diff --git a/test/Feature/Inference/union-type/inlineFragment/fragmentOnAAndB/query.gql b/test/Feature/Inference/union-type/inlineFragment/fragmentOnAAndB/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/union-type/inlineFragment/fragmentOnAAndB/query.gql
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  union {
-    __typename
-    ... on A {
-      aText
-    }
-    ... on B {
-      bText
-    }
-  }
-}
diff --git a/test/Feature/Inference/union-type/inlineFragment/fragmentOnAAndB/response.json b/test/Feature/Inference/union-type/inlineFragment/fragmentOnAAndB/response.json
deleted file mode 100644
--- a/test/Feature/Inference/union-type/inlineFragment/fragmentOnAAndB/response.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "data": {
-    "union": [
-      {
-        "__typename": "A",
-        "aText": "at"
-      },
-      {
-        "__typename": "B",
-        "bText": "bt"
-      }
-    ]
-  }
-}
diff --git a/test/Feature/Inference/union-type/selectionWithoutFragmentNotAllowed/query.gql b/test/Feature/Inference/union-type/selectionWithoutFragmentNotAllowed/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/union-type/selectionWithoutFragmentNotAllowed/query.gql
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  union {
-    ...FA
-    aText
-  }
-}
-
-fragment FA on A {
-  aText
-}
diff --git a/test/Feature/Inference/union-type/selectionWithoutFragmentNotAllowed/response.json b/test/Feature/Inference/union-type/selectionWithoutFragmentNotAllowed/response.json
deleted file mode 100644
--- a/test/Feature/Inference/union-type/selectionWithoutFragmentNotAllowed/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Cannot query field \"aText\" on type \"Sum\".",
-      "locations": [
-        {
-          "line": 4,
-          "column": 5
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Inference/wrapped-type/ignoreMutationResolver/query.gql b/test/Feature/Inference/wrapped-type/ignoreMutationResolver/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/wrapped-type/ignoreMutationResolver/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Mutation") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/wrapped-type/ignoreMutationResolver/response.json b/test/Feature/Inference/wrapped-type/ignoreMutationResolver/response.json
deleted file mode 100644
--- a/test/Feature/Inference/wrapped-type/ignoreMutationResolver/response.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "OBJECT",
-      "name": "Mutation",
-      "fields": [
-        {
-          "name": "mut1",
-          "args": [],
-          "type": {
-            "kind": "OBJECT",
-            "name": "WA",
-            "ofType": null
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "mut2",
-          "args": [],
-          "type": {
-            "kind": "OBJECT",
-            "name": "WrappedIntInt",
-            "ofType": null
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "mut3",
-          "args": [],
-          "type": {
-            "kind": "OBJECT",
-            "name": "WrappedWrappedTextIntText",
-            "ofType": null
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/wrapped-type/ignoreQueryResolver/query.gql b/test/Feature/Inference/wrapped-type/ignoreQueryResolver/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/wrapped-type/ignoreQueryResolver/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Query") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/wrapped-type/ignoreQueryResolver/response.json b/test/Feature/Inference/wrapped-type/ignoreQueryResolver/response.json
deleted file mode 100644
--- a/test/Feature/Inference/wrapped-type/ignoreQueryResolver/response.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "OBJECT",
-      "name": "Query",
-      "fields": [
-        {
-          "name": "a1",
-          "args": [],
-          "type": {
-            "kind": "NON_NULL",
-            "name": null,
-            "ofType": {
-              "kind": "OBJECT",
-              "name": "WA",
-              "ofType": null
-            }
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "a2",
-          "args": [],
-          "type": {
-            "kind": "OBJECT",
-            "name": "WrappedIntInt",
-            "ofType": null
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "a3",
-          "args": [],
-          "type": {
-            "kind": "OBJECT",
-            "name": "WrappedWrappedTextIntText",
-            "ofType": null
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/wrapped-type/ignoreSubscriptionResolver/query.gql b/test/Feature/Inference/wrapped-type/ignoreSubscriptionResolver/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/wrapped-type/ignoreSubscriptionResolver/query.gql
+++ /dev/null
@@ -1,76 +0,0 @@
-query Get__Type {
-  __type(name: "Subscription") {
-    ...FullType
-  }
-}
-
-fragment FullType on __Type {
-  kind
-  name
-  fields(includeDeprecated: true) {
-    name
-    args {
-      ...InputValue
-    }
-    type {
-      ...TypeRef
-    }
-    isDeprecated
-    deprecationReason
-  }
-  inputFields {
-    ...InputValue
-  }
-  interfaces {
-    ...TypeRef
-  }
-  enumValues(includeDeprecated: true) {
-    name
-    isDeprecated
-    deprecationReason
-  }
-  possibleTypes {
-    ...TypeRef
-  }
-}
-
-fragment InputValue on __InputValue {
-  name
-  type {
-    ...TypeRef
-  }
-  defaultValue
-}
-
-fragment TypeRef on __Type {
-  kind
-  name
-  ofType {
-    kind
-    name
-    ofType {
-      kind
-      name
-      ofType {
-        kind
-        name
-        ofType {
-          kind
-          name
-          ofType {
-            kind
-            name
-            ofType {
-              kind
-              name
-              ofType {
-                kind
-                name
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/test/Feature/Inference/wrapped-type/ignoreSubscriptionResolver/response.json b/test/Feature/Inference/wrapped-type/ignoreSubscriptionResolver/response.json
deleted file mode 100644
--- a/test/Feature/Inference/wrapped-type/ignoreSubscriptionResolver/response.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "data": {
-    "__type": {
-      "kind": "OBJECT",
-      "name": "Subscription",
-      "fields": [
-        {
-          "name": "sub1",
-          "args": [],
-          "type": {
-            "kind": "OBJECT",
-            "name": "WA",
-            "ofType": null
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "sub2",
-          "args": [],
-          "type": {
-            "kind": "OBJECT",
-            "name": "WrappedIntInt",
-            "ofType": null
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        },
-        {
-          "name": "sub3",
-          "args": [],
-          "type": {
-            "kind": "OBJECT",
-            "name": "WrappedWrappedTextIntText",
-            "ofType": null
-          },
-          "isDeprecated": false,
-          "deprecationReason": null
-        }
-      ],
-      "inputFields": null,
-      "interfaces": [],
-      "enumValues": null,
-      "possibleTypes": null
-    }
-  }
-}
diff --git a/test/Feature/Inference/wrapped-type/validWrappedTypes/query.gql b/test/Feature/Inference/wrapped-type/validWrappedTypes/query.gql
deleted file mode 100644
--- a/test/Feature/Inference/wrapped-type/validWrappedTypes/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  a1 {
-    aText
-  }
-}
diff --git a/test/Feature/Inference/wrapped-type/validWrappedTypes/response.json b/test/Feature/Inference/wrapped-type/validWrappedTypes/response.json
deleted file mode 100644
--- a/test/Feature/Inference/wrapped-type/validWrappedTypes/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "a1": {
-      "aText": "test1"
-    }
-  }
-}
diff --git a/test/Feature/Input/Collections.hs b/test/Feature/Input/Collections.hs
deleted file mode 100644
--- a/test/Feature/Input/Collections.hs
+++ /dev/null
@@ -1,79 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Input.Collections
-  ( api,
-  )
-where
-
-import Data.List.NonEmpty (NonEmpty)
-import Data.Map (Map)
-import Data.Morpheus (deriveApp, runApp)
-import Data.Morpheus.Types
-  ( App,
-    Arg (..),
-    GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    GQLTypeOptions (..),
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Sequence (Seq)
-import Data.Set (Set)
-import Data.Text
-import Data.Vector (Vector)
-import GHC.Generics (Generic)
-
--- query
-testRes :: Applicative m => Arg "value" a -> m a
-testRes = pure . argValue
-
-type Coll m a = Arg "value" a -> m a
-
-data Product = Product Text Int Bool (Maybe Double)
-  deriving (Generic)
-
-instance GQLType Product where
-  typeOptions _ options =
-    options
-      { typeNameModifier = \isInput name -> if isInput then "Input" <> name else name
-      }
-
--- resolver
-data Query m = Query
-  { testSet :: Coll m (Set Int),
-    testNonEmpty :: Coll m (NonEmpty Int),
-    tesSeq :: Coll m (Seq Int),
-    testVector :: Coll m (Vector Int),
-    testProduct :: Coll m Product,
-    testTuple :: Coll m (Text, Int),
-    testMap :: Coll m (Map Text Int),
-    testAssoc :: Coll m [(Text, Int)]
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { testSet = testRes,
-            testNonEmpty = testRes,
-            tesSeq = testRes,
-            testVector = testRes,
-            testTuple = testRes,
-            testProduct = testRes,
-            testMap = testRes,
-            testAssoc = testRes
-          }
-    }
-
-app :: App () IO
-app = deriveApp rootResolver
-
-api :: GQLRequest -> IO GQLResponse
-api = runApp app
diff --git a/test/Feature/Input/Enums.hs b/test/Feature/Input/Enums.hs
deleted file mode 100644
--- a/test/Feature/Input/Enums.hs
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Input.Enums
-  ( api,
-  )
-where
-
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import GHC.Generics (Generic)
-
-data TwoCon
-  = LA
-  | LB
-  deriving (Show, Generic, GQLType)
-
-data ThreeCon
-  = T1
-  | T2
-  | T3
-  deriving (Show, Generic, GQLType)
-
-data Level
-  = L0
-  | L1
-  | L2
-  | L3
-  | L4
-  | L5
-  | L6
-  deriving (Show, Generic, GQLType)
-
--- types & args
-newtype TestArgs a = TestArgs
-  { level :: a
-  }
-  deriving (Generic, Show, GQLType)
-
--- query
-testRes :: Applicative m => TestArgs a -> m a
-testRes TestArgs {level} = pure level
-
--- resolver
-data Query m = Query
-  { test :: TestArgs Level -> m Level,
-    test2 :: TestArgs TwoCon -> m TwoCon,
-    test3 :: TestArgs ThreeCon -> m ThreeCon
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver = Query {test = testRes, test2 = testRes, test3 = testRes}
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Input/Objects.hs b/test/Feature/Input/Objects.hs
deleted file mode 100644
--- a/test/Feature/Input/Objects.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Input.Objects
-  ( api,
-  )
-where
-
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text
-  ( Text,
-    pack,
-  )
-import GHC.Generics (Generic)
-
-data InputObject = InputObject
-  { field :: Text,
-    nullableField :: Maybe Int,
-    recursive :: Maybe InputObject
-  }
-  deriving (Generic, Show, GQLType)
-
--- types & args
-newtype Arg a = Arg
-  { value :: a
-  }
-  deriving (Generic, Show, GQLType)
-
--- query
-testRes :: Show a => Applicative m => Arg a -> m Text
-testRes Arg {value} = pure $ pack $ show value
-
--- resolver
-newtype Query m = Query
-  { input :: Arg InputObject -> m Text
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver = Query {input = testRes}
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Input/Scalars.hs b/test/Feature/Input/Scalars.hs
deleted file mode 100644
--- a/test/Feature/Input/Scalars.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Input.Scalars
-  ( api,
-  )
-where
-
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType,
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text (Text)
-import GHC.Generics (Generic)
-
--- types & args
-newtype Arg a = Arg
-  { value :: a
-  }
-  deriving (Generic, Show, GQLType)
-
--- query
-testRes :: Applicative m => Arg a -> m a
-testRes Arg {value} = pure value
-
--- resolver
-data Query m = Query
-  { testFloat :: Arg Double -> m Double,
-    testInt :: Arg Int -> m Int,
-    testString :: Arg Text -> m Text
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { testFloat = testRes,
-            testInt = testRes,
-            testString = testRes
-          }
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Input/Variables.hs b/test/Feature/Input/Variables.hs
deleted file mode 100644
--- a/test/Feature/Input/Variables.hs
+++ /dev/null
@@ -1,62 +0,0 @@
-{-# LANGUAGE DeriveAnyClass #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-
-module Feature.Input.Variables
-  ( api,
-  )
-where
-
-import Data.Kind (Type)
-import Data.Morpheus (interpreter)
-import Data.Morpheus.Types
-  ( GQLRequest,
-    GQLResponse,
-    GQLType (..),
-    ResolverQ,
-    RootResolver (..),
-    Undefined,
-    defaultRootResolver,
-  )
-import Data.Text (Text)
-import GHC.Generics (Generic)
-
-data F1Args = F1Args
-  { arg1 :: Text,
-    arg2 :: Maybe Int
-  }
-  deriving (Generic, GQLType)
-
-data F2Args = F2Args
-  { argList :: [Text],
-    argNestedList :: [Maybe [[Int]]]
-  }
-  deriving (Generic, GQLType)
-
-data A = A
-  { a1 :: F1Args -> ResolverQ () IO Text,
-    a2 :: F2Args -> ResolverQ () IO Int
-  }
-  deriving (Generic, GQLType)
-
-newtype Query (m :: Type -> Type) = Query
-  { q1 :: A
-  }
-  deriving (Generic, GQLType)
-
-rootResolver :: RootResolver IO () Query Undefined Undefined
-rootResolver =
-  defaultRootResolver
-    { queryResolver =
-        Query
-          { q1 =
-              A
-                { a1 = const $ return "a1Test",
-                  a2 = const $ return 1
-                }
-          }
-    }
-
-api :: GQLRequest -> IO GQLResponse
-api = interpreter rootResolver
diff --git a/test/Feature/Input/collections/assoc/invalid/query.gql b/test/Feature/Input/collections/assoc/invalid/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/assoc/invalid/query.gql
+++ /dev/null
@@ -1,8 +0,0 @@
-query InvalidAssoc {
-  f1: testAssoc(value: {})
-  f2: testAssoc(value: 635)
-  f3: testAssoc(value: [{ _0: "235" }])
-  f4: testAssoc(value: [{ _0: "235", _1: "235235" }])
-  f5: testAssoc(value: [{ _0: "235", _1: false }])
-  f6: testAssoc(value: [{ _0: "34", _1: 2353 }])
-}
diff --git a/test/Feature/Input/collections/assoc/invalid/response.json b/test/Feature/Input/collections/assoc/invalid/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/assoc/invalid/response.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Argument \"value\" got invalid value. Expected type \"[InputPairTextInt!]!\" found {}.",
-      "locations": [{ "line": 2, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Expected type \"[InputPairTextInt!]!\" found 635.",
-      "locations": [{ "line": 3, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_1\".",
-      "locations": [{ "line": 4, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"_1\": Expected type \"Int!\" found \"235235\".",
-      "locations": [{ "line": 5, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"_1\": Expected type \"Int!\" found false.",
-      "locations": [{ "line": 6, "column": 17 }]
-    },
-    {
-      "message": "Field \"testAssoc\" of type \"PairTextInt\" must have a selection of subfields",
-      "locations": [{ "line": 7, "column": 3 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/collections/assoc/ok/query.gql b/test/Feature/Input/collections/assoc/ok/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/assoc/ok/query.gql
+++ /dev/null
@@ -1,19 +0,0 @@
-query ValidAssoc {
-  f1: testAssoc(value: []) {
-    ...Entry
-  }
-  f2: testAssoc(
-    value: [
-      { _0: "zeus", _1: 3468 }
-      { _0: "morpheus", _1: 4236 }
-      { _0: "cronos", _1: 547 }
-    ]
-  ) {
-    ...Entry
-  }
-}
-
-fragment Entry on PairTextInt {
-  _0
-  _1
-}
diff --git a/test/Feature/Input/collections/assoc/ok/response.json b/test/Feature/Input/collections/assoc/ok/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/assoc/ok/response.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "data": {
-    "f2": [
-      { "_0": "zeus", "_1": 3468 },
-      { "_0": "morpheus", "_1": 4236 },
-      { "_0": "cronos", "_1": 547 }
-    ],
-    "f1": []
-  }
-}
diff --git a/test/Feature/Input/collections/map/invalid/query.gql b/test/Feature/Input/collections/map/invalid/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/map/invalid/query.gql
+++ /dev/null
@@ -1,8 +0,0 @@
-query InvalidMap {
-  f1: testMap(value: {})
-  f2: testMap(value: 635)
-  f3: testMap(value: [{ _0: "235" }])
-  f4: testMap(value: [{ _0: "235", _1: "235235" }])
-  f5: testMap(value: [{ _0: "235", _1: false }])
-  f6: testMap(value: [{ _0: "34", _1: 2353 }])
-}
diff --git a/test/Feature/Input/collections/map/invalid/response.json b/test/Feature/Input/collections/map/invalid/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/map/invalid/response.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Argument \"value\" got invalid value. Expected type \"[InputPairTextInt!]!\" found {}.",
-      "locations": [{ "line": 2, "column": 15 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Expected type \"[InputPairTextInt!]!\" found 635.",
-      "locations": [{ "line": 3, "column": 15 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_1\".",
-      "locations": [{ "line": 4, "column": 15 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"_1\": Expected type \"Int!\" found \"235235\".",
-      "locations": [{ "line": 5, "column": 15 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"_1\": Expected type \"Int!\" found false.",
-      "locations": [{ "line": 6, "column": 15 }]
-    },
-    {
-      "message": "Field \"testMap\" of type \"PairTextInt\" must have a selection of subfields",
-      "locations": [{ "line": 7, "column": 3 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/collections/map/ok/query.gql b/test/Feature/Input/collections/map/ok/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/map/ok/query.gql
+++ /dev/null
@@ -1,19 +0,0 @@
-query ValidMap {
-  f1: testMap(value: []) {
-    ...Entry
-  }
-  f2: testMap(
-    value: [
-      { _0: "zeus", _1: 3468 }
-      { _0: "morpheus", _1: 4236 }
-      { _0: "cronos", _1: 547 }
-    ]
-  ) {
-    ...Entry
-  }
-}
-
-fragment Entry on PairTextInt {
-  _0
-  _1
-}
diff --git a/test/Feature/Input/collections/map/ok/response.json b/test/Feature/Input/collections/map/ok/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/map/ok/response.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "data": {
-    "f1": [],
-    "f2": [
-      { "_0": "cronos", "_1": 547 },
-      { "_0": "morpheus", "_1": 4236 },
-      { "_0": "zeus", "_1": 3468 }
-    ]
-  }
-}
diff --git a/test/Feature/Input/collections/nonempty/invalid/query.gql b/test/Feature/Input/collections/nonempty/invalid/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/nonempty/invalid/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query FailOnEmpty {
-  testNonEmpty(value: [])
-}
diff --git a/test/Feature/Input/collections/nonempty/invalid/response.json b/test/Feature/Input/collections/nonempty/invalid/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/nonempty/invalid/response.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Failure on Resolving Field \"testNonEmpty\": Type mismatch! expected:Expected a NonEmpty list, got: []",
-      "locations": [{ "line": 2, "column": 3 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/collections/nonempty/ok/query.gql b/test/Feature/Input/collections/nonempty/ok/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/nonempty/ok/query.gql
+++ /dev/null
@@ -1,4 +0,0 @@
-query ValidNonEmpty {
-  f1: testNonEmpty(value: [32])
-  f2: testNonEmpty(value: [32, 235, 235, 6463, 352123])
-}
diff --git a/test/Feature/Input/collections/nonempty/ok/response.json b/test/Feature/Input/collections/nonempty/ok/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/nonempty/ok/response.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "data": {
-    "f1": [32],
-    "f2": [32, 235, 235, 6463, 352123]
-  }
-}
diff --git a/test/Feature/Input/collections/product/invalid/query.gql b/test/Feature/Input/collections/product/invalid/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/product/invalid/query.gql
+++ /dev/null
@@ -1,9 +0,0 @@
-query InvalidProduct {
-  f1: testProduct(value: [])
-  f2: testProduct(value: {})
-  f3: testProduct(value: { _0: 2 })
-  f4: testProduct(value: { _0: "235" })
-  f4: testProduct(value: { _0: "235", _1: "235235" })
-  f4: testProduct(value: { _0: "235", _1: false })
-  f5: testProduct(value: { _0: "34", _1: 2353, _2: false })
-}
diff --git a/test/Feature/Input/collections/product/invalid/response.json b/test/Feature/Input/collections/product/invalid/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/product/invalid/response.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Argument \"value\" got invalid value. Expected type \"InputProduct!\" found [].",
-      "locations": [{ "line": 2, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_0\".",
-      "locations": [{ "line": 3, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_1\".",
-      "locations": [{ "line": 3, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_2\".",
-      "locations": [{ "line": 3, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_1\".",
-      "locations": [{ "line": 4, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_2\".",
-      "locations": [{ "line": 4, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"_0\": Expected type \"String!\" found 2.",
-      "locations": [{ "line": 4, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_1\".",
-      "locations": [{ "line": 5, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_2\".",
-      "locations": [{ "line": 5, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_2\".",
-      "locations": [{ "line": 6, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"_1\": Expected type \"Int!\" found \"235235\".",
-      "locations": [{ "line": 6, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_2\".",
-      "locations": [{ "line": 7, "column": 19 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"_1\": Expected type \"Int!\" found false.",
-      "locations": [{ "line": 7, "column": 19 }]
-    },
-    {
-      "message": "Field \"testProduct\" of type \"Product\" must have a selection of subfields",
-      "locations": [{ "line": 8, "column": 3 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/collections/product/ok/query.gql b/test/Feature/Input/collections/product/ok/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/product/ok/query.gql
+++ /dev/null
@@ -1,15 +0,0 @@
-query ValidProduct {
-  f1: testProduct(value: { _0: "abc", _1: 4235, _2: true }) {
-    ...Product
-  }
-  f2: testProduct(value: { _0: "324523", _1: 3468, _2: false, _3: 0.635 }) {
-    ...Product
-  }
-}
-
-fragment Product on Product {
-  _0
-  _1
-  _2
-  _3
-}
diff --git a/test/Feature/Input/collections/product/ok/response.json b/test/Feature/Input/collections/product/ok/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/product/ok/response.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "data": {
-    "f1": {
-      "_0": "abc",
-      "_1": 4235,
-      "_2": true,
-      "_3": null
-    },
-    "f2": {
-      "_0": "324523",
-      "_1": 3468,
-      "_2": false,
-      "_3": 0.635
-    }
-  }
-}
diff --git a/test/Feature/Input/collections/seq/query.gql b/test/Feature/Input/collections/seq/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/seq/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query ValidSeq {
-  f1: tesSeq(value: [])
-  f2: tesSeq(value: [32])
-  f3: tesSeq(value: [32, 235, 6463, 352123])
-}
diff --git a/test/Feature/Input/collections/seq/response.json b/test/Feature/Input/collections/seq/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/seq/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "f1": [],
-    "f2": [32],
-    "f3": [32, 235, 6463, 352123]
-  }
-}
diff --git a/test/Feature/Input/collections/set/invalid/query.gql b/test/Feature/Input/collections/set/invalid/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/set/invalid/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query FailSet {
-  f1: testSet(value: [2, 2])
-  f2: testSet(value: [32, 32, 32])
-  f3: testSet(value: [32, 235, 235, 6463, 352123])
-}
diff --git a/test/Feature/Input/collections/set/invalid/response.json b/test/Feature/Input/collections/set/invalid/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/set/invalid/response.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Failure on Resolving Field \"testSet\": Expected a List without duplicates, found 1 duplicates",
-      "locations": [{ "line": 2, "column": 3 }]
-    },
-    {
-      "message": "Failure on Resolving Field \"testSet\": Expected a List without duplicates, found 2 duplicates",
-      "locations": [{ "line": 3, "column": 3 }]
-    },
-    {
-      "message": "Failure on Resolving Field \"testSet\": Expected a List without duplicates, found 1 duplicates",
-      "locations": [{ "line": 4, "column": 3 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/collections/set/ok/query.gql b/test/Feature/Input/collections/set/ok/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/set/ok/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query ValidSet {
-  f1: testSet(value: [])
-  f2: testSet(value: [32])
-  f3: testSet(value: [32, 235, 6463, 352123])
-}
diff --git a/test/Feature/Input/collections/set/ok/response.json b/test/Feature/Input/collections/set/ok/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/set/ok/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "f1": [],
-    "f2": [32],
-    "f3": [32, 235, 6463, 352123]
-  }
-}
diff --git a/test/Feature/Input/collections/tuple/invalid/query.gql b/test/Feature/Input/collections/tuple/invalid/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/tuple/invalid/query.gql
+++ /dev/null
@@ -1,9 +0,0 @@
-query InvalidTuple {
-  f1: testTuple(value: [])
-  f2: testTuple(value: {})
-  f3: testTuple(value: { _0: 2 })
-  f4: testTuple(value: { _0: "235" })
-  f4: testTuple(value: { _0: "235", _1: "235235" })
-  f4: testTuple(value: { _0: "235", _1: false })
-  f5: testTuple(value: { _0: "34", _1: 2353 })
-}
diff --git a/test/Feature/Input/collections/tuple/invalid/response.json b/test/Feature/Input/collections/tuple/invalid/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/tuple/invalid/response.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Argument \"value\" got invalid value. Expected type \"InputPairTextInt!\" found [].",
-      "locations": [{ "line": 2, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_0\".",
-      "locations": [{ "line": 3, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_1\".",
-      "locations": [{ "line": 3, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_1\".",
-      "locations": [{ "line": 4, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"_0\": Expected type \"String!\" found 2.",
-      "locations": [{ "line": 4, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"_1\".",
-      "locations": [{ "line": 5, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"_1\": Expected type \"Int!\" found \"235235\".",
-      "locations": [{ "line": 6, "column": 17 }]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"_1\": Expected type \"Int!\" found false.",
-      "locations": [{ "line": 7, "column": 17 }]
-    },
-    {
-      "message": "Field \"testTuple\" of type \"PairTextInt\" must have a selection of subfields",
-      "locations": [{ "line": 8, "column": 3 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/collections/tuple/ok/query.gql b/test/Feature/Input/collections/tuple/ok/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/tuple/ok/query.gql
+++ /dev/null
@@ -1,10 +0,0 @@
-query ValidTuple {
-  f1: testTuple(value: { _0: "abc", _1: 4235 }) {
-    _0
-    _1
-  }
-  f2: testTuple(value: { _0: "324523", _1: 3468 }) {
-    _0
-    _1
-  }
-}
diff --git a/test/Feature/Input/collections/tuple/ok/response.json b/test/Feature/Input/collections/tuple/ok/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/tuple/ok/response.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "data": {
-    "f1": {
-      "_0": "abc",
-      "_1": 4235
-    },
-    "f2": {
-      "_0": "324523",
-      "_1": 3468
-    }
-  }
-}
diff --git a/test/Feature/Input/collections/vector/query.gql b/test/Feature/Input/collections/vector/query.gql
deleted file mode 100644
--- a/test/Feature/Input/collections/vector/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query ValidSeq {
-  f1: testVector(value: [])
-  f2: testVector(value: [32])
-  f3: testVector(value: [32, 235, 6463, 352123])
-}
diff --git a/test/Feature/Input/collections/vector/response.json b/test/Feature/Input/collections/vector/response.json
deleted file mode 100644
--- a/test/Feature/Input/collections/vector/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "f1": [],
-    "f2": [32],
-    "f3": [32, 235, 6463, 352123]
-  }
-}
diff --git a/test/Feature/Input/enums/decode2Con/query.gql b/test/Feature/Input/enums/decode2Con/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/decode2Con/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test2 (level:LA)
-}
diff --git a/test/Feature/Input/enums/decode2Con/response.json b/test/Feature/Input/enums/decode2Con/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/decode2Con/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "test2": "LA"
-  }
-}
diff --git a/test/Feature/Input/enums/decode3Con/query.gql b/test/Feature/Input/enums/decode3Con/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/decode3Con/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test3 (level:T1)
-}
diff --git a/test/Feature/Input/enums/decode3Con/response.json b/test/Feature/Input/enums/decode3Con/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/decode3Con/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "test3": "T1"
-  }
-}
diff --git a/test/Feature/Input/enums/decodeInvalidValue/query.gql b/test/Feature/Input/enums/decodeInvalidValue/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeInvalidValue/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test2 ( level: LK )
-}
diff --git a/test/Feature/Input/enums/decodeInvalidValue/response.json b/test/Feature/Input/enums/decodeInvalidValue/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeInvalidValue/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Argument \"level\" got invalid value. Expected type \"TwoCon!\" found LK.",
-      "locations": [
-        {
-          "line": 2,
-          "column": 11
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/enums/decodeMany/con0/query.gql b/test/Feature/Input/enums/decodeMany/con0/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con0/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test (level:L0)
-}
diff --git a/test/Feature/Input/enums/decodeMany/con0/response.json b/test/Feature/Input/enums/decodeMany/con0/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con0/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "test":  "L0"
-  }
-}
diff --git a/test/Feature/Input/enums/decodeMany/con1/query.gql b/test/Feature/Input/enums/decodeMany/con1/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con1/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test (level:L1)
-}
diff --git a/test/Feature/Input/enums/decodeMany/con1/response.json b/test/Feature/Input/enums/decodeMany/con1/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con1/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "test": "L1"
-  }
-}
diff --git a/test/Feature/Input/enums/decodeMany/con2/query.gql b/test/Feature/Input/enums/decodeMany/con2/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con2/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test (level:L2)
-}
diff --git a/test/Feature/Input/enums/decodeMany/con2/response.json b/test/Feature/Input/enums/decodeMany/con2/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con2/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "test": "L2"
-  }
-}
diff --git a/test/Feature/Input/enums/decodeMany/con3/query.gql b/test/Feature/Input/enums/decodeMany/con3/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con3/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test (level:L3)
-}
diff --git a/test/Feature/Input/enums/decodeMany/con3/response.json b/test/Feature/Input/enums/decodeMany/con3/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con3/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "test": "L3"
-  }
-}
diff --git a/test/Feature/Input/enums/decodeMany/con4/query.gql b/test/Feature/Input/enums/decodeMany/con4/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con4/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test (level:L4)
-}
diff --git a/test/Feature/Input/enums/decodeMany/con4/response.json b/test/Feature/Input/enums/decodeMany/con4/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con4/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "test": "L4"
-  }
-}
diff --git a/test/Feature/Input/enums/decodeMany/con5/query.gql b/test/Feature/Input/enums/decodeMany/con5/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con5/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test (level:L5)
-}
diff --git a/test/Feature/Input/enums/decodeMany/con5/response.json b/test/Feature/Input/enums/decodeMany/con5/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con5/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "test": "L5"
-  }
-}
diff --git a/test/Feature/Input/enums/decodeMany/con6/query.gql b/test/Feature/Input/enums/decodeMany/con6/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con6/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test (level:L6)
-}
diff --git a/test/Feature/Input/enums/decodeMany/con6/response.json b/test/Feature/Input/enums/decodeMany/con6/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/decodeMany/con6/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "test": "L6"
-  }
-}
diff --git a/test/Feature/Input/enums/invalidEnumFromJSONVariable/query.gql b/test/Feature/Input/enums/invalidEnumFromJSONVariable/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/invalidEnumFromJSONVariable/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding($x: TwoCon!) {
-  test2(level: $x)
-}
diff --git a/test/Feature/Input/enums/invalidEnumFromJSONVariable/response.json b/test/Feature/Input/enums/invalidEnumFromJSONVariable/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/invalidEnumFromJSONVariable/response.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$x\" got invalid value. Expected type \"TwoCon!\" found \"BLA\".",
-      "locations": [{ "line": 1, "column": 21 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/enums/invalidEnumFromJSONVariable/variables.json b/test/Feature/Input/enums/invalidEnumFromJSONVariable/variables.json
deleted file mode 100644
--- a/test/Feature/Input/enums/invalidEnumFromJSONVariable/variables.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{ "x": "BLA" }
diff --git a/test/Feature/Input/enums/invalidStringDefaultValue/query.gql b/test/Feature/Input/enums/invalidStringDefaultValue/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/invalidStringDefaultValue/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding($x: TwoCon! = "LA") {
-  test2(level: $x)
-}
diff --git a/test/Feature/Input/enums/invalidStringDefaultValue/response.json b/test/Feature/Input/enums/invalidStringDefaultValue/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/invalidStringDefaultValue/response.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$x\" got invalid value. Expected type \"TwoCon!\" found \"LA\".",
-      "locations": [{ "line": 1, "column": 21 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/enums/invalidStringInput/query.gql b/test/Feature/Input/enums/invalidStringInput/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/invalidStringInput/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  test2(level: "LA")
-}
diff --git a/test/Feature/Input/enums/invalidStringInput/response.json b/test/Feature/Input/enums/invalidStringInput/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/invalidStringInput/response.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Argument \"level\" got invalid value. Expected type \"TwoCon!\" found \"LA\".",
-      "locations": [{ "line": 2, "column": 9 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/enums/validEnumFromJSONVariable/query.gql b/test/Feature/Input/enums/validEnumFromJSONVariable/query.gql
deleted file mode 100644
--- a/test/Feature/Input/enums/validEnumFromJSONVariable/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding($x: TwoCon!) {
-  test2(level: $x)
-}
diff --git a/test/Feature/Input/enums/validEnumFromJSONVariable/response.json b/test/Feature/Input/enums/validEnumFromJSONVariable/response.json
deleted file mode 100644
--- a/test/Feature/Input/enums/validEnumFromJSONVariable/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "test2": "LA"
-  }
-}
diff --git a/test/Feature/Input/enums/validEnumFromJSONVariable/variables.json b/test/Feature/Input/enums/validEnumFromJSONVariable/variables.json
deleted file mode 100644
--- a/test/Feature/Input/enums/validEnumFromJSONVariable/variables.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{ "x": "LA" }
diff --git a/test/Feature/Input/objects/nullableUndefinedField/query.gql b/test/Feature/Input/objects/nullableUndefinedField/query.gql
deleted file mode 100644
--- a/test/Feature/Input/objects/nullableUndefinedField/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query NullableUndefinedField {
-  input(value: { field: "value" })
-}
diff --git a/test/Feature/Input/objects/nullableUndefinedField/response.json b/test/Feature/Input/objects/nullableUndefinedField/response.json
deleted file mode 100644
--- a/test/Feature/Input/objects/nullableUndefinedField/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "input": "InputObject {field = \"value\", nullableField = Nothing, recursive = Nothing}"
-  }
-}
diff --git a/test/Feature/Input/objects/resolveObject/query.gql b/test/Feature/Input/objects/resolveObject/query.gql
deleted file mode 100644
--- a/test/Feature/Input/objects/resolveObject/query.gql
+++ /dev/null
@@ -1,4 +0,0 @@
-query ResolveObject {
-  i1: input(value: { field: "v1", nullableField: 123 })
-  i2: input(value: { field: "v2" , recursive: { field: "v3" } })
-}
diff --git a/test/Feature/Input/objects/resolveObject/response.json b/test/Feature/Input/objects/resolveObject/response.json
deleted file mode 100644
--- a/test/Feature/Input/objects/resolveObject/response.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "data": {
-    "i1": "InputObject {field = \"v1\", nullableField = Just 123, recursive = Nothing}",
-    "i2": "InputObject {field = \"v2\", nullableField = Nothing, recursive = Just (InputObject {field = \"v3\", nullableField = Nothing, recursive = Nothing})}"
-  }
-}
diff --git a/test/Feature/Input/objects/resolveVariable/query.gql b/test/Feature/Input/objects/resolveVariable/query.gql
deleted file mode 100644
--- a/test/Feature/Input/objects/resolveVariable/query.gql
+++ /dev/null
@@ -1,4 +0,0 @@
-query ResolveVariable($v1: String!, $v2: Int!, $v3: Int) {
-  i1: input(value: { field: $v1, nullableField: $v2 })
-  i2: input(value: { field: "", nullableField: $v3 })
-}
diff --git a/test/Feature/Input/objects/resolveVariable/response.json b/test/Feature/Input/objects/resolveVariable/response.json
deleted file mode 100644
--- a/test/Feature/Input/objects/resolveVariable/response.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "data": {
-    "i1": "InputObject {field = \"string from variable\", nullableField = Just 123011, recursive = Nothing}",
-    "i2": "InputObject {field = \"\", nullableField = Nothing, recursive = Nothing}"
-  }
-}
diff --git a/test/Feature/Input/objects/resolveVariable/variables.json b/test/Feature/Input/objects/resolveVariable/variables.json
deleted file mode 100644
--- a/test/Feature/Input/objects/resolveVariable/variables.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "v1": "string from variable",
-  "v2": 123011
-}
diff --git a/test/Feature/Input/objects/undefinedField/query.gql b/test/Feature/Input/objects/undefinedField/query.gql
deleted file mode 100644
--- a/test/Feature/Input/objects/undefinedField/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query UndefinedField {
-  i1: input(value: { nullableField: 1 })
-  i2: input(value: { })
-  i3: input(value: { field: "v2" , recursive: { field: "v3" , recursive: {}  } })
-}
diff --git a/test/Feature/Input/objects/undefinedField/response.json b/test/Feature/Input/objects/undefinedField/response.json
deleted file mode 100644
--- a/test/Feature/Input/objects/undefinedField/response.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"field\".",
-      "locations": [
-        {
-          "line": 2,
-          "column": 13
-        }
-      ]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Undefined Field \"field\".",
-      "locations": [
-        {
-          "line": 3,
-          "column": 13
-        }
-      ]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"recursive.recursive\": Undefined Field \"field\".",
-      "locations": [
-        {
-          "line": 4,
-          "column": 13
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/objects/unexpectedValue/query.gql b/test/Feature/Input/objects/unexpectedValue/query.gql
deleted file mode 100644
--- a/test/Feature/Input/objects/unexpectedValue/query.gql
+++ /dev/null
@@ -1,9 +0,0 @@
-query UnexpectedValue {
-  i1: input(value: "some text")
-  i2: input(value: 1)
-  i3: input(value: { field: {} })
-  i4: input(value: { field: 3 })
-  i5: input(value: { field: null } )
-  # deep recursive
-  i6: input(value: { field: "v2" , recursive: { field: "v3" , recursive: { field: 5 }  } })
-}
diff --git a/test/Feature/Input/objects/unexpectedValue/response.json b/test/Feature/Input/objects/unexpectedValue/response.json
deleted file mode 100644
--- a/test/Feature/Input/objects/unexpectedValue/response.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Argument \"value\" got invalid value. Expected type \"InputObject!\" found \"some text\".",
-      "locations": [
-        {
-          "line": 2,
-          "column": 13
-        }
-      ]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. Expected type \"InputObject!\" found 1.",
-      "locations": [
-        {
-          "line": 3,
-          "column": 13
-        }
-      ]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"field\": Expected type \"String!\" found {}.",
-      "locations": [
-        {
-          "line": 4,
-          "column": 13
-        }
-      ]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"field\": Expected type \"String!\" found 3.",
-      "locations": [
-        {
-          "line": 5,
-          "column": 13
-        }
-      ]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"field\": Expected type \"String!\" found null.",
-      "locations": [
-        {
-          "line": 6,
-          "column": 13
-        }
-      ]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"recursive.recursive.field\": Expected type \"String!\" found 5.",
-      "locations": [
-        {
-          "line": 8,
-          "column": 13
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/objects/unexpectedVariable/query.gql b/test/Feature/Input/objects/unexpectedVariable/query.gql
deleted file mode 100644
--- a/test/Feature/Input/objects/unexpectedVariable/query.gql
+++ /dev/null
@@ -1,4 +0,0 @@
-query Unexpectedvariable($v1: String, $v2: String) {
-  i1: input(value: { field: $v1, nullableField: 1 })
-  i2: input(value: { field: "", nullableField: $v2 })
-}
diff --git a/test/Feature/Input/objects/unexpectedVariable/response.json b/test/Feature/Input/objects/unexpectedVariable/response.json
deleted file mode 100644
--- a/test/Feature/Input/objects/unexpectedVariable/response.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$v1\" of type \"String\" used in position expecting type \"String!\".",
-      "locations": [{ "line": 2, "column": 29 }]
-    },
-    {
-      "message": "Variable \"$v2\" of type \"String\" used in position expecting type \"Int\".",
-      "locations": [{ "line": 3, "column": 48 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/objects/unknownField/query.gql b/test/Feature/Input/objects/unknownField/query.gql
deleted file mode 100644
--- a/test/Feature/Input/objects/unknownField/query.gql
+++ /dev/null
@@ -1,4 +0,0 @@
-query UnknownField {
-  i1: input( value: { moo: 1, field: "some field" })
-  i2: input(value: { field: "v2" , recursive: { field: "v3" , recursive: { field: "bal" , unkField : "test Unkown" }  } })
-}
diff --git a/test/Feature/Input/objects/unknownField/response.json b/test/Feature/Input/objects/unknownField/response.json
deleted file mode 100644
--- a/test/Feature/Input/objects/unknownField/response.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Argument \"value\" got invalid value. Unknown Field \"moo\".",
-      "locations": [
-        {
-          "line": 2,
-          "column": 14
-        }
-      ]
-    },
-    {
-      "message": "Argument \"value\" got invalid value. in field \"recursive.recursive\": Unknown Field \"unkField\".",
-      "locations": [
-        {
-          "line": 3,
-          "column": 13
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/scalars/numbers/decodeFloat/query.gql b/test/Feature/Input/scalars/numbers/decodeFloat/query.gql
deleted file mode 100644
--- a/test/Feature/Input/scalars/numbers/decodeFloat/query.gql
+++ /dev/null
@@ -1,7 +0,0 @@
-query ValidDecoding {
-  one: testFloat(value: 1.00)
-  negOne: testFloat(value: -1)
-  negNummber: testFloat(value: -1.235)
-  expNumber: testFloat(value: 0.3e5)
-  negExpNumber: testFloat(value: - 0.12e-35)
-}
diff --git a/test/Feature/Input/scalars/numbers/decodeFloat/response.json b/test/Feature/Input/scalars/numbers/decodeFloat/response.json
deleted file mode 100644
--- a/test/Feature/Input/scalars/numbers/decodeFloat/response.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "data": {
-    "one": 1,
-    "negOne": -1,
-    "negNummber": -1.235,
-    "expNumber": 30000,
-    "negExpNumber": -1.2e-36
-  }
-}
diff --git a/test/Feature/Input/scalars/numbers/decodeInt/query.gql b/test/Feature/Input/scalars/numbers/decodeInt/query.gql
deleted file mode 100644
--- a/test/Feature/Input/scalars/numbers/decodeInt/query.gql
+++ /dev/null
@@ -1,7 +0,0 @@
-query ValidDecoding {
-  one: testInt(value: 1)
-  negOne: testInt(value: -1)
-  negNummber: testInt(value: -1235)
-  expNumber: testInt(value: 123e5)
-  negExpNumber: testInt(value: - 123e5)
-}
diff --git a/test/Feature/Input/scalars/numbers/decodeInt/response.json b/test/Feature/Input/scalars/numbers/decodeInt/response.json
deleted file mode 100644
--- a/test/Feature/Input/scalars/numbers/decodeInt/response.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "data": {
-    "one": 1,
-    "negOne": -1,
-    "negNummber": -1235,
-    "expNumber": 12300000,
-    "negExpNumber": -12300000
-  }
-}
diff --git a/test/Feature/Input/scalars/strings/block/query.gql b/test/Feature/Input/scalars/strings/block/query.gql
deleted file mode 100644
--- a/test/Feature/Input/scalars/strings/block/query.gql
+++ /dev/null
@@ -1,20 +0,0 @@
-query ValidDecoding {
-  simple: testString(
-    value: """
-    bla bla \n
-    """
-  )
-  sophisticated: testString(
-    value: """
-    ewrwe
-        sdfd
-        werte
-      erqewr+
-
-      this is some text
-
-      bla
-          bla
-    """
-  )
-}
diff --git a/test/Feature/Input/scalars/strings/block/response.json b/test/Feature/Input/scalars/strings/block/response.json
deleted file mode 100644
--- a/test/Feature/Input/scalars/strings/block/response.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "data": {
-    "simple": "\n    bla bla \\n\n    ",
-    "sophisticated": "\n    ewrwe\n        sdfd\n        werte\n      erqewr+\n\n      this is some text\n\n      bla\n          bla\n    "
-  }
-}
diff --git a/test/Feature/Input/scalars/strings/escaped/query.gql b/test/Feature/Input/scalars/strings/escaped/query.gql
deleted file mode 100644
--- a/test/Feature/Input/scalars/strings/escaped/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  testString(value: " a b  \n \\ / bla  ")
-}
diff --git a/test/Feature/Input/scalars/strings/escaped/response.json b/test/Feature/Input/scalars/strings/escaped/response.json
deleted file mode 100644
--- a/test/Feature/Input/scalars/strings/escaped/response.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{ "data": { "testString": " a b  \n \\ / bla  " } }
diff --git a/test/Feature/Input/scalars/strings/regular/query.gql b/test/Feature/Input/scalars/strings/regular/query.gql
deleted file mode 100644
--- a/test/Feature/Input/scalars/strings/regular/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  testString(value: "some string bla b jasd qweq ")
-}
diff --git a/test/Feature/Input/scalars/strings/regular/response.json b/test/Feature/Input/scalars/strings/regular/response.json
deleted file mode 100644
--- a/test/Feature/Input/scalars/strings/regular/response.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "data": {
-    "testString": "some string bla b jasd qweq "
-  }
-}
diff --git a/test/Feature/Input/scalars/strings/wrong-escaped/query.gql b/test/Feature/Input/scalars/strings/wrong-escaped/query.gql
deleted file mode 100644
--- a/test/Feature/Input/scalars/strings/wrong-escaped/query.gql
+++ /dev/null
@@ -1,3 +0,0 @@
-query ValidDecoding {
-  testString(value: " a b  \k  / bla  ")
-}
diff --git a/test/Feature/Input/scalars/strings/wrong-escaped/response.json b/test/Feature/Input/scalars/strings/wrong-escaped/response.json
deleted file mode 100644
--- a/test/Feature/Input/scalars/strings/wrong-escaped/response.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "offset=50:\nunexpected 'k'\nexpecting '\"', '/', '\\', 'b', 'f', 'n', 'r', or 't'\n",
-      "locations": [{ "line": 2, "column": 29 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/scalars/strings/wrong-newline/query.gql b/test/Feature/Input/scalars/strings/wrong-newline/query.gql
deleted file mode 100644
--- a/test/Feature/Input/scalars/strings/wrong-newline/query.gql
+++ /dev/null
@@ -1,7 +0,0 @@
-query ValidDecoding {
-  testString
-    (value: 
-      "some string bla b 
-      jasd qweq "
-    )
-}
diff --git a/test/Feature/Input/scalars/strings/wrong-newline/response.json b/test/Feature/Input/scalars/strings/wrong-newline/response.json
deleted file mode 100644
--- a/test/Feature/Input/scalars/strings/wrong-newline/response.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "offset=74:\nunexpected newline\n",
-      "locations": [{ "line": 5, "column": 1 }]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/incompatibleType/equalType/query.gql b/test/Feature/Input/variables/incompatibleType/equalType/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/equalType/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query invalidListVariable($v1: [[[Int!]!]]! ) {
-  q1 {
-    a2(argList: [],argNestedList: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/incompatibleType/equalType/response.json b/test/Feature/Input/variables/incompatibleType/equalType/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/equalType/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "q1": {
-      "a2": 1
-    }
-  }
-}
diff --git a/test/Feature/Input/variables/incompatibleType/equalType/variables.json b/test/Feature/Input/variables/incompatibleType/equalType/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/equalType/variables.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "v1": [
-  ]
-}
diff --git a/test/Feature/Input/variables/incompatibleType/stricterType/query.gql b/test/Feature/Input/variables/incompatibleType/stricterType/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/stricterType/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query invalidListVariable($v1: [[[Int!]!]!]! ) {
-  q1 {
-    a2(argList: [],argNestedList: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/incompatibleType/stricterType/response.json b/test/Feature/Input/variables/incompatibleType/stricterType/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/stricterType/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "q1": {
-      "a2": 1
-    }
-  }
-}
diff --git a/test/Feature/Input/variables/incompatibleType/stricterType/variables.json b/test/Feature/Input/variables/incompatibleType/stricterType/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/stricterType/variables.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "v1": [
-  ]
-}
diff --git a/test/Feature/Input/variables/incompatibleType/weakerType1/query.gql b/test/Feature/Input/variables/incompatibleType/weakerType1/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/weakerType1/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query invalidListVariable($v1: [[[Int]!]!]! ) {
-  q1 {
-    a2(argList: [],argNestedList: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/incompatibleType/weakerType1/response.json b/test/Feature/Input/variables/incompatibleType/weakerType1/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/weakerType1/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$v1\" of type \"[[[Int]!]!]!\" used in position expecting type \"[[[Int!]!]]!\".",
-      "locations": [
-        {
-          "line": 3,
-          "column": 35
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/incompatibleType/weakerType1/variables.json b/test/Feature/Input/variables/incompatibleType/weakerType1/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/weakerType1/variables.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "v1": [
-  ]
-}
diff --git a/test/Feature/Input/variables/incompatibleType/weakerType2/query.gql b/test/Feature/Input/variables/incompatibleType/weakerType2/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/weakerType2/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query invalidListVariable($v1: [[[Int!]!]!] ) {
-  q1 {
-    a2(argList: [],argNestedList: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/incompatibleType/weakerType2/response.json b/test/Feature/Input/variables/incompatibleType/weakerType2/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/weakerType2/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$v1\" of type \"[[[Int!]!]!]\" used in position expecting type \"[[[Int!]!]]!\".",
-      "locations": [
-        {
-          "line": 3,
-          "column": 35
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/incompatibleType/weakerType2/variables.json b/test/Feature/Input/variables/incompatibleType/weakerType2/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/weakerType2/variables.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "v1": [
-  ]
-}
diff --git a/test/Feature/Input/variables/incompatibleType/weakerType3/query.gql b/test/Feature/Input/variables/incompatibleType/weakerType3/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/weakerType3/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query invalidListVariable($v1: [[[Int!]]!]! ) {
-  q1 {
-    a2(argList: [],argNestedList: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/incompatibleType/weakerType3/response.json b/test/Feature/Input/variables/incompatibleType/weakerType3/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/weakerType3/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$v1\" of type \"[[[Int!]]!]!\" used in position expecting type \"[[[Int!]!]]!\".",
-      "locations": [
-        {
-          "line": 3,
-          "column": 35
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/incompatibleType/weakerType3/variables.json b/test/Feature/Input/variables/incompatibleType/weakerType3/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/incompatibleType/weakerType3/variables.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "v1": [
-  ]
-}
diff --git a/test/Feature/Input/variables/invalidValue/invalidDefaultValue/query.gql b/test/Feature/Input/variables/invalidValue/invalidDefaultValue/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/invalidDefaultValue/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query invalidListVariable($v1: [[[Int!]!]]! = { id: "12" }) {
-  q1 {
-    a2(argList: [], argNestedList: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/invalidValue/invalidDefaultValue/response.json b/test/Feature/Input/variables/invalidValue/invalidDefaultValue/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/invalidDefaultValue/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$v1\" got invalid value. Expected type \"[[[Int!]!]]!\" found { id: \"12\" }.",
-      "locations": [
-        {
-          "line": 1,
-          "column": 27
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/query.gql b/test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query invalidListVariable($v1: [[[Int!]!]]! = [["boo"]]) {
-  q1 {
-    a2(argList: [], argNestedList: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/response.json b/test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$v1\" got invalid value. Expected type \"[Int!]!\" found \"boo\".",
-      "locations": [
-        {
-          "line": 1,
-          "column": 27
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/variables.json b/test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/invalidDefaultValueButVariableProvided/variables.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "v1": []
-}
diff --git a/test/Feature/Input/variables/invalidValue/invalidListVariable/query.gql b/test/Feature/Input/variables/invalidValue/invalidListVariable/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/invalidListVariable/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query invalidListVariable($v1: [String!] ) {
-  q1 {
-    a2(argList: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/invalidValue/invalidListVariable/response.json b/test/Feature/Input/variables/invalidValue/invalidListVariable/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/invalidListVariable/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$v1\" got invalid value. Expected type \"String!\" found null.",
-      "locations": [
-        {
-          "line": 1,
-          "column": 27
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/invalidValue/invalidListVariable/variables.json b/test/Feature/Input/variables/invalidValue/invalidListVariable/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/invalidListVariable/variables.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "v1": [
-    null
-  ]
-}
diff --git a/test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/query.gql b/test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query NonNullListReceivedNull($v1: [[[Int!]!]]!) {
-  q1 {
-    a2(argNestedList: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/response.json b/test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$v1\" got invalid value. Expected type \"[Int!]!\" found null.",
-      "locations": [
-        {
-          "line": 1,
-          "column": 31
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/variables.json b/test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/invalidValue/nestedListNonNullListReceivedNull/variables.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "v1": [
-    [
-      [
-        1
-      ],
-      null
-    ],
-    null
-  ]
-}
diff --git a/test/Feature/Input/variables/nameCollision/query.gql b/test/Feature/Input/variables/nameCollision/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/nameCollision/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query variableNameCollision($v1: String!, $v1: String! ) {
-  q1 {
-    a2(argList: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/nameCollision/response.json b/test/Feature/Input/variables/nameCollision/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/nameCollision/response.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "There can Be only One Variable Named \"v1\"",
-      "locations": [
-        {
-          "line": 1,
-          "column": 29
-        }
-      ]
-    },
-    {
-      "message": "There can Be only One Variable Named \"v1\"",
-      "locations": [
-        {
-          "line": 1,
-          "column": 43
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/nameCollision/variables.json b/test/Feature/Input/variables/nameCollision/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/nameCollision/variables.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "v1": [
-    "a"
-  ]
-}
diff --git a/test/Feature/Input/variables/nestedListNullableListReceivedNull/query.gql b/test/Feature/Input/variables/nestedListNullableListReceivedNull/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/nestedListNullableListReceivedNull/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query NullableListReceivedNull($v1: [[[Int!]!]]!) {
-  q1 {
-    a2(argNestedList: $v1, argList:[])
-  }
-}
diff --git a/test/Feature/Input/variables/nestedListNullableListReceivedNull/response.json b/test/Feature/Input/variables/nestedListNullableListReceivedNull/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/nestedListNullableListReceivedNull/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "q1": {
-      "a2": 1
-    }
-  }
-}
diff --git a/test/Feature/Input/variables/nestedListNullableListReceivedNull/variables.json b/test/Feature/Input/variables/nestedListNullableListReceivedNull/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/nestedListNullableListReceivedNull/variables.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "v1": [
-    [
-      [
-        1
-      ]
-    ],
-    null
-  ]
-}
diff --git a/test/Feature/Input/variables/nonInputTypeViolation/query.gql b/test/Feature/Input/variables/nonInputTypeViolation/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/nonInputTypeViolation/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query testUnknownType ($bo: A ){
-  q1 {
-      a1(arg1:$bo)
-  }
-}
diff --git a/test/Feature/Input/variables/nonInputTypeViolation/response.json b/test/Feature/Input/variables/nonInputTypeViolation/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/nonInputTypeViolation/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$bo\" cannot be non-input type \"A\".",
-      "locations": [
-        {
-          "line": 1,
-          "column": 24
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/undefinedVariable/query.gql b/test/Feature/Input/variables/undefinedVariable/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/undefinedVariable/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query testUnknownType {
-  q1 {
-      a1(arg1:$bo)
-  }
-}
diff --git a/test/Feature/Input/variables/undefinedVariable/response.json b/test/Feature/Input/variables/undefinedVariable/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/undefinedVariable/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"bo\" is not defined by operation \"testUnknownType\".",
-      "locations": [
-        {
-          "line": 3,
-          "column": 15
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/unknownType/query.gql b/test/Feature/Input/variables/unknownType/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/unknownType/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query testUnknownType ($bo: BA ){
-  q1 {
-      a1(arg1:$bo)
-  }
-}
diff --git a/test/Feature/Input/variables/unknownType/response.json b/test/Feature/Input/variables/unknownType/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/unknownType/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Unknown type \"BA\".",
-      "locations": [
-        {
-          "line": 1,
-          "column": 24
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/unusedVariable/unusedVariables/query.gql b/test/Feature/Input/variables/unusedVariable/unusedVariables/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/unusedVariables/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query TestUnusedVariables ($v1: String, $v2: String, $v3: Int) {
-  q1 {
-    a1(arg1: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/unusedVariable/unusedVariables/response.json b/test/Feature/Input/variables/unusedVariable/unusedVariables/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/unusedVariables/response.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$v2\" is never used in operation \"TestUnusedVariables\".",
-      "locations": [
-        {
-          "line": 1,
-          "column": 41
-        }
-      ]
-    },
-    {
-      "message": "Variable \"$v3\" is never used in operation \"TestUnusedVariables\".",
-      "locations": [
-        {
-          "line": 1,
-          "column": 54
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/unusedVariable/variableUsedInAlias/query.gql b/test/Feature/Input/variables/unusedVariable/variableUsedInAlias/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/variableUsedInAlias/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query TestUsedVariable ($v1: String!) {
-  q1 {
-    x1:  a1(arg1: $v1)
-  }
-}
diff --git a/test/Feature/Input/variables/unusedVariable/variableUsedInAlias/response.json b/test/Feature/Input/variables/unusedVariable/variableUsedInAlias/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/variableUsedInAlias/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "q1": {
-      "x1": "a1Test"
-    }
-  }
-}
diff --git a/test/Feature/Input/variables/unusedVariable/variableUsedInAlias/variables.json b/test/Feature/Input/variables/unusedVariable/variableUsedInAlias/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/variableUsedInAlias/variables.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "v1": ""
-}
diff --git a/test/Feature/Input/variables/unusedVariable/variableUsedInFragment/query.gql b/test/Feature/Input/variables/unusedVariable/variableUsedInFragment/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/variableUsedInFragment/query.gql
+++ /dev/null
@@ -1,9 +0,0 @@
-query TestUsedVariable ($v1: String!) {
-  q1 {
-    ...F1
-  }
-}
-
-fragment F1 on A {
-  a1(arg1: $v1)
-}
diff --git a/test/Feature/Input/variables/unusedVariable/variableUsedInFragment/response.json b/test/Feature/Input/variables/unusedVariable/variableUsedInFragment/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/variableUsedInFragment/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "q1": {
-      "a1": "a1Test"
-    }
-  }
-}
diff --git a/test/Feature/Input/variables/unusedVariable/variableUsedInFragment/variables.json b/test/Feature/Input/variables/unusedVariable/variableUsedInFragment/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/variableUsedInFragment/variables.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "v1": ""
-}
diff --git a/test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/query.gql b/test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/query.gql
+++ /dev/null
@@ -1,7 +0,0 @@
-query TestUsedVariable ($v1: String!) {
-  q1 {
-    ...on A {
-         a1(arg1: $v1)
-     }
-  }
-}
diff --git a/test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/response.json b/test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "q1": {
-      "a1": "a1Test"
-    }
-  }
-}
diff --git a/test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/variables.json b/test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/unusedVariable/variableUsedInInlineFragment/variables.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "v1": ""
-}
diff --git a/test/Feature/Input/variables/validListVariable/query.gql b/test/Feature/Input/variables/validListVariable/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/validListVariable/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query invalidListVariable($v1: [String!]!) {
-  q1 {
-    a2(argList: $v1, argNestedList: [])
-  }
-}
diff --git a/test/Feature/Input/variables/validListVariable/response.json b/test/Feature/Input/variables/validListVariable/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/validListVariable/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "q1": {
-      "a2": 1
-    }
-  }
-}
diff --git a/test/Feature/Input/variables/validListVariable/variables.json b/test/Feature/Input/variables/validListVariable/variables.json
deleted file mode 100644
--- a/test/Feature/Input/variables/validListVariable/variables.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "v1": [
-    "a"
-  ]
-}
diff --git a/test/Feature/Input/variables/valueNotProvided/nonNullVariable/query.gql b/test/Feature/Input/variables/valueNotProvided/nonNullVariable/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/valueNotProvided/nonNullVariable/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query TestNonNullVariable($i1: String!) {
-  q1 {
-    a1(arg1: $i1)
-  }
-}
diff --git a/test/Feature/Input/variables/valueNotProvided/nonNullVariable/response.json b/test/Feature/Input/variables/valueNotProvided/nonNullVariable/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/valueNotProvided/nonNullVariable/response.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "errors": [
-    {
-      "message": "Variable \"$i1\" of required type \"String!\" was not provided.",
-      "locations": [
-        {
-          "line": 1,
-          "column": 27
-        }
-      ]
-    }
-  ]
-}
diff --git a/test/Feature/Input/variables/valueNotProvided/nonNullVariableWithDefaultValue/query.gql b/test/Feature/Input/variables/valueNotProvided/nonNullVariableWithDefaultValue/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/valueNotProvided/nonNullVariableWithDefaultValue/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query TestNonNullVariable($i1: String! = "hello world") {
-  q1 {
-    a1(arg1: $i1)
-  }
-}
diff --git a/test/Feature/Input/variables/valueNotProvided/nonNullVariableWithDefaultValue/response.json b/test/Feature/Input/variables/valueNotProvided/nonNullVariableWithDefaultValue/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/valueNotProvided/nonNullVariableWithDefaultValue/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "q1": {
-      "a1": "a1Test"
-    }
-  }
-}
diff --git a/test/Feature/Input/variables/valueNotProvided/nullableVariable/query.gql b/test/Feature/Input/variables/valueNotProvided/nullableVariable/query.gql
deleted file mode 100644
--- a/test/Feature/Input/variables/valueNotProvided/nullableVariable/query.gql
+++ /dev/null
@@ -1,5 +0,0 @@
-query TestNullableVariable($i1: Int) {
-  q1 {
-    a1(arg1:"",arg2: $i1)
-  }
-}
diff --git a/test/Feature/Input/variables/valueNotProvided/nullableVariable/response.json b/test/Feature/Input/variables/valueNotProvided/nullableVariable/response.json
deleted file mode 100644
--- a/test/Feature/Input/variables/valueNotProvided/nullableVariable/response.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "data": {
-    "q1": {
-      "a1": "a1Test"
-    }
-  }
-}
diff --git a/test/Rendering/Schema.hs b/test/Rendering/Schema.hs
--- a/test/Rendering/Schema.hs
+++ b/test/Rendering/Schema.hs
@@ -17,9 +17,6 @@
   )
 where
 
-import Data.FileEmbed
-  ( makeRelativeToProject,
-  )
 import Data.Morpheus.Document
   ( importGQLDocumentWithNamespace,
   )
@@ -37,8 +34,7 @@
 instance DecodeScalar TestScalar where
   decodeScalar = const (pure TestScalar)
 
-importGQLDocumentWithNamespace
-  =<< makeRelativeToProject "test/Rendering/schema.gql"
+importGQLDocumentWithNamespace "test/Rendering/schema.gql"
 
 instance VisitType TestDirective
 
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -8,24 +8,8 @@
 
 import Data.Morpheus (runApp)
 import Data.Morpheus.Types (GQLRequest (..), GQLResponse (..))
-import qualified Feature.Collision.CategoryCollisionFail as TypeCategoryCollisionFail
-import qualified Feature.Collision.CategoryCollisionSuccess as TypeCategoryCollisionSuccess
-import qualified Feature.Collision.NameCollision as NameCollision
-import qualified Feature.Directive.Definition as DirectiveDefinition
 import qualified Feature.Holistic.API as Holistic
-import qualified Feature.Inference.ObjectAndEnum as ObjectAndEnum
-import qualified Feature.Inference.TaggedArguments as TaggedArguments
-import qualified Feature.Inference.TaggedArgumentsFail as TaggedArgumentsFail
-import qualified Feature.Inference.TypeGuards as TypeGuards
-import qualified Feature.Inference.TypeInference as TypeInference
-import qualified Feature.Inference.UnionType as UnionType
-import qualified Feature.Inference.WrappedType as WrappedType
-import qualified Feature.Input.Collections as Collections
 import qualified Feature.Input.DefaultValues as DefaultValues
-import qualified Feature.Input.Enums as Enums
-import qualified Feature.Input.Objects as Objects
-import qualified Feature.Input.Scalars as Scalars
-import qualified Feature.Input.Variables as Variables
 import qualified Feature.NamedResolvers.API as NamedResolvers
 import Relude
 import Rendering.TestSchemaRendering (testSchemaRendering)
@@ -62,33 +46,7 @@
     "Morpheus Graphql Tests"
     [ testFeatures
         "Input"
-        [ (Variables.api, "variables"),
-          (Enums.api, "enums"),
-          (Scalars.api, "scalars"),
-          (Objects.api, "objects"),
-          (DefaultValues.api, "default-values"),
-          (Collections.api, "collections")
-        ],
-      testFeatures
-        "Collision"
-        [ (TypeCategoryCollisionSuccess.api, "category-collision-success"),
-          (TypeCategoryCollisionFail.api, "category-collision-fail"),
-          (NameCollision.api, "name-collision")
-        ],
-      testFeatures
-        "Inference"
-        [ (WrappedType.api, "wrapped-type"),
-          (TypeGuards.api, "type-guards"),
-          (UnionType.api, "union-type"),
-          (TypeInference.api, "type-inference"),
-          (TaggedArguments.api, "tagged-arguments"),
-          (TaggedArgumentsFail.api, "tagged-arguments-fail"),
-          (ObjectAndEnum.api, "object-and-enum")
-        ],
-      testFeatures
-        "Directive"
-        [ (DirectiveDefinition.api, "definition")
-        ],
+        [(DefaultValues.api, "default-values")],
       testFeatures
         "Holistic"
         [ (Holistic.api, "holistic")
