morpheus-graphql-0.20.0: test/Feature/Inference/TaggedArguments.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE TypeFamilies #-}
module Feature.Inference.TaggedArguments
( api,
)
where
import Data.Kind (Type)
import Data.Morpheus (interpreter)
import Data.Morpheus.Types
( Arg (..),
GQLRequest,
GQLResponse,
GQLType (..),
RootResolver (..),
Undefined,
defaultRootResolver,
)
import Data.Text
( Text,
pack,
)
import GHC.Generics (Generic)
data A = A
{ a1 :: Text,
a2 :: Int
}
deriving
( Show,
Generic,
GQLType
)
newtype B = B
{b1 :: Text}
deriving
( Show,
Generic,
GQLType
)
newtype C = C
{c1 :: Int}
deriving
( Show,
Generic,
GQLType
)
data Query (m :: Type -> Type) = Query
{ field1 :: A -> B -> C -> m Text,
field2 :: A -> Arg "b1" Text -> Arg "c1" Int -> m Text
}
deriving
( Generic,
GQLType
)
root :: RootResolver IO () Query Undefined Undefined
root =
defaultRootResolver
{ queryResolver =
Query
{ field1 = \a b c -> pure $ pack $ show (a, b, c),
field2 = \a b c -> pure $ pack $ show (a, b, c)
}
}
api :: GQLRequest -> IO GQLResponse
api = interpreter root