{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} module Data.Morpheus.Subscriptions.Event ( Event (..), runEvents, ) where import Data.Morpheus.App.Internal.Resolving ( EventHandler (..), ) import Relude data Event ch con = Event { Event ch con -> [ch] channels :: [ch], Event ch con -> con content :: con } instance EventHandler (Event ch con) where type Channel (Event ch con) = ch getChannels :: Event ch con -> [Channel (Event ch con)] getChannels = Event ch con -> [Channel (Event ch con)] forall ch con. Event ch con -> [ch] channels runEvents :: (Foldable t, Applicative f) => t (event -> f b) -> event -> f () runEvents :: t (event -> f b) -> event -> f () runEvents t (event -> f b) fs event e = ((event -> f b) -> f b) -> t (event -> f b) -> f () forall (t :: * -> *) (f :: * -> *) a b. (Foldable t, Applicative f) => (a -> f b) -> t a -> f () traverse_ (event e event -> (event -> f b) -> f b forall a b. a -> (a -> b) -> b &) t (event -> f b) fs