Fix value parsing

- Add missing variable parsing.
- Reuse `name` in value string.

This parses successfully the `kitchen-sink.graphql` sample from
`graphql-js`.
This commit is contained in:
Danny Navarro 2015-09-14 14:11:32 +02:00
parent c0b6fc8a05
commit 26e2372c5e

View File

@ -149,12 +149,13 @@ typeCondition = namedType
-- 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 = -- TODO: Handle arbitrary precision.
ValueInt <$> signed decimal
<|> ValueFloat <$> signed double
value = ValueVariable <$> variable
-- TODO: Handle arbitrary precision.
<|> ValueInt <$> tok (signed decimal)
<|> ValueFloat <$> tok (signed double)
<|> ValueBoolean <$> bool
-- TODO: Handle escape characters, unicode, etc
<|> ValueString <$ "\"" <*> (pack <$> many anyChar) <* "\""
<|> ValueString <$> quotes name
-- `true` and `false` have been tried before
<|> ValueEnum <$> name
<|> ValueList <$> listValue
@ -172,8 +173,8 @@ objectField :: Parser ObjectField
objectField = ObjectField <$> name <* tok ":" <*> value
bool :: Parser Bool
bool = True <$ "true"
<|> False <$ "false"
bool = True <$ tok "true"
<|> False <$ tok "false"
-- * Directives
@ -305,6 +306,9 @@ parens = between "(" ")"
braces :: Parser a -> Parser a
braces = between "{" "}"
quotes :: Parser a -> Parser a
quotes = between "\"" "\""
brackets :: Parser a -> Parser a
brackets = between "[" "]"