summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/AST/Core.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2019-10-07 21:03:07 +0200
committerEugen Wissner <belka@caraus.de>2019-10-08 09:03:07 +0200
commit856efc5d256449d9282f6547bb5f677d0a7fe482 (patch)
treed93a11309bc47986aa6aa5ae364d8cb49ef535b4 /src/Language/GraphQL/AST/Core.hs
parentb2a9ec7d829cde4d49cf6051c12fd64955979f7c (diff)
downloadgraphql-856efc5d256449d9282f6547bb5f677d0a7fe482.tar.gz
Support inline fragments on types
Diffstat (limited to 'src/Language/GraphQL/AST/Core.hs')
-rw-r--r--src/Language/GraphQL/AST/Core.hs24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/Language/GraphQL/AST/Core.hs b/src/Language/GraphQL/AST/Core.hs
index 977153f..a2a53be 100644
--- a/src/Language/GraphQL/AST/Core.hs
+++ b/src/Language/GraphQL/AST/Core.hs
@@ -4,16 +4,18 @@ module Language.GraphQL.AST.Core
, Argument(..)
, Document
, Field(..)
+ , Fragment(..)
, Name
, ObjectField(..)
, Operation(..)
+ , Selection(..)
+ , TypeCondition
, Value(..)
) where
import Data.Int (Int32)
import Data.List.NonEmpty (NonEmpty)
import Data.String
-
import Data.Text (Text)
-- | Name
@@ -26,8 +28,8 @@ type Document = NonEmpty Operation
--
-- Currently only queries and mutations are supported.
data Operation
- = Query (Maybe Text) (NonEmpty Field)
- | Mutation (Maybe Text) (NonEmpty Field)
+ = Query (Maybe Text) (NonEmpty Selection)
+ | Mutation (Maybe Text) (NonEmpty Selection)
deriving (Eq, Show)
-- | A single GraphQL field.
@@ -51,7 +53,7 @@ data Operation
-- * "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] [Field] deriving (Eq, Show)
+data Field = Field (Maybe Alias) Name [Argument] [Selection] deriving (Eq, Show)
-- | Alternative field name.
--
@@ -100,3 +102,17 @@ instance IsString Value where
--
-- A list of 'ObjectField's represents a GraphQL object type.
data ObjectField = ObjectField Name Value deriving (Eq, Show)
+
+-- | Type condition.
+type TypeCondition = Name
+
+-- | Represents fragments and inline fragments.
+data Fragment
+ = Fragment TypeCondition (NonEmpty Selection)
+ deriving (Eq, Show)
+
+-- | Single selection element.
+data Selection
+ = SelectionFragment Fragment
+ | SelectionField Field
+ deriving (Eq, Show)