-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Morpheus GraphQL -- -- Build GraphQL APIs with your favourite functional language! @package morpheus-graphql @version 0.17.0 -- | associating types to GraphQL Kinds module Data.Morpheus.Kind -- | GraphQL Scalar: Int, Float, String, Boolean or any user defined custom -- Scalar type type SCALAR = 'SCALAR -- | Deprecated: use: deriving(GQLType), will be automatically -- inferred type OBJECT = 'TYPE -- | Deprecated: use: deriving(GQLType), will be automatically -- inferred type ENUM = 'TYPE -- | GraphQL Arrays , Resolvers and NonNull fields type WRAPPER = 'WRAPPER -- | Deprecated: use: deriving(GQLType), IMPORTANT: only types with -- constructor namename will sustain their form, other -- union constructors will be wrapped inside an new object type UNION = 'TYPE -- | Deprecated: use: deriving(GQLType), will be automatically -- inferred type INPUT_OBJECT = 'TYPE data DerivingKind -- | Deprecated: use: DerivingKind type GQL_KIND = DerivingKind -- | Deprecated: use: deriving(GQLType), will be automatically -- inferred type OUTPUT = 'TYPE -- | Deprecated: use: deriving(GQLType), will be automatically -- inferred type INPUT = 'TYPE -- | GraphQL interface type INTERFACE = 'INTERFACE class ToValue (a :: DerivingKind) toValue :: ToValue a => f a -> DerivingKind isObject :: DerivingKind -> Bool -- | GraphQL input, type, union , enum type TYPE = 'TYPE type CUSTOM = 'CUSTOM instance Data.Morpheus.Kind.ToValue 'Data.Morpheus.Kind.SCALAR instance Data.Morpheus.Kind.ToValue 'Data.Morpheus.Kind.WRAPPER instance Data.Morpheus.Kind.ToValue 'Data.Morpheus.Kind.TYPE instance Data.Morpheus.Kind.ToValue 'Data.Morpheus.Kind.INTERFACE instance Data.Morpheus.Kind.ToValue 'Data.Morpheus.Kind.CUSTOM -- | GQL Types module Data.Morpheus.Types -- | GraphQL type, every graphQL type should have an instance of -- Generic and GQLType. -- --
-- ... deriving (Generic, GQLType) -- ---- -- if you want to add description -- --
-- ... deriving (Generic) -- -- instance GQLType ... where -- description = const "your description ..." -- --class ToValue (KIND a) => GQLType a where { type family KIND a :: DerivingKind; type KIND a = TYPE; } implements :: GQLType a => f a -> [SchemaT OUT TypeName] description :: GQLType a => f a -> Maybe Text getDescriptions :: GQLType a => f a -> Map Text Description typeOptions :: GQLType a => f a -> GQLTypeOptions -> GQLTypeOptions getDirectives :: GQLType a => f a -> Map Text (Directives CONST) -- | GraphQL Scalar Serializer class EncodeScalar a encodeScalar :: EncodeScalar a => a -> ScalarValue -- | GraphQL Wrapper Serializer class EncodeWrapper (wrapper :: Type -> Type) encodeWrapper :: (EncodeWrapper wrapper, Monad m) => (a -> m (ResolverValue m)) -> wrapper a -> m (ResolverValue m) -- | GraphQL Scalar parser class DecodeScalar a decodeScalar :: DecodeScalar a => ScalarValue -> Either Text a -- | GraphQL Wrapper Deserializer class DecodeWrapper (f :: Type -> Type) decodeWrapper :: (DecodeWrapper f, Monad m, DecodeWrapperConstraint f a) => (ValidValue -> m a) -> ValidValue -> ExceptT Message m (f a) -- | GraphQL HTTP Request Body data GQLRequest GQLRequest :: Maybe FieldName -> Text -> Maybe Value -> GQLRequest [operationName] :: GQLRequest -> Maybe FieldName [query] :: GQLRequest -> Text [variables] :: GQLRequest -> Maybe Value -- | GraphQL Response data GQLResponse Data :: ValidValue -> GQLResponse Errors :: [GQLError] -> GQLResponse -- | default GraphQL type, parses only String and Int values, -- serialized always as String newtype ID ID :: Text -> ID [unpackID] :: ID -> Text -- | Primitive Values for GQLScalar: Int, Float, -- String, Boolean. for performance reason type Text -- represents GraphQl String value data ScalarValue Int :: Int -> ScalarValue Float :: Double -> ScalarValue String :: Text -> ScalarValue Boolean :: Bool -> ScalarValue Value :: Value -> ScalarValue -- | GraphQL Root resolver, also the interpreter generates a GQL schema -- from it. queryResolver is required, mutationResolver and -- subscriptionResolver are optional, if your schema does not -- supports mutation or subscription , you can use -- () for it. data RootResolver (m :: * -> *) event (query :: (* -> *) -> *) (mut :: (* -> *) -> *) (sub :: (* -> *) -> *) RootResolver :: query (Resolver QUERY event m) -> mut (Resolver MUTATION event m) -> sub (Resolver SUBSCRIPTION event m) -> RootResolver (m :: * -> *) event (query :: (* -> *) -> *) (mut :: (* -> *) -> *) (sub :: (* -> *) -> *) [queryResolver] :: RootResolver (m :: * -> *) event (query :: (* -> *) -> *) (mut :: (* -> *) -> *) (sub :: (* -> *) -> *) -> query (Resolver QUERY event m) [mutationResolver] :: RootResolver (m :: * -> *) event (query :: (* -> *) -> *) (mut :: (* -> *) -> *) (sub :: (* -> *) -> *) -> mut (Resolver MUTATION event m) [subscriptionResolver] :: RootResolver (m :: * -> *) event (query :: (* -> *) -> *) (mut :: (* -> *) -> *) (sub :: (* -> *) -> *) -> sub (Resolver SUBSCRIPTION event m) constRes :: (WithOperation o, Monad m) => b -> a -> Resolver o e m b constMutRes :: Monad m => [e] -> a -> args -> ResolverM e m a data Undefined (m :: * -> *) Undefined :: Undefined (m :: * -> *) data Resolver (o :: OperationType) event (m :: Type -> Type) value type QUERY = 'Query type MUTATION = 'Mutation type SUBSCRIPTION = 'Subscription -- | Lift a computation from the argument monad to the constructed monad. lift :: (MonadTrans t, Monad m) => m a -> t m a liftEither :: (MonadTrans t, Monad (t m), Failure Message (t m)) => Monad m => m (Either String a) -> t m a -- | Deprecated: use "fail" from MonadFail failRes :: (Monad m, WithOperation o) => String -> Resolver o e m a type WithOperation (o :: OperationType) = LiftOperation o publish :: Monad m => [e] -> Resolver MUTATION e m () subscribe :: forall (m :: Type -> Type) e a. Monad m => Channel e -> Resolver QUERY e m (e -> Resolver SUBSCRIPTION e m a) -> SubscriptionField (Resolver SUBSCRIPTION e m a) -- | A function to return the internal ResolverContext within a -- resolver's monad. Using the ResolverContext itself is unsafe -- because it expposes internal structures of the AST, but you can use -- the Data.Morpheus.Types.SelectionTree typeclass to manipulate -- the internal AST with a safe interface. unsafeInternalContext :: forall (m :: Type -> Type) (o :: OperationType) e. (Monad m, LiftOperation o) => Resolver o e m ResolverContext data ResolverContext ResolverContext :: Selection VALID -> Schema VALID -> Operation VALID -> TypeName -> Config -> ResolverContext [currentSelection] :: ResolverContext -> Selection VALID [schema] :: ResolverContext -> Schema VALID [operation] :: ResolverContext -> Operation VALID [currentTypeName] :: ResolverContext -> TypeName [config] :: ResolverContext -> Config type ResolverO o e m a = (WithOperation o) => Flexible (Resolver o e m) a type ComposedResolver o e m f a = (WithOperation o) => Composed (Resolver o e m) f a type ResolverQ e m a = Flexible (Resolver QUERY e m) a type ResolverM e m a = Flexible (Resolver MUTATION e m) a type ResolverS e m a = Flexible (Resolver SUBSCRIPTION e m) a -- | Deprecated: use ResolverQ type ResolveQ e m a = ResolverQ e m a -- | Deprecated: use ResolverM type ResolveM e m a = ResolverM e m a -- | Deprecated: use ResolverS type ResolveS e m a = ResolverS e m a -- | Deprecated: use ResolverQ type Res = Resolver QUERY -- | Deprecated: use ResolverM type MutRes = Resolver MUTATION -- | Deprecated: use ResolverS type SubRes = Resolver SUBSCRIPTION -- | Deprecated: use ResolverQ type IORes e = Res e IO -- | Deprecated: use ResolverM type IOMutRes e = MutRes e IO -- | Deprecated: use ResolverS type IOSubRes e = SubRes e IO interface :: (GQLType a, DeriveType OUT a) => Proxy a -> SchemaT OUT TypeName data SubscriptionField a data App event (m :: Type -> Type) class RenderGQL a render :: RenderGQL a => a -> ByteString data GQLTypeOptions instance Data.Morpheus.Types.FlexibleResolver f a instance Data.Morpheus.Types.FlexibleResolver f a -- | GraphQL Wai Server Applications module Data.Morpheus.Server httpPlayground :: ByteString -- | normal morpheus server validates schema at runtime (after the schema -- derivation). this method allows you to validate it at compile time. compileTimeSchemaValidation :: SchemaConstraints event m qu mu su => proxy (root m event qu mu su) -> Q Exp module Data.Morpheus.Document -- | Generates schema.gql file from RootResolver toGraphQLDocument :: RootResolverConstraint m event query mut sub => proxy (RootResolver m event query mut sub) -> ByteString gqlDocument :: QuasiQuoter importGQLDocument :: FilePath -> Q [Dec] importGQLDocumentWithNamespace :: FilePath -> Q [Dec] type RootResolverConstraint m e query mutation subscription = (EncodeConstraints e m query mutation subscription, SchemaConstraints e m query mutation subscription, Monad m) -- | Build GraphQL APIs with your favorite functional language! module Data.Morpheus -- | main query processor and resolver interpreter :: (MapAPI a b, RootResolverConstraint m e query mut sub) => RootResolver m e query mut sub -> a -> m b debugInterpreter :: (MapAPI a b, RootResolverConstraint m e query mut sub) => RootResolver m e query mut sub -> a -> m b data App event (m :: Type -> Type) deriveApp :: RootResolverConstraint m event query mut sub => RootResolver m event query mut sub -> App event m runApp :: (MapAPI a b, Monad m) => App e m -> a -> m b withDebugger :: forall e (m :: Type -> Type). App e m -> App e m