packages feed

graphql 0.1 → 0.2

raw patch · 7 files changed

+525/−149 lines, 7 filesdep +attoparsecdep +bytestringdep +graphqldep ~basedep ~textPVP ok

version bump matches the API change (PVP)

Dependencies added: attoparsec, bytestring, graphql, tasty, tasty-golden

Dependency ranges changed: base, text

API changes (from Hackage documentation)

- Data.GraphQL: Argument :: Name -> Value -> Argument
- Data.GraphQL: DefinitionFragment :: FragmentDefinition -> Definition
- Data.GraphQL: DefinitionOperation :: OperationDefinition -> Definition
- Data.GraphQL: DefinitionType :: TypeDefinition -> Definition
- Data.GraphQL: Directive :: Name -> (Maybe [Argument]) -> Directive
- Data.GraphQL: Document :: [Definition] -> Document
- Data.GraphQL: EnumTypeDefinition :: Name -> [EnumValueDefinition] -> EnumTypeDefinition
- Data.GraphQL: EnumValueDefinition :: Name -> EnumValueDefinition
- Data.GraphQL: Field :: (Maybe Alias) -> Name -> (Maybe [Argument]) -> (Maybe [Directive]) -> (Maybe SelectionSet) -> Field
- Data.GraphQL: FieldDefinition :: Name -> [InputValueDefinition] -> FieldDefinition
- Data.GraphQL: FragmentDefinition :: Name -> TypeCondition -> (Maybe [Directive]) -> SelectionSet -> FragmentDefinition
- Data.GraphQL: FragmentSpread :: Name -> (Maybe [Directive]) -> FragmentSpread
- Data.GraphQL: InlineFragment :: TypeCondition -> (Maybe [Directive]) -> SelectionSet -> InlineFragment
- Data.GraphQL: InputObjectTypeDefinition :: Name -> [InputValueDefinition] -> InputObjectTypeDefinition
- Data.GraphQL: InputValueDefinition :: Name -> Type -> (Maybe DefaultValue) -> InputValueDefinition
- Data.GraphQL: InterfaceTypeDefinition :: Name -> [FieldDefinition] -> InterfaceTypeDefinition
- Data.GraphQL: ListType :: Type -> ListType
- Data.GraphQL: ListValue :: [Value] -> ListValue
- Data.GraphQL: Mutation :: (Maybe [VariableDefinition]) -> (Maybe [Directive]) -> SelectionSet -> OperationDefinition
- Data.GraphQL: NamedType :: Name -> NamedType
- Data.GraphQL: NonNullTypeList :: ListType -> NonNullType
- Data.GraphQL: NonNullTypeNamed :: NamedType -> NonNullType
- Data.GraphQL: ObjectField :: Name -> Value -> ObjectField
- Data.GraphQL: ObjectTypeDefinition :: Name -> (Maybe Interfaces) -> [FieldDefinition] -> ObjectTypeDefinition
- Data.GraphQL: ObjectValue :: [ObjectField] -> ObjectValue
- Data.GraphQL: Query :: (Maybe [VariableDefinition]) -> (Maybe [Directive]) -> SelectionSet -> OperationDefinition
- Data.GraphQL: ScalarTypeDefinition :: Name -> ScalarTypeDefinition
- Data.GraphQL: SelectionField :: Field -> Selection
- Data.GraphQL: SelectionFragmentSpread :: FragmentSpread -> Selection
- Data.GraphQL: SelectionInlineFragment :: InlineFragment -> Selection
- Data.GraphQL: SelectionSet :: [Selection] -> SelectionSet
- Data.GraphQL: Subscription :: (Maybe [VariableDefinition]) -> (Maybe [Directive]) -> SelectionSet -> OperationDefinition
- Data.GraphQL: TypeDefinitionEnum :: EnumTypeDefinition -> TypeDefinition
- Data.GraphQL: TypeDefinitionInputObject :: InputObjectTypeDefinition -> TypeDefinition
- Data.GraphQL: TypeDefinitionInterface :: InterfaceTypeDefinition -> TypeDefinition
- Data.GraphQL: TypeDefinitionObject :: ObjectTypeDefinition -> TypeDefinition
- Data.GraphQL: TypeDefinitionScalar :: ScalarTypeDefinition -> TypeDefinition
- Data.GraphQL: TypeDefinitionTypeExtension :: TypeExtensionDefinition -> TypeDefinition
- Data.GraphQL: TypeDefinitionUnion :: UnionTypeDefinition -> TypeDefinition
- Data.GraphQL: TypeExtensionDefinition :: ObjectTypeDefinition -> TypeExtensionDefinition
- Data.GraphQL: TypeList :: ListType -> Type
- Data.GraphQL: TypeNamed :: NamedType -> Type
- Data.GraphQL: TypeNonNull :: NonNullType -> Type
- Data.GraphQL: UnionTypeDefinition :: Name -> [NamedType] -> UnionTypeDefinition
- Data.GraphQL: ValueBoolean :: Bool -> Value
- Data.GraphQL: ValueEnum :: Name -> Value
- Data.GraphQL: ValueFloat :: Float -> Value
- Data.GraphQL: ValueInt :: Int -> Value
- Data.GraphQL: ValueList :: ListValue -> Value
- Data.GraphQL: ValueObject :: ObjectValue -> Value
- Data.GraphQL: ValueString :: Text -> Value
- Data.GraphQL: ValueVariable :: Variable -> Value
- Data.GraphQL: Variable :: Name -> Variable
- Data.GraphQL: VariableDefinition :: Variable -> Type -> (Maybe DefaultValue) -> VariableDefinition
- Data.GraphQL: data Argument
- Data.GraphQL: data Definition
- Data.GraphQL: data Directive
- Data.GraphQL: data EnumTypeDefinition
- Data.GraphQL: data Field
- Data.GraphQL: data FieldDefinition
- Data.GraphQL: data FragmentDefinition
- Data.GraphQL: data FragmentSpread
- Data.GraphQL: data InlineFragment
- Data.GraphQL: data InputObjectTypeDefinition
- Data.GraphQL: data InputValueDefinition
- Data.GraphQL: data InterfaceTypeDefinition
- Data.GraphQL: data NonNullType
- Data.GraphQL: data ObjectField
- Data.GraphQL: data ObjectTypeDefinition
- Data.GraphQL: data OperationDefinition
- Data.GraphQL: data ScalarTypeDefinition
- Data.GraphQL: data Selection
- Data.GraphQL: data Type
- Data.GraphQL: data TypeDefinition
- Data.GraphQL: data UnionTypeDefinition
- Data.GraphQL: data Value
- Data.GraphQL: data VariableDefinition
- Data.GraphQL: instance Eq Argument
- Data.GraphQL: instance Eq Definition
- Data.GraphQL: instance Eq Directive
- Data.GraphQL: instance Eq Document
- Data.GraphQL: instance Eq EnumTypeDefinition
- Data.GraphQL: instance Eq EnumValueDefinition
- Data.GraphQL: instance Eq Field
- Data.GraphQL: instance Eq FieldDefinition
- Data.GraphQL: instance Eq FragmentDefinition
- Data.GraphQL: instance Eq FragmentSpread
- Data.GraphQL: instance Eq InlineFragment
- Data.GraphQL: instance Eq InputObjectTypeDefinition
- Data.GraphQL: instance Eq InputValueDefinition
- Data.GraphQL: instance Eq InterfaceTypeDefinition
- Data.GraphQL: instance Eq ListType
- Data.GraphQL: instance Eq ListValue
- Data.GraphQL: instance Eq NamedType
- Data.GraphQL: instance Eq NonNullType
- Data.GraphQL: instance Eq ObjectField
- Data.GraphQL: instance Eq ObjectTypeDefinition
- Data.GraphQL: instance Eq ObjectValue
- Data.GraphQL: instance Eq OperationDefinition
- Data.GraphQL: instance Eq ScalarTypeDefinition
- Data.GraphQL: instance Eq Selection
- Data.GraphQL: instance Eq SelectionSet
- Data.GraphQL: instance Eq Type
- Data.GraphQL: instance Eq TypeDefinition
- Data.GraphQL: instance Eq TypeExtensionDefinition
- Data.GraphQL: instance Eq UnionTypeDefinition
- Data.GraphQL: instance Eq Value
- Data.GraphQL: instance Eq Variable
- Data.GraphQL: instance Eq VariableDefinition
- Data.GraphQL: instance Show Argument
- Data.GraphQL: instance Show Definition
- Data.GraphQL: instance Show Directive
- Data.GraphQL: instance Show Document
- Data.GraphQL: instance Show EnumTypeDefinition
- Data.GraphQL: instance Show EnumValueDefinition
- Data.GraphQL: instance Show Field
- Data.GraphQL: instance Show FieldDefinition
- Data.GraphQL: instance Show FragmentDefinition
- Data.GraphQL: instance Show FragmentSpread
- Data.GraphQL: instance Show InlineFragment
- Data.GraphQL: instance Show InputObjectTypeDefinition
- Data.GraphQL: instance Show InputValueDefinition
- Data.GraphQL: instance Show InterfaceTypeDefinition
- Data.GraphQL: instance Show ListType
- Data.GraphQL: instance Show ListValue
- Data.GraphQL: instance Show NamedType
- Data.GraphQL: instance Show NonNullType
- Data.GraphQL: instance Show ObjectField
- Data.GraphQL: instance Show ObjectTypeDefinition
- Data.GraphQL: instance Show ObjectValue
- Data.GraphQL: instance Show OperationDefinition
- Data.GraphQL: instance Show ScalarTypeDefinition
- Data.GraphQL: instance Show Selection
- Data.GraphQL: instance Show SelectionSet
- Data.GraphQL: instance Show Type
- Data.GraphQL: instance Show TypeDefinition
- Data.GraphQL: instance Show TypeExtensionDefinition
- Data.GraphQL: instance Show UnionTypeDefinition
- Data.GraphQL: instance Show Value
- Data.GraphQL: instance Show Variable
- Data.GraphQL: instance Show VariableDefinition
- Data.GraphQL: newtype Document
- Data.GraphQL: newtype EnumValueDefinition
- Data.GraphQL: newtype ListType
- Data.GraphQL: newtype ListValue
- Data.GraphQL: newtype NamedType
- Data.GraphQL: newtype ObjectValue
- Data.GraphQL: newtype SelectionSet
- Data.GraphQL: newtype TypeExtensionDefinition
- Data.GraphQL: newtype Variable
- Data.GraphQL: type Alias = Name
- Data.GraphQL: type DefaultValue = Value
- Data.GraphQL: type Interfaces = [NamedType]
- Data.GraphQL: type Name = Text
- Data.GraphQL: type TypeCondition = NamedType
+ Data.GraphQL.AST: Argument :: Name -> Value -> Argument
+ Data.GraphQL.AST: DefinitionFragment :: FragmentDefinition -> Definition
+ Data.GraphQL.AST: DefinitionOperation :: OperationDefinition -> Definition
+ Data.GraphQL.AST: DefinitionType :: TypeDefinition -> Definition
+ Data.GraphQL.AST: Directive :: Name -> [Argument] -> Directive
+ Data.GraphQL.AST: Document :: [Definition] -> Document
+ Data.GraphQL.AST: EnumTypeDefinition :: Name -> [EnumValueDefinition] -> EnumTypeDefinition
+ Data.GraphQL.AST: EnumValueDefinition :: Name -> EnumValueDefinition
+ Data.GraphQL.AST: Field :: Alias -> Name -> [Argument] -> [Directive] -> SelectionSet -> Field
+ Data.GraphQL.AST: FieldDefinition :: Name -> ArgumentsDefinition -> Type -> FieldDefinition
+ Data.GraphQL.AST: FragmentDefinition :: Name -> TypeCondition -> [Directive] -> SelectionSet -> FragmentDefinition
+ Data.GraphQL.AST: FragmentSpread :: Name -> [Directive] -> FragmentSpread
+ Data.GraphQL.AST: InlineFragment :: TypeCondition -> [Directive] -> SelectionSet -> InlineFragment
+ Data.GraphQL.AST: InputObjectTypeDefinition :: Name -> [InputValueDefinition] -> InputObjectTypeDefinition
+ Data.GraphQL.AST: InputValueDefinition :: Name -> Type -> (Maybe DefaultValue) -> InputValueDefinition
+ Data.GraphQL.AST: InterfaceTypeDefinition :: Name -> [FieldDefinition] -> InterfaceTypeDefinition
+ Data.GraphQL.AST: ListType :: Type -> ListType
+ Data.GraphQL.AST: ListValue :: [Value] -> ListValue
+ Data.GraphQL.AST: Mutation :: Name -> [VariableDefinition] -> [Directive] -> SelectionSet -> OperationDefinition
+ Data.GraphQL.AST: NamedType :: Name -> NamedType
+ Data.GraphQL.AST: NonNullTypeList :: ListType -> NonNullType
+ Data.GraphQL.AST: NonNullTypeNamed :: NamedType -> NonNullType
+ Data.GraphQL.AST: ObjectField :: Name -> Value -> ObjectField
+ Data.GraphQL.AST: ObjectTypeDefinition :: Name -> Interfaces -> [FieldDefinition] -> ObjectTypeDefinition
+ Data.GraphQL.AST: ObjectValue :: [ObjectField] -> ObjectValue
+ Data.GraphQL.AST: Query :: Name -> [VariableDefinition] -> [Directive] -> SelectionSet -> OperationDefinition
+ Data.GraphQL.AST: ScalarTypeDefinition :: Name -> ScalarTypeDefinition
+ Data.GraphQL.AST: SelectionField :: Field -> Selection
+ Data.GraphQL.AST: SelectionFragmentSpread :: FragmentSpread -> Selection
+ Data.GraphQL.AST: SelectionInlineFragment :: InlineFragment -> Selection
+ Data.GraphQL.AST: TypeDefinitionEnum :: EnumTypeDefinition -> TypeDefinition
+ Data.GraphQL.AST: TypeDefinitionInputObject :: InputObjectTypeDefinition -> TypeDefinition
+ Data.GraphQL.AST: TypeDefinitionInterface :: InterfaceTypeDefinition -> TypeDefinition
+ Data.GraphQL.AST: TypeDefinitionObject :: ObjectTypeDefinition -> TypeDefinition
+ Data.GraphQL.AST: TypeDefinitionScalar :: ScalarTypeDefinition -> TypeDefinition
+ Data.GraphQL.AST: TypeDefinitionTypeExtension :: TypeExtensionDefinition -> TypeDefinition
+ Data.GraphQL.AST: TypeDefinitionUnion :: UnionTypeDefinition -> TypeDefinition
+ Data.GraphQL.AST: TypeExtensionDefinition :: ObjectTypeDefinition -> TypeExtensionDefinition
+ Data.GraphQL.AST: TypeList :: ListType -> Type
+ Data.GraphQL.AST: TypeNamed :: NamedType -> Type
+ Data.GraphQL.AST: TypeNonNull :: NonNullType -> Type
+ Data.GraphQL.AST: UnionTypeDefinition :: Name -> [NamedType] -> UnionTypeDefinition
+ Data.GraphQL.AST: ValueBoolean :: Bool -> Value
+ Data.GraphQL.AST: ValueEnum :: Name -> Value
+ Data.GraphQL.AST: ValueFloat :: Double -> Value
+ Data.GraphQL.AST: ValueInt :: Int -> Value
+ Data.GraphQL.AST: ValueList :: ListValue -> Value
+ Data.GraphQL.AST: ValueObject :: ObjectValue -> Value
+ Data.GraphQL.AST: ValueString :: Text -> Value
+ Data.GraphQL.AST: ValueVariable :: Variable -> Value
+ Data.GraphQL.AST: Variable :: Name -> Variable
+ Data.GraphQL.AST: VariableDefinition :: Variable -> Type -> (Maybe DefaultValue) -> VariableDefinition
+ Data.GraphQL.AST: data Argument
+ Data.GraphQL.AST: data Definition
+ Data.GraphQL.AST: data Directive
+ Data.GraphQL.AST: data EnumTypeDefinition
+ Data.GraphQL.AST: data Field
+ Data.GraphQL.AST: data FieldDefinition
+ Data.GraphQL.AST: data FragmentDefinition
+ Data.GraphQL.AST: data FragmentSpread
+ Data.GraphQL.AST: data InlineFragment
+ Data.GraphQL.AST: data InputObjectTypeDefinition
+ Data.GraphQL.AST: data InputValueDefinition
+ Data.GraphQL.AST: data InterfaceTypeDefinition
+ Data.GraphQL.AST: data NonNullType
+ Data.GraphQL.AST: data ObjectField
+ Data.GraphQL.AST: data ObjectTypeDefinition
+ Data.GraphQL.AST: data OperationDefinition
+ Data.GraphQL.AST: data ScalarTypeDefinition
+ Data.GraphQL.AST: data Selection
+ Data.GraphQL.AST: data Type
+ Data.GraphQL.AST: data TypeDefinition
+ Data.GraphQL.AST: data UnionTypeDefinition
+ Data.GraphQL.AST: data Value
+ Data.GraphQL.AST: data VariableDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.Argument
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.Definition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.Directive
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.Document
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.EnumTypeDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.EnumValueDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.Field
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.FieldDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.FragmentDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.FragmentSpread
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.InlineFragment
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.InputObjectTypeDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.InputValueDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.InterfaceTypeDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.ListType
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.ListValue
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.NamedType
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.NonNullType
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.ObjectField
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.ObjectTypeDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.ObjectValue
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.OperationDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.ScalarTypeDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.Selection
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.Type
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.TypeDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.TypeExtensionDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.UnionTypeDefinition
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.Value
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.Variable
+ Data.GraphQL.AST: instance GHC.Classes.Eq Data.GraphQL.AST.VariableDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.Argument
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.Definition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.Directive
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.Document
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.EnumTypeDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.EnumValueDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.Field
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.FieldDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.FragmentDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.FragmentSpread
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.InlineFragment
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.InputObjectTypeDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.InputValueDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.InterfaceTypeDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.ListType
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.ListValue
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.NamedType
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.NonNullType
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.ObjectField
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.ObjectTypeDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.ObjectValue
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.OperationDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.ScalarTypeDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.Selection
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.Type
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.TypeDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.TypeExtensionDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.UnionTypeDefinition
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.Value
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.Variable
+ Data.GraphQL.AST: instance GHC.Show.Show Data.GraphQL.AST.VariableDefinition
+ Data.GraphQL.AST: newtype Document
+ Data.GraphQL.AST: newtype EnumValueDefinition
+ Data.GraphQL.AST: newtype ListType
+ Data.GraphQL.AST: newtype ListValue
+ Data.GraphQL.AST: newtype NamedType
+ Data.GraphQL.AST: newtype ObjectValue
+ Data.GraphQL.AST: newtype TypeExtensionDefinition
+ Data.GraphQL.AST: newtype Variable
+ Data.GraphQL.AST: type Alias = Name
+ Data.GraphQL.AST: type ArgumentsDefinition = [InputValueDefinition]
+ Data.GraphQL.AST: type DefaultValue = Value
+ Data.GraphQL.AST: type Interfaces = [NamedType]
+ Data.GraphQL.AST: type Name = Text
+ Data.GraphQL.AST: type SelectionSet = [Selection]
+ Data.GraphQL.AST: type TypeCondition = NamedType
+ Data.GraphQL.Parser: alias :: Parser Alias
+ Data.GraphQL.Parser: argument :: Parser Argument
+ Data.GraphQL.Parser: arguments :: Parser [Argument]
+ Data.GraphQL.Parser: argumentsDefinition :: Parser ArgumentsDefinition
+ Data.GraphQL.Parser: between :: Parser Text -> Parser Text -> Parser a -> Parser a
+ Data.GraphQL.Parser: bool :: Parser Bool
+ Data.GraphQL.Parser: braces :: Parser a -> Parser a
+ Data.GraphQL.Parser: brackets :: Parser a -> Parser a
+ Data.GraphQL.Parser: defaultValue :: Parser DefaultValue
+ Data.GraphQL.Parser: definition :: Parser Definition
+ Data.GraphQL.Parser: directive :: Parser Directive
+ Data.GraphQL.Parser: directives :: Parser [Directive]
+ Data.GraphQL.Parser: document :: Parser Document
+ Data.GraphQL.Parser: enumTypeDefinition :: Parser EnumTypeDefinition
+ Data.GraphQL.Parser: enumValueDefinition :: Parser EnumValueDefinition
+ Data.GraphQL.Parser: enumValueDefinitions :: Parser [EnumValueDefinition]
+ Data.GraphQL.Parser: field :: Parser Field
+ Data.GraphQL.Parser: fieldDefinition :: Parser FieldDefinition
+ Data.GraphQL.Parser: fieldDefinitions :: Parser [FieldDefinition]
+ Data.GraphQL.Parser: fragmentDefinition :: Parser FragmentDefinition
+ Data.GraphQL.Parser: fragmentSpread :: Parser FragmentSpread
+ Data.GraphQL.Parser: inlineFragment :: Parser InlineFragment
+ Data.GraphQL.Parser: inputObjectTypeDefinition :: Parser InputObjectTypeDefinition
+ Data.GraphQL.Parser: inputValueDefinition :: Parser InputValueDefinition
+ Data.GraphQL.Parser: inputValueDefinitions :: Parser [InputValueDefinition]
+ Data.GraphQL.Parser: interfaceTypeDefinition :: Parser InterfaceTypeDefinition
+ Data.GraphQL.Parser: interfaces :: Parser Interfaces
+ Data.GraphQL.Parser: listType :: Parser ListType
+ Data.GraphQL.Parser: listValue :: Parser ListValue
+ Data.GraphQL.Parser: name :: Parser Name
+ Data.GraphQL.Parser: namedType :: Parser NamedType
+ Data.GraphQL.Parser: nonNullType :: Parser NonNullType
+ Data.GraphQL.Parser: objectField :: Parser ObjectField
+ Data.GraphQL.Parser: objectTypeDefinition :: Parser ObjectTypeDefinition
+ Data.GraphQL.Parser: objectValue :: Parser ObjectValue
+ Data.GraphQL.Parser: operationDefinition :: Parser OperationDefinition
+ Data.GraphQL.Parser: optempty :: Monoid a => Parser a -> Parser a
+ Data.GraphQL.Parser: parens :: Parser a -> Parser a
+ Data.GraphQL.Parser: quotes :: Parser a -> Parser a
+ Data.GraphQL.Parser: scalarTypeDefinition :: Parser ScalarTypeDefinition
+ Data.GraphQL.Parser: selection :: Parser Selection
+ Data.GraphQL.Parser: selectionSet :: Parser SelectionSet
+ Data.GraphQL.Parser: tok :: Parser a -> Parser a
+ Data.GraphQL.Parser: typeCondition :: Parser TypeCondition
+ Data.GraphQL.Parser: typeDefinition :: Parser TypeDefinition
+ Data.GraphQL.Parser: typeExtensionDefinition :: Parser TypeExtensionDefinition
+ Data.GraphQL.Parser: type_ :: Parser Type
+ Data.GraphQL.Parser: unionMembers :: Parser [NamedType]
+ Data.GraphQL.Parser: unionTypeDefinition :: Parser UnionTypeDefinition
+ Data.GraphQL.Parser: value :: Parser Value
+ Data.GraphQL.Parser: variable :: Parser Variable
+ Data.GraphQL.Parser: variableDefinition :: Parser VariableDefinition
+ Data.GraphQL.Parser: variableDefinitions :: Parser [VariableDefinition]
+ Data.GraphQL.Parser: whiteSpace :: Parser ()

