graphql-api-0.4.0: GraphQL API

Safe HaskellNone
LanguageHaskell2010

GraphQL.API

Description

Use this to define your GraphQL schema with Haskell types.

Synopsis

Documentation

data Object (name :: Symbol) (interfaces :: [Type]) (fields :: [Type]) Source #

Instances
(RunFields m (RunFieldsType m fields), HasObjectDefinition (Object typeName interfaces fields), Monad m) => HasResolver m (Object typeName interfaces fields :: Type) Source # 
Instance details

Defined in GraphQL.Internal.Resolver

Associated Types

type Handler m (Object typeName interfaces fields) :: Type Source #

Methods

resolve :: Handler m (Object typeName interfaces fields) -> Maybe (SelectionSetByType Value) -> m (Result Value) Source #

(KnownSymbol ks, HasInterfaceDefinitions is, HasFieldDefinitions ts) => HasAnnotatedType (Object ks is ts :: Type) Source # 
Instance details

Defined in GraphQL.Internal.API

(KnownSymbol ks, HasInterfaceDefinitions is, HasFieldDefinitions fields) => HasObjectDefinition (Object ks is fields :: Type) Source # 
Instance details

Defined in GraphQL.Internal.API

type Handler m (Object typeName interfaces fields :: Type) Source # 
Instance details

Defined in GraphQL.Internal.Resolver

type Handler m (Object typeName interfaces fields :: Type)

data Field (name :: Symbol) (fieldType :: Type) Source #

data Argument (name :: Symbol) (argType :: Type) Source #

data Union (name :: Symbol) (types :: [Type]) Source #

Instances
(Monad m, KnownSymbol unionName, RunUnion m (Union unionName objects) objects) => HasResolver m (Union unionName objects :: Type) Source # 
Instance details

Defined in GraphQL.Internal.Resolver

Associated Types

type Handler m (Union unionName objects) :: Type Source #

Methods

resolve :: Handler m (Union unionName objects) -> Maybe (SelectionSetByType Value) -> m (Result Value) Source #

(KnownSymbol ks, HasUnionTypeObjectTypeDefinitions as) => HasAnnotatedType (Union ks as :: Type) Source # 
Instance details

Defined in GraphQL.Internal.API

type Handler m (Union unionName objects :: Type) Source # 
Instance details

Defined in GraphQL.Internal.Resolver

type Handler m (Union unionName objects :: Type)

data List (elemType :: Type) Source #

Instances
HasAnnotatedInputType t => HasAnnotatedInputType (List t) Source # 
Instance details

Defined in GraphQL.Internal.API

(Monad m, Applicative m, HasResolver m hg) => HasResolver m (List hg :: Type) Source # 
Instance details

Defined in GraphQL.Internal.Resolver

Associated Types

type Handler m (List hg) :: Type Source #

HasAnnotatedType t => HasAnnotatedType (List t :: Type) Source # 
Instance details

Defined in GraphQL.Internal.API

type Handler m (List hg :: Type) Source # 
Instance details

Defined in GraphQL.Internal.Resolver

type Handler m (List hg :: Type)

data Enum (name :: Symbol) (values :: Type) Source #

Instances
(Applicative m, GraphQLEnum enum) => HasResolver m (Enum ksN enum :: Type) Source # 
Instance details

Defined in GraphQL.Internal.Resolver

Associated Types

type Handler m (Enum ksN enum) :: Type Source #

Methods

resolve :: Handler m (Enum ksN enum) -> Maybe (SelectionSetByType Value) -> m (Result Value) Source #

(KnownSymbol ks, GraphQLEnum enum) => HasAnnotatedType (Enum ks enum :: Type) Source # 
Instance details

Defined in GraphQL.Internal.API

(KnownSymbol ks, GraphQLEnum enum) => HasAnnotatedInputType (Enum ks enum) Source # 
Instance details

Defined in GraphQL.Internal.API

type Handler m (Enum ksN enum :: Type) Source # 
Instance details

