summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/AST.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Language/GraphQL/AST.hs')
-rw-r--r--src/Language/GraphQL/AST.hs77
1 files changed, 61 insertions, 16 deletions
diff --git a/src/Language/GraphQL/AST.hs b/src/Language/GraphQL/AST.hs
index 29d7d80..b2feb4d 100644
--- a/src/Language/GraphQL/AST.hs
+++ b/src/Language/GraphQL/AST.hs
@@ -29,16 +29,15 @@ module Language.GraphQL.AST
import Data.Int (Int32)
import Data.List.NonEmpty (NonEmpty)
import Data.Text (Text)
-import Language.GraphQL.AST.Core ( Alias
- , Name
- , TypeCondition
- )
-- * Document
-- | GraphQL document.
type Document = NonEmpty Definition
+-- | Name
+type Name = Text
+
-- | Directive.
data Directive = Directive Name [Argument] deriving (Eq, Show)
@@ -82,12 +81,56 @@ data Selection
-- * Field
--- | GraphQL field.
+-- | Single GraphQL field.
+--
+-- The only required property of a field is its name. Optionally it can also
+-- have an alias, arguments or a list of subfields.
+--
+-- Given the following query:
+--
+-- @
+-- {
+-- zuck: user(id: 4) {
+-- id
+-- name
+-- }
+-- }
+-- @
+--
+-- * "user", "id" and "name" are field names.
+-- * "user" has two subfields, "id" and "name".
+-- * "zuck" is an alias for "user". "id" and "name" have no aliases.
+-- * "id: 4" is an argument for "name". "id" and "name don't have any
+-- arguments.
data Field
= Field (Maybe Alias) Name [Argument] [Directive] SelectionSetOpt
deriving (Eq, Show)
--- | Argument.
+-- | Alternative field name.
+--
+-- @
+-- {
+-- smallPic: profilePic(size: 64)
+-- bigPic: profilePic(size: 1024)
+-- }
+-- @
+--
+-- Here "smallPic" and "bigPic" are aliases for the same field, "profilePic",
+-- used to distinquish between profile pictures with different arguments
+-- (sizes).
+type Alias = Name
+
+-- | Single argument.
+--
+-- @
+-- {
+-- user(id: 4) {
+-- name
+-- }
+-- }
+-- @
+--
+-- Here "id" is an argument for the field "user" and its value is 4.
data Argument = Argument Name Value deriving (Eq,Show)
-- * Fragments
@@ -107,15 +150,15 @@ data FragmentDefinition
-- * Inputs
-- | Input value.
-data Value = ValueVariable Name
- | ValueInt Int32
- | ValueFloat Double
- | ValueString Text
- | ValueBoolean Bool
- | ValueNull
- | ValueEnum Name
- | ValueList [Value]
- | ValueObject [ObjectField]
+data Value = Variable Name
+ | Int Int32
+ | Float Double
+ | String Text
+ | Boolean Bool
+ | Null
+ | Enum Name
+ | List [Value]
+ | Object [ObjectField]
deriving (Eq, Show)
-- | Key-value pair.
@@ -127,13 +170,15 @@ data ObjectField = ObjectField Name Value deriving (Eq, Show)
data VariableDefinition = VariableDefinition Name Type (Maybe Value)
deriving (Eq, Show)
+-- | Type condition.
+type TypeCondition = Name
+
-- | Type representation.
data Type = TypeNamed Name
| TypeList Type
| TypeNonNull NonNullType
deriving (Eq, Show)
-
-- | Helper type to represent Non-Null types and lists of such types.
data NonNullType = NonNullTypeNamed Name
| NonNullTypeList Type