diff options
| author | Danny Navarro <j@dannynavarro.net> | 2016-01-30 12:29:49 +0100 |
|---|---|---|
| committer | Danny Navarro <j@dannynavarro.net> | 2016-01-30 12:29:49 +0100 |
| commit | eca3c2d8d4d427b58c2109c277975219bad58e43 (patch) | |
| tree | 82a34252b046b3e3307e2c2c803392c1a261b156 /Data/GraphQL/Schema.hs | |
| parent | a832991ac0ed06551c58376dc983936675b18ef5 (diff) | |
| download | graphql-eca3c2d8d4d427b58c2109c277975219bad58e43.tar.gz | |
Generalize `Maybe` type constructor to any Monad
This allows schema definitions with side-effects for any type with a
Monadic/Alternative implementation like IO for example.
Diffstat (limited to 'Data/GraphQL/Schema.hs')
| -rw-r--r-- | Data/GraphQL/Schema.hs | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/Data/GraphQL/Schema.hs b/Data/GraphQL/Schema.hs index 795bb19..a4ba0ca 100644 --- a/Data/GraphQL/Schema.hs +++ b/Data/GraphQL/Schema.hs @@ -1,27 +1,22 @@ module Data.GraphQL.Schema where import Data.Maybe (catMaybes) -import Text.Show.Functions () import Data.Text (Text) import Data.Aeson (ToJSON(toJSON)) --- TODO: Support side-effects +data Schema f = Schema (QueryRoot f) -- (Maybe MutationRoot) -data Schema = Schema QueryRoot -- (Maybe MutationRoot) +type QueryRoot f = Resolver f -type QueryRoot = Resolver +type Resolver f = Input -> f (Output f) -type Resolver = Input -> Output - -data Output = OutputResolver Resolver - | OutputList [Output] - | OutputScalar Scalar - -- | OutputUnion [Output] - -- | OutputEnum [Scalar] - -- | OutputNonNull (Output) - | OutputError - deriving (Show) +data Output f = OutputResolver (Resolver f) + | OutputList (f [Output f]) + | OutputScalar (f Scalar) + -- | OutputUnion [Output] + -- | OutputEnum [Scalar] + -- | OutputNonNull (Output) data Input = InputScalar Scalar | InputField Text |
