{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} module Data.Morpheus.Server.Deriving.Utils.Use ( UseDeriving (..), GQLTypeCTX (..), UseGQLValue (..), UseResolver (..), UseNamedResolver (..), UseRef (..), UseGQLType (..), GQLValueCTX (..), useDecodeArguments, ) where import Data.Morpheus.App.Internal.Resolving (NamedResolver (..), ResolverState, ResolverValue) import Data.Morpheus.Generic (ScanRef) import Data.Morpheus.Internal.Ext (GQLResult) import Data.Morpheus.Server.Deriving.Utils.GScan (FreeCatType) import Data.Morpheus.Server.Deriving.Utils.Types import Data.Morpheus.Server.Types.Directives ( GDirectiveUsages (..), ) import Data.Morpheus.Server.Types.Internal import Data.Morpheus.Server.Types.TypeName ( TypeFingerprint, ) import Data.Morpheus.Types.Internal.AST ( Arguments, ArgumentsDefinition, CONST, TypeName, TypeWrapper, VALID, ValidValue, Value, ) import Relude data UseRef (c :: Type -> Constraint) where UseRef :: (c a) => CatType t a -> UseRef c class UseGQLType ctx con | ctx -> con where useFingerprint :: (con a) => ctx -> CatType c a -> TypeFingerprint useTypename :: (con a) => ctx -> CatType c a -> TypeName useWrappers :: (con a) => ctx -> CatType c a -> TypeWrapper useDeriveNode :: (con a) => ctx -> CatType c a -> GQLResult (GQLTypeNode c) useDeriveFieldArgs :: (con a) => ctx -> CatType c a -> GQLResult (ArgumentsDefinition CONST) useExploreRef :: (con a) => ctx -> CatType c a -> [ScanRef FreeCatType con] data GQLTypeCTX gql = GQLTypeCTX { forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> TypeFingerprint __useFingerprint :: forall c a. (gql a) => CatType c a -> TypeFingerprint, forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> TypeName __useTypename :: forall c a. (gql a) => CatType c a -> TypeName, forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> TypeData __useTypeData :: forall c a. (gql a) => CatType c a -> TypeData, forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> GQLResult (GQLTypeNode c) __useDeriveNode :: forall c a. (gql a) => CatType c a -> GQLResult (GQLTypeNode c), forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> GQLResult (ArgumentsDefinition CONST) __useDeriveFieldArgs :: forall c a. (gql a) => CatType c a -> GQLResult (ArgumentsDefinition CONST), forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> [ScanRef FreeCatType gql] __useExploreRef :: forall c a. (gql a) => CatType c a -> [ScanRef FreeCatType gql] } instance UseGQLType (GQLTypeCTX gql) gql where useFingerprint :: forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> TypeFingerprint useFingerprint GQLTypeCTX {forall (c :: TypeCategory) a. gql a => CatType c a -> TypeFingerprint __useFingerprint :: forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> TypeFingerprint __useFingerprint :: forall (c :: TypeCategory) a. gql a => CatType c a -> TypeFingerprint __useFingerprint} = CatType c a -> TypeFingerprint forall (c :: TypeCategory) a. gql a => CatType c a -> TypeFingerprint __useFingerprint useTypename :: forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> TypeName useTypename GQLTypeCTX {forall (c :: TypeCategory) a. gql a => CatType c a -> TypeName __useTypename :: forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> TypeName __useTypename :: forall (c :: TypeCategory) a. gql a => CatType c a -> TypeName __useTypename} = CatType c a -> TypeName forall (c :: TypeCategory) a. gql a => CatType c a -> TypeName __useTypename useWrappers :: forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> TypeWrapper useWrappers GQLTypeCTX {forall (c :: TypeCategory) a. gql a => CatType c a -> TypeData __useTypeData :: forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> TypeData __useTypeData :: forall (c :: TypeCategory) a. gql a => CatType c a -> TypeData __useTypeData} = TypeData -> TypeWrapper gqlWrappers (TypeData -> TypeWrapper) -> (CatType c a -> TypeData) -> CatType c a -> TypeWrapper forall b c a. (b -> c) -> (a -> b) -> a -> c . CatType c a -> TypeData forall (c :: TypeCategory) a. gql a => CatType c a -> TypeData __useTypeData useDeriveNode :: forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> GQLResult (GQLTypeNode c) useDeriveNode GQLTypeCTX {forall (c :: TypeCategory) a. gql a => CatType c a -> GQLResult (GQLTypeNode c) __useDeriveNode :: forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> GQLResult (GQLTypeNode c) __useDeriveNode :: forall (c :: TypeCategory) a. gql a => CatType c a -> GQLResult (GQLTypeNode c) __useDeriveNode} = CatType c a -> GQLResult (GQLTypeNode c) forall (c :: TypeCategory) a. gql a => CatType c a -> GQLResult (GQLTypeNode c) __useDeriveNode useDeriveFieldArgs :: forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> GQLResult (ArgumentsDefinition CONST) useDeriveFieldArgs GQLTypeCTX {forall (c :: TypeCategory) a. gql a => CatType c a -> GQLResult (ArgumentsDefinition CONST) __useDeriveFieldArgs :: forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> GQLResult (ArgumentsDefinition CONST) __useDeriveFieldArgs :: forall (c :: TypeCategory) a. gql a => CatType c a -> GQLResult (ArgumentsDefinition CONST) __useDeriveFieldArgs} = CatType c a -> GQLResult (ArgumentsDefinition CONST) forall (c :: TypeCategory) a. gql a => CatType c a -> GQLResult (ArgumentsDefinition CONST) __useDeriveFieldArgs useExploreRef :: forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> [ScanRef FreeCatType gql] useExploreRef GQLTypeCTX {forall (c :: TypeCategory) a. gql a => CatType c a -> [ScanRef FreeCatType gql] __useExploreRef :: forall (gql :: * -> Constraint). GQLTypeCTX gql -> forall (c :: TypeCategory) a. gql a => CatType c a -> [ScanRef FreeCatType gql] __useExploreRef :: forall (c :: TypeCategory) a. gql a => CatType c a -> [ScanRef FreeCatType gql] __useExploreRef} = CatType c a -> [ScanRef FreeCatType gql] forall (c :: TypeCategory) a. gql a => CatType c a -> [ScanRef FreeCatType gql] __useExploreRef data GQLValueCTX val = GQLValueCTX { forall (val :: * -> Constraint). GQLValueCTX val -> forall a. val a => a -> GQLResult (Value CONST) __useEncodeValue :: forall a. (val a) => a -> GQLResult (Value CONST), forall (val :: * -> Constraint). GQLValueCTX val -> forall a. val a => ValidValue -> ResolverState a __useDecodeValue :: forall a. (val a) => ValidValue -> ResolverState a } class UseGQLValue ctx con | ctx -> con where useEncodeValue :: (con a) => ctx -> a -> GQLResult (Value CONST) useDecodeValue :: (con a) => ctx -> ValidValue -> ResolverState a instance UseGQLValue (GQLValueCTX val) val where useEncodeValue :: forall a. val a => GQLValueCTX val -> a -> GQLResult (Value CONST) useEncodeValue GQLValueCTX {forall a. val a => a -> GQLResult (Value CONST) __useEncodeValue :: forall (val :: * -> Constraint). GQLValueCTX val -> forall a. val a => a -> GQLResult (Value CONST) __useEncodeValue :: forall a. val a => a -> GQLResult (Value CONST) __useEncodeValue} = a -> GQLResult (Value CONST) forall a. val a => a -> GQLResult (Value CONST) __useEncodeValue useDecodeValue :: forall a. val a => GQLValueCTX val -> ValidValue -> ResolverState a useDecodeValue GQLValueCTX {forall a. val a => ValidValue -> ResolverState a __useDecodeValue :: forall (val :: * -> Constraint). GQLValueCTX val -> forall a. val a => ValidValue -> ResolverState a __useDecodeValue :: forall a. val a => ValidValue -> ResolverState a __useDecodeValue} = ValidValue -> ResolverState a forall a. val a => ValidValue -> ResolverState a __useDecodeValue data UseDeriving gql val = UseDeriving { forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> forall (f :: * -> *) a. gql a => f a -> GDirectiveUsages gql val useDirectives :: forall f a. (gql a) => f a -> GDirectiveUsages gql val, forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> GQLValueCTX val __useValue :: GQLValueCTX val, forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> GQLTypeCTX gql __useGQL :: GQLTypeCTX gql } instance UseGQLType (UseDeriving gql val) gql where useFingerprint :: forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> TypeFingerprint useFingerprint = GQLTypeCTX gql -> CatType c a -> TypeFingerprint forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> TypeFingerprint forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> TypeFingerprint useFingerprint (GQLTypeCTX gql -> CatType c a -> TypeFingerprint) -> (UseDeriving gql val -> GQLTypeCTX gql) -> UseDeriving gql val -> CatType c a -> TypeFingerprint forall b c a. (b -> c) -> (a -> b) -> a -> c . UseDeriving gql val -> GQLTypeCTX gql forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> GQLTypeCTX gql __useGQL useTypename :: forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> TypeName useTypename = GQLTypeCTX gql -> CatType c a -> TypeName forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> TypeName forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> TypeName useTypename (GQLTypeCTX gql -> CatType c a -> TypeName) -> (UseDeriving gql val -> GQLTypeCTX gql) -> UseDeriving gql val -> CatType c a -> TypeName forall b c a. (b -> c) -> (a -> b) -> a -> c . UseDeriving gql val -> GQLTypeCTX gql forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> GQLTypeCTX gql __useGQL useWrappers :: forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> TypeWrapper useWrappers = GQLTypeCTX gql -> CatType c a -> TypeWrapper forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> TypeWrapper forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> TypeWrapper useWrappers (GQLTypeCTX gql -> CatType c a -> TypeWrapper) -> (UseDeriving gql val -> GQLTypeCTX gql) -> UseDeriving gql val -> CatType c a -> TypeWrapper forall b c a. (b -> c) -> (a -> b) -> a -> c . UseDeriving gql val -> GQLTypeCTX gql forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> GQLTypeCTX gql __useGQL useDeriveNode :: forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> GQLResult (GQLTypeNode c) useDeriveNode = GQLTypeCTX gql -> CatType c a -> GQLResult (GQLTypeNode c) forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> GQLResult (GQLTypeNode c) forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> GQLResult (GQLTypeNode c) useDeriveNode (GQLTypeCTX gql -> CatType c a -> GQLResult (GQLTypeNode c)) -> (UseDeriving gql val -> GQLTypeCTX gql) -> UseDeriving gql val -> CatType c a -> GQLResult (GQLTypeNode c) forall b c a. (b -> c) -> (a -> b) -> a -> c . UseDeriving gql val -> GQLTypeCTX gql forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> GQLTypeCTX gql __useGQL useDeriveFieldArgs :: forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST) useDeriveFieldArgs = GQLTypeCTX gql -> CatType c a -> GQLResult (ArgumentsDefinition CONST) forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> GQLResult (ArgumentsDefinition CONST) forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> GQLResult (ArgumentsDefinition CONST) useDeriveFieldArgs (GQLTypeCTX gql -> CatType c a -> GQLResult (ArgumentsDefinition CONST)) -> (UseDeriving gql val -> GQLTypeCTX gql) -> UseDeriving gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST) forall b c a. (b -> c) -> (a -> b) -> a -> c . UseDeriving gql val -> GQLTypeCTX gql forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> GQLTypeCTX gql __useGQL useExploreRef :: forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> [ScanRef FreeCatType gql] useExploreRef = GQLTypeCTX gql -> CatType c a -> [ScanRef FreeCatType gql] forall a (c :: TypeCategory). gql a => GQLTypeCTX gql -> CatType c a -> [ScanRef FreeCatType gql] forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> [ScanRef FreeCatType con] useExploreRef (GQLTypeCTX gql -> CatType c a -> [ScanRef FreeCatType gql]) -> (UseDeriving gql val -> GQLTypeCTX gql) -> UseDeriving gql val -> CatType c a -> [ScanRef FreeCatType gql] forall b c a. (b -> c) -> (a -> b) -> a -> c . UseDeriving gql val -> GQLTypeCTX gql forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> GQLTypeCTX gql __useGQL instance UseGQLValue (UseDeriving gql val) val where useEncodeValue :: forall a. val a => UseDeriving gql val -> a -> GQLResult (Value CONST) useEncodeValue = GQLValueCTX val -> a -> GQLResult (Value CONST) forall a. val a => GQLValueCTX val -> a -> GQLResult (Value CONST) forall ctx (con :: * -> Constraint) a. (UseGQLValue ctx con, con a) => ctx -> a -> GQLResult (Value CONST) useEncodeValue (GQLValueCTX val -> a -> GQLResult (Value CONST)) -> (UseDeriving gql val -> GQLValueCTX val) -> UseDeriving gql val -> a -> GQLResult (Value CONST) forall b c a. (b -> c) -> (a -> b) -> a -> c . UseDeriving gql val -> GQLValueCTX val forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> GQLValueCTX val __useValue useDecodeValue :: forall a. val a => UseDeriving gql val -> ValidValue -> ResolverState a useDecodeValue = GQLValueCTX val -> ValidValue -> ResolverState a forall a. val a => GQLValueCTX val -> ValidValue -> ResolverState a forall ctx (con :: * -> Constraint) a. (UseGQLValue ctx con, con a) => ctx -> ValidValue -> ResolverState a useDecodeValue (GQLValueCTX val -> ValidValue -> ResolverState a) -> (UseDeriving gql val -> GQLValueCTX val) -> UseDeriving gql val -> ValidValue -> ResolverState a forall b c a. (b -> c) -> (a -> b) -> a -> c . UseDeriving gql val -> GQLValueCTX val forall (gql :: * -> Constraint) (val :: * -> Constraint). UseDeriving gql val -> GQLValueCTX val __useValue data UseResolver res gql val = UseResolver { forall (res :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseResolver res gql val -> forall a (m :: * -> *). res m a => a -> m (ResolverValue m) useEncodeResolver :: forall a m. (res m a) => a -> m (ResolverValue m), forall (res :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseResolver res gql val -> UseDeriving gql val resDrv :: UseDeriving gql val } instance UseGQLType (UseResolver res gql val) gql where useFingerprint :: forall a (c :: TypeCategory). gql a => UseResolver res gql val -> CatType c a -> TypeFingerprint useFingerprint = UseDeriving gql val -> CatType c a -> TypeFingerprint forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> TypeFingerprint forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> TypeFingerprint useFingerprint (UseDeriving gql val -> CatType c a -> TypeFingerprint) -> (UseResolver res gql val -> UseDeriving gql val) -> UseResolver res gql val -> CatType c a -> TypeFingerprint forall b c a. (b -> c) -> (a -> b) -> a -> c . UseResolver res gql val -> UseDeriving gql val forall (res :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseResolver res gql val -> UseDeriving gql val resDrv useTypename :: forall a (c :: TypeCategory). gql a => UseResolver res gql val -> CatType c a -> TypeName useTypename = UseDeriving gql val -> CatType c a -> TypeName forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> TypeName forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> TypeName useTypename (UseDeriving gql val -> CatType c a -> TypeName) -> (UseResolver res gql val -> UseDeriving gql val) -> UseResolver res gql val -> CatType c a -> TypeName forall b c a. (b -> c) -> (a -> b) -> a -> c . UseResolver res gql val -> UseDeriving gql val forall (res :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseResolver res gql val -> UseDeriving gql val resDrv useWrappers :: forall a (c :: TypeCategory). gql a => UseResolver res gql val -> CatType c a -> TypeWrapper useWrappers = UseDeriving gql val -> CatType c a -> TypeWrapper forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> TypeWrapper forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> TypeWrapper useWrappers (UseDeriving gql val -> CatType c a -> TypeWrapper) -> (UseResolver res gql val -> UseDeriving gql val) -> UseResolver res gql val -> CatType c a -> TypeWrapper forall b c a. (b -> c) -> (a -> b) -> a -> c . UseResolver res gql val -> UseDeriving gql val forall (res :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseResolver res gql val -> UseDeriving gql val resDrv useDeriveNode :: forall a (c :: TypeCategory). gql a => UseResolver res gql val -> CatType c a -> GQLResult (GQLTypeNode c) useDeriveNode = UseDeriving gql val -> CatType c a -> GQLResult (GQLTypeNode c) forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> GQLResult (GQLTypeNode c) forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> GQLResult (GQLTypeNode c) useDeriveNode (UseDeriving gql val -> CatType c a -> GQLResult (GQLTypeNode c)) -> (UseResolver res gql val -> UseDeriving gql val) -> UseResolver res gql val -> CatType c a -> GQLResult (GQLTypeNode c) forall b c a. (b -> c) -> (a -> b) -> a -> c . UseResolver res gql val -> UseDeriving gql val forall (res :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseResolver res gql val -> UseDeriving gql val resDrv useDeriveFieldArgs :: forall a (c :: TypeCategory). gql a => UseResolver res gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST) useDeriveFieldArgs = UseDeriving gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST) forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST) forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> GQLResult (ArgumentsDefinition CONST) useDeriveFieldArgs (UseDeriving gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST)) -> (UseResolver res gql val -> UseDeriving gql val) -> UseResolver res gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST) forall b c a. (b -> c) -> (a -> b) -> a -> c . UseResolver res gql val -> UseDeriving gql val forall (res :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseResolver res gql val -> UseDeriving gql val resDrv useExploreRef :: forall a (c :: TypeCategory). gql a => UseResolver res gql val -> CatType c a -> [ScanRef FreeCatType gql] useExploreRef = UseDeriving gql val -> CatType c a -> [ScanRef FreeCatType gql] forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> [ScanRef FreeCatType gql] forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> [ScanRef FreeCatType con] useExploreRef (UseDeriving gql val -> CatType c a -> [ScanRef FreeCatType gql]) -> (UseResolver res gql val -> UseDeriving gql val) -> UseResolver res gql val -> CatType c a -> [ScanRef FreeCatType gql] forall b c a. (b -> c) -> (a -> b) -> a -> c . UseResolver res gql val -> UseDeriving gql val forall (res :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseResolver res gql val -> UseDeriving gql val resDrv instance UseGQLValue (UseResolver res gql val) val where useEncodeValue :: forall a. val a => UseResolver res gql val -> a -> GQLResult (Value CONST) useEncodeValue = UseDeriving gql val -> a -> GQLResult (Value CONST) forall a. val a => UseDeriving gql val -> a -> GQLResult (Value CONST) forall ctx (con :: * -> Constraint) a. (UseGQLValue ctx con, con a) => ctx -> a -> GQLResult (Value CONST) useEncodeValue (UseDeriving gql val -> a -> GQLResult (Value CONST)) -> (UseResolver res gql val -> UseDeriving gql val) -> UseResolver res gql val -> a -> GQLResult (Value CONST) forall b c a. (b -> c) -> (a -> b) -> a -> c . UseResolver res gql val -> UseDeriving gql val forall (res :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseResolver res gql val -> UseDeriving gql val resDrv useDecodeValue :: forall a. val a => UseResolver res gql val -> ValidValue -> ResolverState a useDecodeValue = UseDeriving gql val -> ValidValue -> ResolverState a forall a. val a => UseDeriving gql val -> ValidValue -> ResolverState a forall ctx (con :: * -> Constraint) a. (UseGQLValue ctx con, con a) => ctx -> ValidValue -> ResolverState a useDecodeValue (UseDeriving gql val -> ValidValue -> ResolverState a) -> (UseResolver res gql val -> UseDeriving gql val) -> UseResolver res gql val -> ValidValue -> ResolverState a forall b c a. (b -> c) -> (a -> b) -> a -> c . UseResolver res gql val -> UseDeriving gql val forall (res :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseResolver res gql val -> UseDeriving gql val resDrv data UseNamedResolver named fun gql val = UseNamedResolver { forall (named :: (* -> *) -> * -> Constraint) (fun :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseNamedResolver named fun gql val -> forall a (m :: * -> *). fun m a => a -> m (ResolverValue m) useNamedFieldResolver :: forall a m. (fun m a) => a -> m (ResolverValue m), forall (named :: (* -> *) -> * -> Constraint) (fun :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseNamedResolver named fun gql val -> forall (f :: * -> *) a (m :: * -> *). named m a => f a -> [NamedResolver m] useDeriveNamedResolvers :: forall f a m. (named m a) => f a -> [NamedResolver m], forall (named :: (* -> *) -> * -> Constraint) (fun :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseNamedResolver named fun gql val -> forall (f :: * -> *) a (m :: * -> *). named m a => f a -> [ScanRef Proxy (named m)] useDeriveNamedRefs :: forall f a m. (named m a) => f a -> [ScanRef Proxy (named m)], forall (named :: (* -> *) -> * -> Constraint) (fun :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseNamedResolver named fun gql val -> UseDeriving gql val namedDrv :: UseDeriving gql val } instance UseGQLType (UseNamedResolver named res gql val) gql where useFingerprint :: forall a (c :: TypeCategory). gql a => UseNamedResolver named res gql val -> CatType c a -> TypeFingerprint useFingerprint = UseDeriving gql val -> CatType c a -> TypeFingerprint forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> TypeFingerprint forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> TypeFingerprint useFingerprint (UseDeriving gql val -> CatType c a -> TypeFingerprint) -> (UseNamedResolver named res gql val -> UseDeriving gql val) -> UseNamedResolver named res gql val -> CatType c a -> TypeFingerprint forall b c a. (b -> c) -> (a -> b) -> a -> c . UseNamedResolver named res gql val -> UseDeriving gql val forall (named :: (* -> *) -> * -> Constraint) (fun :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseNamedResolver named fun gql val -> UseDeriving gql val namedDrv useTypename :: forall a (c :: TypeCategory). gql a => UseNamedResolver named res gql val -> CatType c a -> TypeName useTypename = UseDeriving gql val -> CatType c a -> TypeName forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> TypeName forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> TypeName useTypename (UseDeriving gql val -> CatType c a -> TypeName) -> (UseNamedResolver named res gql val -> UseDeriving gql val) -> UseNamedResolver named res gql val -> CatType c a -> TypeName forall b c a. (b -> c) -> (a -> b) -> a -> c . UseNamedResolver named res gql val -> UseDeriving gql val forall (named :: (* -> *) -> * -> Constraint) (fun :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseNamedResolver named fun gql val -> UseDeriving gql val namedDrv useWrappers :: forall a (c :: TypeCategory). gql a => UseNamedResolver named res gql val -> CatType c a -> TypeWrapper useWrappers = UseDeriving gql val -> CatType c a -> TypeWrapper forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> TypeWrapper forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> TypeWrapper useWrappers (UseDeriving gql val -> CatType c a -> TypeWrapper) -> (UseNamedResolver named res gql val -> UseDeriving gql val) -> UseNamedResolver named res gql val -> CatType c a -> TypeWrapper forall b c a. (b -> c) -> (a -> b) -> a -> c . UseNamedResolver named res gql val -> UseDeriving gql val forall (named :: (* -> *) -> * -> Constraint) (fun :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseNamedResolver named fun gql val -> UseDeriving gql val namedDrv useDeriveNode :: forall a (c :: TypeCategory). gql a => UseNamedResolver named res gql val -> CatType c a -> GQLResult (GQLTypeNode c) useDeriveNode = UseDeriving gql val -> CatType c a -> GQLResult (GQLTypeNode c) forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> GQLResult (GQLTypeNode c) forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> GQLResult (GQLTypeNode c) useDeriveNode (UseDeriving gql val -> CatType c a -> GQLResult (GQLTypeNode c)) -> (UseNamedResolver named res gql val -> UseDeriving gql val) -> UseNamedResolver named res gql val -> CatType c a -> GQLResult (GQLTypeNode c) forall b c a. (b -> c) -> (a -> b) -> a -> c . UseNamedResolver named res gql val -> UseDeriving gql val forall (named :: (* -> *) -> * -> Constraint) (fun :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseNamedResolver named fun gql val -> UseDeriving gql val namedDrv useDeriveFieldArgs :: forall a (c :: TypeCategory). gql a => UseNamedResolver named res gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST) useDeriveFieldArgs = UseDeriving gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST) forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST) forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> GQLResult (ArgumentsDefinition CONST) useDeriveFieldArgs (UseDeriving gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST)) -> (UseNamedResolver named res gql val -> UseDeriving gql val) -> UseNamedResolver named res gql val -> CatType c a -> GQLResult (ArgumentsDefinition CONST) forall b c a. (b -> c) -> (a -> b) -> a -> c . UseNamedResolver named res gql val -> UseDeriving gql val forall (named :: (* -> *) -> * -> Constraint) (fun :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseNamedResolver named fun gql val -> UseDeriving gql val namedDrv useExploreRef :: forall a (c :: TypeCategory). gql a => UseNamedResolver named res gql val -> CatType c a -> [ScanRef FreeCatType gql] useExploreRef = UseDeriving gql val -> CatType c a -> [ScanRef FreeCatType gql] forall a (c :: TypeCategory). gql a => UseDeriving gql val -> CatType c a -> [ScanRef FreeCatType gql] forall ctx (con :: * -> Constraint) a (c :: TypeCategory). (UseGQLType ctx con, con a) => ctx -> CatType c a -> [ScanRef FreeCatType con] useExploreRef (UseDeriving gql val -> CatType c a -> [ScanRef FreeCatType gql]) -> (UseNamedResolver named res gql val -> UseDeriving gql val) -> UseNamedResolver named res gql val -> CatType c a -> [ScanRef FreeCatType gql] forall b c a. (b -> c) -> (a -> b) -> a -> c . UseNamedResolver named res gql val -> UseDeriving gql val forall (named :: (* -> *) -> * -> Constraint) (fun :: (* -> *) -> * -> Constraint) (gql :: * -> Constraint) (val :: * -> Constraint). UseNamedResolver named fun gql val -> UseDeriving gql val namedDrv useDecodeArguments :: (val a) => UseDeriving gql val -> Arguments VALID -> ResolverState a useDecodeArguments :: forall (val :: * -> Constraint) a (gql :: * -> Constraint). val a => UseDeriving gql val -> Arguments VALID -> ResolverState a useDecodeArguments UseDeriving gql val ctx = UseDeriving gql val -> ValidValue -> ResolverState a forall a. val a => UseDeriving gql val -> ValidValue -> ResolverState a forall ctx (con :: * -> Constraint) a. (UseGQLValue ctx con, con a) => ctx -> ValidValue -> ResolverState a useDecodeValue UseDeriving gql val ctx (ValidValue -> ResolverState a) -> (Arguments VALID -> ValidValue) -> Arguments VALID -> ResolverState a forall b c a. (b -> c) -> (a -> b) -> a -> c . Arguments VALID -> ValidValue argumentsToObject