aboutsummaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/AST/Core.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Language/GraphQL/AST/Core.hs')
-rw-r--r--src/Language/GraphQL/AST/Core.hs48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/Language/GraphQL/AST/Core.hs b/src/Language/GraphQL/AST/Core.hs
new file mode 100644
index 0000000..00072e0
--- /dev/null
+++ b/src/Language/GraphQL/AST/Core.hs
@@ -0,0 +1,48 @@
+-- | This is the AST meant to be executed.
+module Language.GraphQL.AST.Core
+ ( Alias
+ , Argument(..)
+ , Document
+ , Field(..)
+ , Name
+ , ObjectField(..)
+ , Operation(..)
+ , Value(..)
+ ) where
+
+import Data.Int (Int32)
+import Data.List.NonEmpty (NonEmpty)
+import Data.String
+
+import Data.Text (Text)
+
+-- | Name
+type Name = Text
+
+type Document = NonEmpty Operation
+
+data Operation = Query (NonEmpty Field)
+ | Mutation (NonEmpty Field)
+ deriving (Eq,Show)
+
+data Field = Field (Maybe Alias) Name [Argument] [Field] deriving (Eq,Show)
+
+type Alias = Name
+
+data Argument = Argument Name Value deriving (Eq,Show)
+
+data Value = ValueInt Int32
+ -- GraphQL Float is double precision
+ | ValueFloat Double
+ | ValueString Text
+ | ValueBoolean Bool
+ | ValueNull
+ | ValueEnum Name
+ | ValueList [Value]
+ | ValueObject [ObjectField]
+ deriving (Eq,Show)
+
+instance IsString Value where
+ fromString = ValueString . fromString
+
+data ObjectField = ObjectField Name Value deriving (Eq,Show)