module Mensam.Server.Application.Configured.Class where import Mensam.Server.Configuration import Control.Monad.Trans import Control.Monad.Trans.Compose import Control.Monad.Trans.Elevator import Data.Kind type MonadConfigured :: (Type -> Type) -> Constraint class Monad m => MonadConfigured m where configuration :: m Configuration instance ( Monad (t m) , MonadTrans t , MonadConfigured m ) => MonadConfigured (Elevator t m) where configuration :: Elevator t m Configuration configuration = m Configuration -> Elevator t m Configuration forall (m :: * -> *) a. Monad m => m a -> Elevator t m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m Configuration forall (m :: * -> *). MonadConfigured m => m Configuration configuration deriving via Elevator t1 ((t2 :: (Type -> Type) -> Type -> Type) m) instance {-# OVERLAPPABLE #-} ( Monad (t1 (t2 m)) , MonadTrans t1 , MonadConfigured (t2 m) ) => MonadConfigured (ComposeT t1 t2 m)