Copyright | (C) 2020 Sophie Taylor |
---|---|
License | AGPL-3.0-or-later |
Maintainer | Sophie Taylor <sophie@spacekitteh.moe> |
Stability | experimental |
Portability | GHC |
Safe Haskell | Trustworthy |
Language | GHC2021 |
Games.ECS.MessageQueue
Description
Implements a simple message queuing system.
Synopsis
- data MessageQueue a
- newMessageQueue :: MessageQueue a
- class Monad m => MonadAtomicMessageQueue a (m :: Type -> Type) where
- stateMessageQueue :: (MessageQueue a -> (MessageQueue a, val)) -> m val
- modifyMessageQueue :: (MessageQueue a -> MessageQueue a) -> m ()
- queueMessage :: MonadAtomicMessageQueue a m => a -> m ()
- queueImmediateMessage :: MonadAtomicMessageQueue a m => a -> m ()
- queueMessages :: (Foldable f, MonadAtomicMessageQueue a m) => f a -> m ()
- readMessage :: MonadAtomicMessageQueue a m => (a -> Bool) -> m (Maybe a)
- processMessageQueue :: forall world a m. MonadAtomicMessageQueue a m => (world 'Storing -> a -> Bool) -> (world 'Storing -> a -> m (world 'Storing)) -> world 'Storing -> m (MessagesProcessed a, world 'Storing)
- data MessagesProcessed a
Documentation
data MessageQueue a Source #
The core message queue type.
Instances
Generic (MessageQueue a) Source # | |||||
Defined in Games.ECS.MessageQueue Associated Types
Methods from :: MessageQueue a -> Rep (MessageQueue a) x # to :: Rep (MessageQueue a) x -> MessageQueue a # | |||||
Eq a => Eq (MessageQueue a) Source # | |||||
Defined in Games.ECS.MessageQueue Methods (==) :: MessageQueue a -> MessageQueue a -> Bool # (/=) :: MessageQueue a -> MessageQueue a -> Bool # | |||||
Hashable a => Hashable (MessageQueue a) Source # | |||||
Defined in Games.ECS.MessageQueue | |||||
type Rep (MessageQueue a) Source # | |||||
Defined in Games.ECS.MessageQueue |
newMessageQueue :: MessageQueue a Source #
Construct a new, empty MessageQueue
.
class Monad m => MonadAtomicMessageQueue a (m :: Type -> Type) where Source #
Monads which can atomically modify a MessageQueue
.
Methods
stateMessageQueue :: (MessageQueue a -> (MessageQueue a, val)) -> m val Source #
Monadically perform a given state transition atomically on the MessageQueue
, and return the result.
modifyMessageQueue :: (MessageQueue a -> MessageQueue a) -> m () Source #
Atomically modify a MessageQueue
.
queueMessage :: MonadAtomicMessageQueue a m => a -> m () Source #
Queue message
queueImmediateMessage :: MonadAtomicMessageQueue a m => a -> m () Source #
Push a message on to the front of the queue.
queueMessages :: (Foldable f, MonadAtomicMessageQueue a m) => f a -> m () Source #
Queue a series of messages
readMessage :: MonadAtomicMessageQueue a m => (a -> Bool) -> m (Maybe a) Source #
Pops the message queue
Arguments
:: forall world a m. MonadAtomicMessageQueue a m | |
=> (world 'Storing -> a -> Bool) | Predicate on whether a message should be skipped this time round, and left in the queue. |
-> (world 'Storing -> a -> m (world 'Storing)) | How to process an individual message. |
-> world 'Storing | The world. |
-> m (MessagesProcessed a, world 'Storing) |
Processes a message queue until it's empty.
data MessagesProcessed a Source #
Which messages were processed.
Constructors
AllMessagesProcessed | |
NewMessagesProcessed !(Seq a) |