module Language.GraphQL.Reflection (toType) where import Language.GraphQL.AST as GraphQL import Data.List.NonEmpty (NonEmpty) import qualified Language.Haskell.Exts.Syntax as Haskell toType :: GraphQL.Document -> NonEmpty (Haskell.Decl a) toType = document document :: GraphQL.Document -> NonEmpty (Haskell.Decl a) document = fmap definition definition :: GraphQL.Definition -> Haskell.Decl a definition = \case DefinitionOperation def -> definitionOperation def DefinitionFragment def -> definitionFragment def definitionOperation :: OperationDefinition -> Haskell.Decl a definitionOperation = \case OperationSelectionSet op -> selectionSet op OperationDefinition{} -> undefined selectionSet :: SelectionSet -> Haskell.Decl a selectionSet = undefined definitionFragment :: FragmentDefinition -> Haskell.Decl a definitionFragment (FragmentDefinition fragmentName typeCondition directive selectionSet) = _