summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny Navarro <j@dannynavarro.net>2015-09-21 10:05:09 +0200
committerDanny Navarro <j@dannynavarro.net>2015-09-21 10:05:09 +0200
commit3d97b3e2ff7cc6d5126c8c6c8b66eed3c1fe010b (patch)
tree2c1304afd7b6401129f3a6ff7f2d182197534c63
parent88ca3d18664aa5fd64692491086b07876c5facae (diff)
downloadgraphql-3d97b3e2ff7cc6d5126c8c6c8b66eed3c1fe010b.tar.gz
Introduce `Node` data type to simplify `OperationDefinition`
Thanks to @swolchok for the suggestion.
-rw-r--r--Data/GraphQL/AST.hs12
-rw-r--r--Data/GraphQL/Parser.hs19
2 files changed, 16 insertions, 15 deletions
diff --git a/Data/GraphQL/AST.hs b/Data/GraphQL/AST.hs
index 45bc519..cc631e6 100644
--- a/Data/GraphQL/AST.hs
+++ b/Data/GraphQL/AST.hs
@@ -16,12 +16,12 @@ data Definition = DefinitionOperation OperationDefinition
| DefinitionType TypeDefinition
deriving (Eq,Show)
-data OperationDefinition =
- Query Name [VariableDefinition] [Directive] SelectionSet
- | Mutation Name [VariableDefinition] [Directive] SelectionSet
- -- Not official yet
- -- -- | Subscription Name [VariableDefinition] [Directive] SelectionSet
- deriving (Eq,Show)
+data OperationDefinition = Query Node
+ | Mutation Node
+ deriving (Eq,Show)
+
+data Node = Node Name [VariableDefinition] [Directive] SelectionSet
+ deriving (Eq,Show)
data VariableDefinition = VariableDefinition Variable Type (Maybe DefaultValue)
deriving (Eq,Show)
diff --git a/Data/GraphQL/Parser.hs b/Data/GraphQL/Parser.hs
index 8f8e185..db22be9 100644
--- a/Data/GraphQL/Parser.hs
+++ b/Data/GraphQL/Parser.hs
@@ -45,7 +45,6 @@ name = tok $ append <$> takeWhile1 isA_z
-- `isAlpha` handles many more Unicode Chars
isA_z = inClass $ '_' : ['A'..'Z'] ++ ['a'..'z']
-
-- * Document
document :: Parser Document
@@ -54,7 +53,8 @@ document = whiteSpace
-- Try SelectionSet when no definition
<|> (Document . pure
. DefinitionOperation
- . Query mempty empty empty
+ . Query
+ . Node mempty empty empty
<$> selectionSet)
<?> "document error!"
@@ -66,14 +66,15 @@ definition = DefinitionOperation <$> operationDefinition
operationDefinition :: Parser OperationDefinition
operationDefinition =
- op Query "query"
- <|> op Mutation "mutation"
+ Query <$ tok "query" <*> node
+ <|> Mutation <$ tok "mutation" <*> node
<?> "operationDefinition error!"
- where
- op f n = f <$ tok n <*> tok name
- <*> optempty variableDefinitions
- <*> optempty directives
- <*> selectionSet
+
+node :: Parser Node
+node = Node <$> name
+ <*> optempty variableDefinitions
+ <*> optempty directives
+ <*> selectionSet
variableDefinitions :: Parser [VariableDefinition]
variableDefinitions = parens (many1 variableDefinition)