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