Defined in GraphQL.Internal.Resolver

type Handler m (Enum ksN enum :: Type)

class GraphQLEnum a where Source #

For each enum type we need 1) a list of all possible values 2) a way to serialise and 3) deserialise.

TODO: Update this comment to explain what a GraphQLEnum is, why you might want an instance, and any laws that apply to method relations.

Minimal complete definition

Nothing

Methods

enumValues :: [Either NameError Name] Source #

enumValues :: (Generic a, GenericEnumValues (Rep a)) => [Either NameError Name] Source #

enumFromValue :: Name -> Either Text a Source #

enumFromValue :: (Generic a, GenericEnumValues (Rep a)) => Name -> Either Text a Source #

enumToValue :: a -> Name Source #

enumToValue :: (Generic a, GenericEnumValues (Rep a)) => a -> Name Source #

data Interface (name :: Symbol) (fields :: [Type]) Source #

data a :> b infixr 8 Source #

Argument operator. Can only be used with Field.

Say we have a Company object that has a field that shows whether someone is an employee, e.g.

  type Company {
    hasEmployee(employeeName: String!): String!
  }

Then we might represent that as:

>>> type Company = Object "Company" '[] '[Argument "employeeName" Text :> Field "hasEmployee" Bool]

For multiple arguments, simply chain them together with :>, ending finally with Field. e.g.

  Argument "foo" String :> Argument "bar" Int :> Field "qux" Int

Constructors

a :> b infixr 8 

class Defaultable a where Source #

Specify a default value for a type in a GraphQL schema.

GraphQL schema can have default values in certain places. For example, arguments to fields can have default values. Because we cannot lift arbitrary values to the type level, we need some way of getting at those values. This typeclass provides the means.

To specify a default, implement this typeclass.

The default implementation is to say that there *is* no default for this type.

Minimal complete definition

Nothing

Methods

defaultFor :: Name -> Maybe a Source #

defaultFor returns the value to be used when no value has been given.

Instances
Defaultable Bool Source # 
Instance details

Defined in GraphQL.Internal.API

Defaultable Double Source # 
Instance details

Defined in GraphQL.Internal.API

Defaultable Int32 Source # 
Instance details

Defined in GraphQL.Internal.API

Defaultable Text Source # 
Instance details

Defined in GraphQL.Internal.API

Defaultable (Maybe a) Source # 
Instance details

Defined in GraphQL.Internal.API

Methods

defaultFor :: Name -> Maybe (Maybe a) Source #

class HasObjectDefinition a where Source #

Instances
(KnownSymbol ks, HasInterfaceDefinitions is, HasFieldDefinitions fields) => HasObjectDefinition (Object ks is fields :: Type) Source # 
Instance details

Defined in GraphQL.Internal.API

class HasAnnotatedInputType a where Source #

Minimal complete definition

Nothing

Instances
HasAnnotatedInputType Bool Source # 
Instance details

Defined in GraphQL.Internal.API

HasAnnotatedInputType Double Source # 
Instance details

Defined in GraphQL.Internal.API

HasAnnotatedInputType Float Source # 
Instance details

Defined in GraphQL.Internal.API

HasAnnotatedInputType Int Source # 
Instance details

Defined in GraphQL.Internal.API

HasAnnotatedInputType Int32 Source # 
Instance details

Defined in GraphQL.Internal.API

HasAnnotatedInputType Text Source # 
Instance details

Defined in GraphQL.Internal.API

HasAnnotatedInputType a => HasAnnotatedInputType (Maybe a) Source # 
Instance details

Defined in GraphQL.Internal.API

HasAnnotatedInputType t => HasAnnotatedInputType (List t) Source # 
Instance details

Defined in GraphQL.Internal.API

(KnownSymbol ks, GraphQLEnum enum) => HasAnnotatedInputType (Enum ks enum) Source # 
Instance details

Defined in GraphQL.Internal.API

data SchemaError Source #

The type-level schema was somehow invalid.