{-# LANGUAGE MultiParamTypeClasses #-} module Affection.MessageBus.Class where import Control.Concurrent.STM as STM import Affection.MessageBus.Message newtype (Message msg) => Channel msg = Channel (TChan msg) class (Message msg) => Participant prt msg where partChannel :: prt -> Channel msg -- partConnectChannel :: prt -> Channel msg -> IO () partListen :: prt -> IO (Maybe msg) partEmit :: prt -> msg -> IO ()