summaryrefslogtreecommitdiff
path: root/Data/GraphQL.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Data/GraphQL.hs')
-rw-r--r--Data/GraphQL.hs140
1 files changed, 140 insertions, 0 deletions
diff --git a/Data/GraphQL.hs b/Data/GraphQL.hs
new file mode 100644
index 0000000..d878022
--- /dev/null
+++ b/Data/GraphQL.hs
@@ -0,0 +1,140 @@
+module Data.GraphQL where
+
+import Data.Text (Text)
+
+-- * Name
+
+type Name = Text
+
+-- * Document
+
+newtype Document = Document [Definition] deriving (Eq,Show)
+
+data Definition = DefinitionOperation OperationDefinition
+ | DefinitionFragment FragmentDefinition
+ | DefinitionType TypeDefinition
+ deriving (Eq,Show)
+
+data OperationDefinition =
+ Query (Maybe [VariableDefinition]) (Maybe [Directive]) SelectionSet
+ | Mutation (Maybe [VariableDefinition]) (Maybe [Directive]) SelectionSet
+ | Subscription (Maybe [VariableDefinition]) (Maybe [Directive]) SelectionSet
+ deriving (Eq,Show)
+
+data VariableDefinition = VariableDefinition Variable Type (Maybe DefaultValue)
+ deriving (Eq,Show)
+
+newtype Variable = Variable Name deriving (Eq,Show)
+
+newtype SelectionSet = SelectionSet [Selection] deriving (Eq,Show)
+
+data Selection = SelectionField Field
+ | SelectionFragmentSpread FragmentSpread
+ | SelectionInlineFragment InlineFragment
+ deriving (Eq,Show)
+
+data Field = Field (Maybe Alias) Name (Maybe [Argument])
+ (Maybe [Directive])
+ (Maybe SelectionSet)
+ deriving (Eq,Show)
+
+type Alias = Name
+
+data Argument = Argument Name Value deriving (Eq,Show)
+
+-- * Fragments
+
+data FragmentSpread = FragmentSpread Name (Maybe [Directive])
+ deriving (Eq,Show)
+
+data InlineFragment =
+ InlineFragment TypeCondition (Maybe [Directive]) SelectionSet
+ deriving (Eq,Show)
+
+data FragmentDefinition =
+ FragmentDefinition Name TypeCondition (Maybe [Directive]) SelectionSet
+ deriving (Eq,Show)
+
+type TypeCondition = NamedType
+
+-- * Values
+
+data Value = ValueVariable Variable
+ | ValueInt Int
+ | ValueFloat Float
+ | ValueString Text
+ | ValueBoolean Bool
+ | ValueEnum Name
+ | ValueList ListValue
+ | ValueObject ObjectValue
+ deriving (Eq,Show)
+
+newtype ListValue = ListValue [Value] deriving (Eq,Show)
+
+newtype ObjectValue = ObjectValue [ObjectField] deriving (Eq,Show)
+
+data ObjectField = ObjectField Name Value deriving (Eq,Show)
+
+type DefaultValue = Value
+
+-- * Directives
+
+data Directive = Directive Name (Maybe [Argument]) deriving (Eq,Show)
+
+-- * Type Reference
+
+data Type = TypeNamed NamedType
+ | TypeList ListType
+ | TypeNonNull NonNullType
+ deriving (Eq,Show)
+
+newtype NamedType = NamedType Name deriving (Eq,Show)
+
+newtype ListType = ListType Type deriving (Eq,Show)
+
+data NonNullType = NonNullTypeNamed NamedType
+ | NonNullTypeList ListType
+ deriving (Eq,Show)
+
+-- * Type definition
+
+data TypeDefinition = TypeDefinitionObject ObjectTypeDefinition
+ | TypeDefinitionInterface InterfaceTypeDefinition
+ | TypeDefinitionUnion UnionTypeDefinition
+ | TypeDefinitionScalar ScalarTypeDefinition
+ | TypeDefinitionEnum EnumTypeDefinition
+ | TypeDefinitionInputObject InputObjectTypeDefinition
+ | TypeDefinitionTypeExtension TypeExtensionDefinition
+ deriving (Eq,Show)
+
+data ObjectTypeDefinition = ObjectTypeDefinition Name (Maybe Interfaces) [FieldDefinition]
+ deriving (Eq,Show)
+
+type Interfaces = [NamedType]
+
+data FieldDefinition = FieldDefinition Name [InputValueDefinition]
+ deriving (Eq,Show)
+
+data InputValueDefinition = InputValueDefinition Name Type (Maybe DefaultValue)
+ deriving (Eq,Show)
+
+data InterfaceTypeDefinition = InterfaceTypeDefinition Name [FieldDefinition]
+ deriving (Eq,Show)
+
+data UnionTypeDefinition = UnionTypeDefinition Name [NamedType]
+ deriving (Eq,Show)
+
+data ScalarTypeDefinition = ScalarTypeDefinition Name
+ deriving (Eq,Show)
+
+data EnumTypeDefinition = EnumTypeDefinition Name [EnumValueDefinition]
+ deriving (Eq,Show)
+
+newtype EnumValueDefinition = EnumValueDefinition Name
+ deriving (Eq,Show)
+
+data InputObjectTypeDefinition = InputObjectTypeDefinition Name [InputValueDefinition]
+ deriving (Eq,Show)
+
+newtype TypeExtensionDefinition = TypeExtensionDefinition ObjectTypeDefinition
+ deriving (Eq,Show)