diff --git a/docs/tutorial/Makefile b/docs/tutorial/Makefile deleted file mode 100644 index 04d8d71..0000000 --- a/docs/tutorial/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -default: - pandoc -f markdown+lhs+yaml_metadata_block --highlight-style=haddock -S -c "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" --section-divs -c tutorial.css --toc --standalone -t html5 -o tutorial.html tutorial.lhs - pandoc -f markdown+lhs+yaml_metadata_block --highlight-style=haddock --toc --standalone -t rst -o tutorial.rst tutorial.lhs - pandoc -f markdown+lhs+yaml_metadata_block --highlight-style=haddock --toc --standalone -t latex -o tutorial.pdf tutorial.lhs diff --git a/docs/tutorial/tutorial.css b/docs/tutorial/tutorial.css deleted file mode 100644 index 831b73d..0000000 --- a/docs/tutorial/tutorial.css +++ /dev/null @@ -1,3 +0,0 @@ -body { - padding: 0 20px; -} diff --git a/docs/tutorial/tutorial.html b/docs/tutorial/tutorial.html deleted file mode 100644 index cbec66d..0000000 --- a/docs/tutorial/tutorial.html +++ /dev/null @@ -1,166 +0,0 @@ - - -
- - - -Welcome to graphql-haskell!
-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.
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE LambdaCase #-}
-module Main where
-
-import Prelude hiding (empty, putStrLn)
-import Data.GraphQL
-import Data.GraphQL.Schema
-import qualified Data.GraphQL.Schema as Schema
-
-import Control.Applicative
-import Data.List.NonEmpty (NonEmpty((:|)))
-import Data.Text hiding (empty)
-import Data.Aeson
-import Data.ByteString.Lazy.Char8 (putStrLn)
-
-import Data.Time
-
-import Debug.TraceNow, as our first example, we are going to look at the example from graphql.js.
-First we build a GraphQL schema.
-schema1 :: Alternative f => Schema f
-schema1 = hello :| []
-
-hello :: Alternative f => Resolver f
-hello = Schema.scalar "hello" ("it's me" :: Text)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 = putStrLn =<< encode <$> graphql schema1 query1This runs the query by fetching the one field defined, returning
-{"data" : {"hello":"it's me"}}
For this example, we’re going to be using time.
-schema2 :: Schema IO
-schema2 = time :| []
-
-time :: Resolver IO
-time = Schema.scalarA "time" $ \case
-  [] -> do t <- getCurrentTime
-           return $ show t
-  _  -> emptyThis defines a simple schema with one type and one field, which resolves to the current time.
-Next we define our query.
-query2 :: Text
-query2 = "{ time }"
-
-main2 :: IO ()
-main2 = putStrLn =<< encode <$> graphql schema2 query2This runs the query, returning the current time
-{"data": {"time":"2016-03-08 23:28:14.546899 UTC"}}
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.
mainShouldFail :: IO ()
-mainShouldFail = do
-  r <- graphql schema1 query1
-  putStrLn $ encode r
-  putStrLn "This will fail"
-  r <- graphql schema1 queryShouldFail
-  putStrLn $ encode rThis outputs:
-{"data": {"hello": "it's me"}}
-This will fail
-{"data": {"boyhowdy": null}, "errors":[{"message": "the field boyhowdy did not resolve."}]}Now that we have two resolvers, we can define a schema which uses them both.
-schema3 :: Schema IO
-schema3 = hello :| [time]
-
-query3 :: Text
-query3 = "query timeAndHello { time hello }"
-
-main3 :: IO ()
-main3 = putStrLn =<< encode <$> graphql schema3 query3This 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.
In GraphQL there can only be one operation per query.
-More examples on queries and a more complex schema can be found in the test directory, in the Test.StarWars module. This includes a more complex schema, and more complex queries.
-