Files

CHANGELOG.md view
@@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +## [0.2] - 2015-09-14+### Added+- Rudimentary parser for `GraphQL` which successfully parses the sample file+  `kitchen-sink.graphql` from `graphql-js` tests.+- Golden test for `kitchen-sink.grahql` parsing.+### Changed+- Many optional data types in `GraphQl` didn't need to be wrapped in a `Maybe`.+- Some `newtype`s became type synonyms for easier parsing.+ ## [0.1] - 2015-09-12 ### Added - Data types for the GraphQL language.
− Data/GraphQL.hs
@@ -1,140 +0,0 @@-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)
+ Data/GraphQL/AST.hs view
@@ -0,0 +1,143 @@+module Data.GraphQL.AST 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        Name [VariableDefinition] [Directive] SelectionSet+  | Mutation     Name [VariableDefinition] [Directive] SelectionSet+  -- Not official yet+  -- -- | Subscription Name [VariableDefinition] [Directive] SelectionSet+    deriving (Eq,Show)++data VariableDefinition = VariableDefinition Variable Type (Maybe DefaultValue)+                          deriving (Eq,Show)++newtype Variable = Variable Name deriving (Eq,Show)++type SelectionSet = [Selection]++data Selection = SelectionField Field+               | SelectionFragmentSpread FragmentSpread+               | SelectionInlineFragment InlineFragment+                 deriving (Eq,Show)++data Field = Field Alias Name [Argument]+                              [Directive]+                              SelectionSet+             deriving (Eq,Show)++type Alias = Name++data Argument = Argument Name Value deriving (Eq,Show)++-- * Fragments++data FragmentSpread = FragmentSpread Name [Directive]+                      deriving (Eq,Show)++data InlineFragment =+    InlineFragment TypeCondition [Directive] SelectionSet+    deriving (Eq,Show)++data FragmentDefinition =+    FragmentDefinition Name TypeCondition [Directive] SelectionSet+    deriving (Eq,Show)++type TypeCondition = NamedType++-- * Values++data Value = ValueVariable Variable+           | ValueInt Int -- TODO: Should this be `Integer`?+           | ValueFloat Double -- TODO: Should this be `Scientific`?+           | ValueBoolean Bool+           | ValueString Text+           | 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 [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 Interfaces [FieldDefinition]+                            deriving (Eq,Show)++type Interfaces = [NamedType]++data FieldDefinition = FieldDefinition Name ArgumentsDefinition Type+                       deriving (Eq,Show)++type ArgumentsDefinition = [InputValueDefinition]++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)
+ Data/GraphQL/Parser.hs view
@@ -0,0 +1,322 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE LambdaCase #-}+module Data.GraphQL.Parser where++import Prelude hiding (takeWhile)+import Control.Applicative ((<|>), empty, many, optional)+import Control.Monad (when)+import Data.Char++import Data.Text (Text, pack)+import Data.Attoparsec.Text+  ( Parser+  , (<?>)+  , anyChar+  , decimal+  , double+  , endOfLine+  , many1+  , manyTill+  , option+  , peekChar+  , satisfy+  , sepBy1+  , signed+  )++import Data.GraphQL.AST++-- * Name++-- XXX: Handle starting `_` and no number at the beginning:+-- https://facebook.github.io/graphql/#sec-Names+-- TODO: Use takeWhile1 instead for efficiency. With takeWhile1 there is no+-- parsing failure.+name :: Parser Name+name = tok $ pack <$> many1 (satisfy isAlphaNum)++-- * Document++document :: Parser Document+document = whiteSpace+     *> (Document <$> many1 definition)+    -- Try SelectionSet when no definition+    <|> (Document . pure+                  . DefinitionOperation+                  . Query mempty empty empty+                <$> selectionSet)+    <?> "document error!"++definition :: Parser Definition+definition = DefinitionOperation <$> operationDefinition+         <|> DefinitionFragment  <$> fragmentDefinition+         <|> DefinitionType      <$> typeDefinition+         <?> "definition error!"++operationDefinition :: Parser OperationDefinition+operationDefinition =+        op Query "query"+    <|> op Mutation "mutation"+    <?> "operationDefinition error!"+  where+    op f n = f <$ tok n <*> tok name+                        <*> optempty variableDefinitions+                        <*> optempty directives+                        <*> selectionSet++variableDefinitions :: Parser [VariableDefinition]+variableDefinitions = parens (many1 variableDefinition)++variableDefinition :: Parser VariableDefinition+variableDefinition =+    VariableDefinition <$> variable+                       <*  tok ":"+                       <*> type_+                       <*> optional defaultValue++defaultValue :: Parser DefaultValue+defaultValue = tok "=" *> value++variable :: Parser Variable+variable = Variable <$ tok "$" <*> name++selectionSet :: Parser SelectionSet+selectionSet = braces $ many1 selection++selection :: Parser Selection+selection = SelectionField <$> field+            -- Inline first to catch `on` case+        <|> SelectionInlineFragment <$> inlineFragment+        <|> SelectionFragmentSpread <$> fragmentSpread+        <?> "selection error!"++field :: Parser Field+field = Field <$> optempty alias+              <*> name+              <*> optempty arguments+              <*> optempty directives+              <*> optempty selectionSet++alias :: Parser Alias+alias = name <* tok ":"++arguments :: Parser [Argument]+arguments = parens $ many1 argument++argument :: Parser Argument+argument = Argument <$> name <* tok ":" <*> value++-- * Fragments++fragmentSpread :: Parser FragmentSpread+-- TODO: Make sure it fails when `... on`.+-- See https://facebook.github.io/graphql/#FragmentSpread+fragmentSpread = FragmentSpread+    <$  tok "..."+    <*> name+    <*> optempty directives++-- InlineFragment tried first in order to guard against 'on' keyword+inlineFragment :: Parser InlineFragment+inlineFragment = InlineFragment+    <$  tok "..."+    <*  tok "on"+    <*> typeCondition+    <*> optempty directives+    <*> selectionSet++fragmentDefinition :: Parser FragmentDefinition+fragmentDefinition = FragmentDefinition+    <$  tok "fragment"+    <*> name+    <*  tok "on"+    <*> typeCondition+    <*> optempty directives+    <*> selectionSet++typeCondition :: Parser TypeCondition+typeCondition = namedType++-- * Values++-- This will try to pick the first type it can parse. If you are working with+-- explicit types use the `typedValue` parser.+value :: Parser Value+value = ValueVariable <$> variable+        -- TODO: Handle arbitrary precision.+    <|> ValueInt     <$> tok (signed decimal)+    <|> ValueFloat   <$> tok (signed double)+    <|> ValueBoolean <$> bool+    -- TODO: Handle escape characters, unicode, etc+    <|> ValueString  <$> quotes name+    -- `true` and `false` have been tried before+    <|> ValueEnum    <$> name+    <|> ValueList    <$> listValue+    <|> ValueObject  <$> objectValue++-- Notice it can be empty+listValue :: Parser ListValue+listValue = ListValue <$> brackets (many value)++-- Notice it can be empty+objectValue :: Parser ObjectValue+objectValue = ObjectValue <$> braces (many objectField)++objectField :: Parser ObjectField+objectField = ObjectField <$> name <* tok ":" <*> value++bool :: Parser Bool+bool = True  <$ tok "true"+   <|> False <$ tok "false"++-- * Directives++directives :: Parser [Directive]+directives = many1 directive++directive :: Parser Directive+directive = Directive+    <$  tok "@"+    <*> name+    <*> optempty arguments++-- * Type Reference++type_ :: Parser Type+type_ = TypeNamed   <$> namedType+    <|> TypeList    <$> listType+    <|> TypeNonNull <$> nonNullType++namedType :: Parser NamedType+namedType = NamedType <$> name++listType :: Parser ListType+listType = ListType <$> brackets type_++nonNullType :: Parser NonNullType+nonNullType = NonNullTypeNamed <$> namedType <* tok "!"+          <|> NonNullTypeList  <$> listType  <* tok "!"++-- * Type Definition++typeDefinition :: Parser TypeDefinition+typeDefinition =+        TypeDefinitionObject        <$> objectTypeDefinition+    <|> TypeDefinitionInterface     <$> interfaceTypeDefinition+    <|> TypeDefinitionUnion         <$> unionTypeDefinition+    <|> TypeDefinitionScalar        <$> scalarTypeDefinition+    <|> TypeDefinitionEnum          <$> enumTypeDefinition+    <|> TypeDefinitionInputObject   <$> inputObjectTypeDefinition+    <|> TypeDefinitionTypeExtension <$> typeExtensionDefinition+    <?> "typeDefinition error!"++objectTypeDefinition :: Parser ObjectTypeDefinition+objectTypeDefinition = ObjectTypeDefinition+    <$  tok "type"+    <*> name+    <*> optempty interfaces+    <*> fieldDefinitions+    <?> "objectTypeDefinition error!"++interfaces :: Parser Interfaces+interfaces = tok "implements" *> many1 namedType++fieldDefinitions :: Parser [FieldDefinition]+fieldDefinitions = braces $ many1 fieldDefinition++fieldDefinition :: Parser FieldDefinition+fieldDefinition = FieldDefinition+    <$> name+    <*> optempty argumentsDefinition+    <*  tok ":"+    <*> type_++argumentsDefinition :: Parser ArgumentsDefinition+argumentsDefinition = inputValueDefinitions++inputValueDefinitions :: Parser [InputValueDefinition]+inputValueDefinitions = parens $ many1 inputValueDefinition++inputValueDefinition :: Parser InputValueDefinition+inputValueDefinition = InputValueDefinition+    <$> name+    <*  tok ":"+    <*> type_+    <*> optional defaultValue++interfaceTypeDefinition :: Parser InterfaceTypeDefinition+interfaceTypeDefinition = InterfaceTypeDefinition+    <$  tok "interface"+    <*> name+    <*> fieldDefinitions++unionTypeDefinition :: Parser UnionTypeDefinition+unionTypeDefinition = UnionTypeDefinition+    <$  tok "union"+    <*> name+    <*  tok "="+    <*> unionMembers++unionMembers :: Parser [NamedType]+unionMembers = namedType `sepBy1` tok "|"++scalarTypeDefinition :: Parser ScalarTypeDefinition+scalarTypeDefinition = ScalarTypeDefinition+    <$  tok "scalar"+    <*> name++enumTypeDefinition :: Parser EnumTypeDefinition+enumTypeDefinition = EnumTypeDefinition+    <$  tok "enum"+    <*> name+    <*> enumValueDefinitions++enumValueDefinitions :: Parser [EnumValueDefinition]+enumValueDefinitions = braces $ many1 enumValueDefinition++enumValueDefinition :: Parser EnumValueDefinition+enumValueDefinition = EnumValueDefinition <$> name++inputObjectTypeDefinition :: Parser InputObjectTypeDefinition+inputObjectTypeDefinition = InputObjectTypeDefinition+    <$  tok "input"+    <*> name+    <*> inputValueDefinitions++typeExtensionDefinition :: Parser TypeExtensionDefinition+typeExtensionDefinition = TypeExtensionDefinition+    <$  tok "extend"+    <*> objectTypeDefinition++-- * Internal++tok :: Parser a -> Parser a+tok p = p <* whiteSpace++parens :: Parser a -> Parser a+parens = between "(" ")"++braces :: Parser a -> Parser a+braces = between "{" "}"++quotes :: Parser a -> Parser a+quotes = between "\"" "\""++brackets :: Parser a -> Parser a+brackets = between "[" "]"++between :: Parser Text -> Parser Text -> Parser a -> Parser a+between open close p = tok open *> p <* tok close++-- `empty` /= `pure mempty` for `Parser`.+optempty :: Monoid a => Parser a -> Parser a+optempty = option mempty++-- ** WhiteSpace+--+whiteSpace :: Parser ()+whiteSpace = peekChar >>= \case+    Just c -> if isSpace c || c == ','+              then anyChar *> whiteSpace+              else when (c == '#') $ manyTill anyChar endOfLine *> whiteSpace+    _ -> return ()
README.md view
@@ -7,11 +7,14 @@ [`graphql-js`](https://github.com/graphql/graphql-js). Next releases should include: -- [ ] Parser for the GraphQL language.-- [ ] Data types for the GraphQL Schema language.+- [x] GraphQL AST+- [x] Parser for the GraphQL language. See TODO for caveats.+- [ ] GraphQL Schema AST. - [ ] Parser for the GraphQL Schema language. - [ ] Interpreter of GraphQL requests. - [ ] Utilities to define GraphQL types and schema.++See the TODO file for more concrete tasks.  ## Contact 
graphql.cabal view
@@ -1,9 +1,9 @@ name:                graphql-version:             0.1-synopsis:            GraphQL Haskell implementation+version:             0.2+synopsis:            Haskell GraphQL implementation description:-  For now this package provides the data types for the GraphQL language.-  Further releases will cover more aspects of the GraphQL specification.+  This package provides a rudimentary parser for the+  <https://facebook.github.io/graphql/ GraphQL> language. homepage:            https://github.com/jdnavarro/graphql-haskell bug-reports:         https://github.com/jdnavarro/graphql-haskell/issues license:             BSD3@@ -13,14 +13,32 @@ copyright:           Copyright (C) 2015 J. Daniel Navarro category:            Web build-type:          Simple-extra-source-files:  README.md CHANGELOG.md stack.yaml cabal-version:       >=1.10+tested-with:         GHC == 7.10+extra-source-files:  README.md CHANGELOG.md stack.yaml  library-  exposed-modules:     Data.GraphQL+  default-language:    Haskell2010+  ghc-options:         -Wall+  exposed-modules:     Data.GraphQL.AST+                       Data.GraphQL.Parser   build-depends:       base >= 4.7 && < 5,-                       text >=0.11.3.1+                       text >=0.11.3.1,+                       attoparsec >=0.10.4.0++test-suite golden   default-language:    Haskell2010+  type:                exitcode-stdio-1.0+  hs-source-dirs:      tests+  main-is:             golden.hs+  ghc-options:         -Wall+  build-depends:       base >= 4.6 && <5,+                       bytestring,+                       text,+                       attoparsec,+                       tasty >=0.10,+                       tasty-golden,+                       graphql  source-repository head   type:     git
+ tests/golden.hs view
@@ -0,0 +1,21 @@+{-# LANGUAGE OverloadedStrings #-}+module Main where++import Control.Monad ((>=>))+import Data.Attoparsec.Text (parseOnly)+import Data.ByteString.Lazy.Char8 as B8+import qualified Data.Text.IO as TIO+import Test.Tasty (defaultMain)+import Test.Tasty.Golden (goldenVsString)++import Data.GraphQL.Parser (document)++main :: IO ()+main = defaultMain+     $ goldenVsString "kitchen-sink.graphql"+                      "./tests/data/kitchen-sink.graphql.golden"+                      (parse "./tests/data/kitchen-sink.graphql")+  where+    parse = fmap (parseOnly document) . TIO.readFile+        >=> pure . either B8.pack (flip B8.snoc '\n' . B8.pack . show)+