{-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE Safe #-} {-# LANGUAGE TypeFamilies #-} module Bot.DSL.Network where import Data.Text (Text) data Request meta = Request { content :: Text , meta :: meta } data Response meta = Response { content :: Text , meta :: meta } class Monad m => MonadNetwork m where -- Meta for stuff like event types, or source / target information type Meta m :: * recvMsg :: m (Request (Meta m)) putMsg :: Response (Meta m) -> m ()