summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2020-07-02 07:33:03 +0200
committerEugen Wissner <belka@caraus.de>2020-07-02 07:33:03 +0200
commit2f4310268a12e46911e3c3e9c2044ad1e46ae9f6 (patch)
treebfb73fab1b2689fd1ee0c58554ee9a851c5a64de /docs
parent8b164c4844da128dc5119febc3defb1ebdf2cc3a (diff)
downloadgraphql-2f4310268a12e46911e3c3e9c2044ad1e46ae9f6.tar.gz
Merge Trans and Type.Out modules
Diffstat (limited to 'docs')
-rw-r--r--docs/tutorial/tutorial.lhs49
1 files changed, 23 insertions, 26 deletions
diff --git a/docs/tutorial/tutorial.lhs b/docs/tutorial/tutorial.lhs
index 2c6e877..06494a2 100644
--- a/docs/tutorial/tutorial.lhs
+++ b/docs/tutorial/tutorial.lhs
@@ -7,9 +7,11 @@ title: GraphQL Haskell Tutorial
Welcome to graphql-haskell!
-We have written a small tutorial to help you (and ourselves) understand the graphql package.
+We have written a small tutorial to help you (and ourselves) understand the
+graphql package.
-Since this file is a literate haskell file, we start by importing some dependencies.
+Since this file is a literate haskell file, we start by importing some
+dependencies.
> {-# LANGUAGE OverloadedStrings #-}
> module Main where
@@ -23,16 +25,16 @@ Since this file is a literate haskell file, we start by importing some dependenc
> import Data.Time (getCurrentTime)
>
> import Language.GraphQL
-> import Language.GraphQL.Trans
> import Language.GraphQL.Type
> import qualified Language.GraphQL.Type.Out as Out
>
> import Prelude hiding (putStrLn)
+
=== First example ===
-Now, as our first example, we are going to look at the
-example from [graphql.js](https://github.com/graphql/graphql-js).
+Now, as our first example, we are going to look at the example from
+[graphql.js](https://github.com/graphql/graphql-js).
First we build a GraphQL schema.
@@ -49,26 +51,24 @@ First we build a GraphQL schema.
> hello :: ResolverT IO Value
> hello = pure $ String "it's me"
-This defines a simple schema with one type and one field, that resolves to a fixed value.
+This defines a simple schema with one type and one field, that resolves to a
+fixed value.
Next we define our query.
> query1 :: Text
> query1 = "{ hello }"
-
To run the query, we call the `graphql` with the schema and the query.
> main1 :: IO ()
> main1 = graphql schema1 query1 >>= putStrLn . encode
-This runs the query by fetching the one field defined,
-returning
+This runs the query by fetching the one field defined, returning
```{"data" : {"hello":"it's me"}}```
-
=== Monadic actions ===
For this example, we're going to be using time.
@@ -88,8 +88,8 @@ For this example, we're going to be using time.
> t <- liftIO getCurrentTime
> pure $ String $ Text.pack $ show t
-This defines a simple schema with one type and one field,
-which resolves to the current time.
+This defines a simple schema with one type and one field, which resolves to the
+current time.
Next we define our query.
@@ -106,35 +106,29 @@ This runs the query, returning the current time
=== Errors ===
-Errors are handled according to the spec,
-with fields that cause erros being resolved to `null`,
-and an error being added to the error list.
+Errors are handled according to the spec, with fields that cause erros being
+resolved to `null`, and an error being added to the error list.
An example of this is the following query:
> queryShouldFail :: Text
> queryShouldFail = "{ boyhowdy }"
-Since there is no `boyhowdy` field in our schema, it will not resolve,
-and the query will fail, as we can see in the following example.
+Since there is no `boyhowdy` field in our schema, it will not resolve, and the
+query will fail, as we can see in the following example.
> mainShouldFail :: IO ()
> mainShouldFail = do
-> success <- graphql schema1 query1
-> putStrLn $ encode success
-> putStrLn "This will fail"
> failure <- graphql schema1 queryShouldFail
> putStrLn $ encode failure
->
This outputs:
```
-{"data": {"hello": "it's me"}}
-This will fail
{"data": {"boyhowdy": null}, "errors":[{"message": "the field boyhowdy did not resolve."}]}
```
+
=== Combining resolvers ===
Now that we have two resolvers, we can define a schema which uses them both.
@@ -158,15 +152,18 @@ This queries for both time and hello, returning
```{ "data": {"hello":"it's me","time":"2016-03-08 23:29:11.62108 UTC"}}```
-Notice that we can name our queries, as we did with `timeAndHello`. Since we have only been using single queries, we can use the shorthand `{ time hello}`, as we have been doing in the previous examples.
+Notice that we can name our queries, as we did with `timeAndHello`. Since we
+have only been using single queries, we can use the shorthand `{ time hello }`,
+as we have been doing in the previous examples.
In GraphQL there can only be one operation per query.
== Further examples ==
-More examples on queries and a more complex schema can be found in the test directory,
-in the [Test.StarWars](../../tests/Test/StarWars) module. This includes a more complex schema, and more complex queries.
+More examples on queries and a more complex schema can be found in the test
+directory, in the [Test.StarWars](../../tests/Test/StarWars) module. This
+includes a more complex schema, and more complex queries.
> main :: IO ()
> main = main1 >> main2 >> mainShouldFail >> main3