{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} module Data.Morpheus.App.Internal.Resolving.Event ( EventHandler (..), ResponseEvent (..), ) where import Data.Kind (Type) import Data.Morpheus.Types.IO ( GQLResponse, ) class EventHandler e where type Channel e :: Type data ResponseEvent event (m :: Type -> Type) = Publish event | Subscribe { forall event (m :: * -> *). ResponseEvent event m -> Channel event subChannel :: Channel event, forall event (m :: * -> *). ResponseEvent event m -> event -> m GQLResponse subRes :: event -> m GQLResponse }