{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} module Feature.Input.Scalar.API ( api ) where import Data.Morpheus ( interpreter ) import Data.Morpheus.Types ( GQLRequest , GQLResponse , GQLRootResolver(..) , GQLType(..) , Undefined(..) ) import GHC.Generics ( Generic ) -- types & args newtype Arg a = Arg { value :: a } deriving (Generic, Show) -- query testRes :: Applicative m => Arg a -> m a testRes Arg { value } = pure value -- resolver data Query m = Query { testFloat :: Arg Float -> m Float , testInt :: Arg Int -> m Int } deriving (Generic, GQLType) rootResolver :: GQLRootResolver IO () Query Undefined Undefined rootResolver = GQLRootResolver { queryResolver = Query { testFloat = testRes, testInt = testRes } , mutationResolver = Undefined , subscriptionResolver = Undefined } api :: GQLRequest -> IO GQLResponse api = interpreter rootResolver