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 +9/−0
- Data/GraphQL.hs +0/−140
- Data/GraphQL/AST.hs +143/−0
- Data/GraphQL/Parser.hs +322/−0
- README.md +5/−2
- graphql.cabal +25/−7
- tests/golden.hs +21/−0
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)+