{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE NoImplicitPrelude #-} module Data.Morpheus.Server.Deriving.App ( RootResolverConstraint, deriveSchema, deriveApp, ) where -- MORPHEUS import Control.Monad (Monad) import Data.Functor.Identity (Identity (..)) import Data.Morpheus.Core ( App (..), mkApp, ) import Data.Morpheus.Server.Deriving.Encode ( EncodeConstraints, deriveModel, ) import Data.Morpheus.Server.Deriving.Schema ( SchemaConstraints, deriveSchema, ) import Data.Morpheus.Types ( RootResolver (..), ) import Data.Morpheus.Types.Internal.Resolving ( resultOr, ) type RootResolverConstraint m e query mutation subscription = ( EncodeConstraints e m query mutation subscription, SchemaConstraints e m query mutation subscription, Monad m ) deriveApp :: RootResolverConstraint m event query mut sub => RootResolver m event query mut sub -> App event m deriveApp root = resultOr FailApp (`mkApp` deriveModel root) (deriveSchema (Identity root))