From e8b82122c646ba159146c986cc8983d66f790142 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Tue, 28 Jan 2020 11:08:28 +0100 Subject: Try all extension parsers --- src/Language/GraphQL/AST/Parser.hs | 51 +++++++++++++++----------------------- 1 file changed, 20 insertions(+), 31 deletions(-) (limited to 'src/Language/GraphQL/AST/Parser.hs') diff --git a/src/Language/GraphQL/AST/Parser.hs b/src/Language/GraphQL/AST/Parser.hs index 204a3ea..3449903 100644 --- a/src/Language/GraphQL/AST/Parser.hs +++ b/src/Language/GraphQL/AST/Parser.hs @@ -9,7 +9,7 @@ module Language.GraphQL.AST.Parser import Control.Applicative (Alternative(..), optional) import Control.Applicative.Combinators (sepBy1) import qualified Control.Applicative.Combinators.NonEmpty as NonEmpty -import Data.List.NonEmpty (NonEmpty) +import Data.List.NonEmpty (NonEmpty(..)) import Data.Text (Text) import qualified Language.GraphQL.AST.DirectiveLocation as Directive import Language.GraphQL.AST.DirectiveLocation @@ -118,11 +118,8 @@ scalarTypeDefinition = ScalarTypeDefinition "ScalarTypeDefinition" scalarTypeExtension :: Parser TypeExtension -scalarTypeExtension = ScalarTypeExtension - <$ extend "scalar" - <*> name - <*> NonEmpty.some directive - "ScalarTypeExtension" +scalarTypeExtension = extend "scalar" "ScalarTypeExtension" + $ (ScalarTypeExtension <$> name <*> NonEmpty.some directive) :| [] objectTypeDefinition :: Parser TypeDefinition objectTypeDefinition = ObjectTypeDefinition @@ -135,11 +132,11 @@ objectTypeDefinition = ObjectTypeDefinition "ObjectTypeDefinition" objectTypeExtension :: Parser TypeExtension -objectTypeExtension = extend "type" - >> try fieldsDefinitionExtension - <|> try directivesExtension - <|> implementsInterfacesExtension - "ObjectTypeExtension" +objectTypeExtension = extend "type" "ObjectTypeExtension" + $ fieldsDefinitionExtension :| + [ directivesExtension + , implementsInterfacesExtension + ] where fieldsDefinitionExtension = ObjectTypeFieldsDefinitionExtension <$> name @@ -169,10 +166,8 @@ unionTypeDefinition = UnionTypeDefinition "UnionTypeDefinition" unionTypeExtension :: Parser TypeExtension -unionTypeExtension = extend "union" - >> try unionMemberTypesExtension - <|> directivesExtension - "UnionTypeExtension" +unionTypeExtension = extend "union" "UnionTypeExtension" + $ unionMemberTypesExtension :| [directivesExtension] where unionMemberTypesExtension = UnionTypeUnionMemberTypesExtension <$> name @@ -202,10 +197,8 @@ interfaceTypeDefinition = InterfaceTypeDefinition "InterfaceTypeDefinition" interfaceTypeExtension :: Parser TypeExtension -interfaceTypeExtension = extend "interface" - >> try fieldsDefinitionExtension - <|> directivesExtension - "InterfaceTypeExtension" +interfaceTypeExtension = extend "interface" "InterfaceTypeExtension" + $ fieldsDefinitionExtension :| [directivesExtension] where fieldsDefinitionExtension = InterfaceTypeFieldsDefinitionExtension <$> name @@ -225,10 +218,8 @@ enumTypeDefinition = EnumTypeDefinition "EnumTypeDefinition" enumTypeExtension :: Parser TypeExtension -enumTypeExtension = extend "enum" - >> try enumValuesDefinitionExtension - <|> directivesExtension - "EnumTypeExtension" +enumTypeExtension = extend "enum" "EnumTypeExtension" + $ enumValuesDefinitionExtension :| [directivesExtension] where enumValuesDefinitionExtension = EnumTypeEnumValuesDefinitionExtension <$> name @@ -248,10 +239,8 @@ inputObjectTypeDefinition = InputObjectTypeDefinition "InputObjectTypeDefinition" inputObjectTypeExtension :: Parser TypeExtension -inputObjectTypeExtension = extend "input" - >> try inputFieldsDefinitionExtension - <|> directivesExtension - "InputObjectTypeExtension" +inputObjectTypeExtension = extend "input" "InputObjectTypeExtension" + $ inputFieldsDefinitionExtension :| [directivesExtension] where inputFieldsDefinitionExtension = InputObjectTypeInputFieldsDefinitionExtension <$> name @@ -314,11 +303,11 @@ operationTypeDefinitions :: Parser (NonEmpty OperationTypeDefinition) operationTypeDefinitions = braces $ NonEmpty.some operationTypeDefinition schemaExtension :: Parser SchemaExtension -schemaExtension = extend "schema" - >> try schemaOperationExtension - <|> SchemaDirectiveExtension <$> NonEmpty.some directive - "SchemaExtension" +schemaExtension = extend "schema" "SchemaExtension" + $ schemaOperationExtension :| [directivesExtension] where + directivesExtension = SchemaDirectivesExtension + <$> NonEmpty.some directive schemaOperationExtension = SchemaOperationExtension <$> directives <*> operationTypeDefinitions -- cgit v1.2.3